ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

4
ตั้งค่าขนาดของไฟล์บันทึกด้วยตนเองหลังจากลดขนาด SQL Server 2008 R2
กำลังกลายเป็น DBA ที่ไม่ได้ตั้งใจในการทำงานที่พวกเขาในเวลานั้นและต้องการความช่วยเหลือในบางสิ่งบางอย่าง เรามีฐานข้อมูล 40GB ในโหมดการกู้คืนเต็มไม่มีการสำรองข้อมูลบันทึกการกำหนดค่าและไฟล์บันทึกขนาดใหญ่ 84GB แผนของฉันในการกอบกู้สถานการณ์นี้คือการเรียกใช้การสำรองข้อมูลบันทึกเต็มรูปแบบในฐานข้อมูลลดขนาดแฟ้มบันทึกและสร้างแผนการบำรุงรักษาเพื่อเรียกใช้การสำรองข้อมูลบันทึกทุกคืนด้วยการสำรองฐานข้อมูลเพื่อช่วยให้สามารถควบคุมได้ ปัญหาของฉันคือฉันไม่ต้องการให้ล็อกไฟล์ย่อขนาดลงและใช้จ่ายในเช้าวันแรกของวันจันทร์ที่เติบโตอย่างต่อเนื่อง ฉันมีการประมาณการคร่าวๆว่าไฟล์ควรเป็นอย่างไร (ประมาณ 20% ของฐานข้อมูล) และต้องการตั้งค่านี้จาก get-go เพื่อให้แน่ใจว่ามีพื้นที่ต่อเนื่องมากที่สุด นี่เป็นเพียงกรณีของการเปลี่ยน "ขนาดเริ่มต้น" ภายใต้คุณสมบัติของฐานข้อมูล -> ไฟล์หรือไม่ ฉันเดาเช่นกันว่าฐานข้อมูลจะต้องออฟไลน์เพื่อให้เกิดสิ่งนี้? ขอบคุณล่วงหน้า

3
เปลี่ยนการจับข้อมูล - จะรู้ได้อย่างไรว่าใครเป็นผู้เปลี่ยนแปลง
การติดตามผู้ที่ทำการเปลี่ยนแปลงที่ระบุโดย CDC ตามแนวของการแฮ็ก datetime ของฉันฉันลองวิธีเดียวกันโดยเพิ่ม suser_sname เป็นฟิลด์ใหม่ที่มีค่าเริ่มต้นในตารางเปลี่ยนแทร็ก cdc แต่ดูเหมือนว่าจะส่งคืนเจ้าของกระบวนการ cdc ไม่ใช่ผู้ใช้ที่เริ่มต้นการเปลี่ยนแปลงบนตารางพื้นฐาน ฉันยังลอง original_login แต่นั่นกลับเข้าสู่บัญชีบริการ sql อีกครั้งน่าจะเกี่ยวข้องกับกระบวนการ cdc ไม่ใช่ผู้ใช้ที่เริ่มต้นการเปลี่ยนแปลง ฉันพบคำถามที่คล้ายกันใน stack-overflowแต่ไม่มีคำตอบอื่นนอกจากการติดตามการเปลี่ยนแปลงจากส่วนหน้าหรือผ่านทริกเกอร์ซึ่งดูเหมือนว่าจะเอาชนะวัตถุประสงค์ของการใช้ cdc ฉันจะไม่โพสต์ใหม่ แต่เนื่องจากต้นฉบับอยู่ใน stackoverflow ฉันคิดว่าฉันจะลองที่นี่โดยเฉพาะถ้า R2 หรือ 2012 ได้แนะนำวิธีที่ดีกว่า ในระยะสั้น: ฉันจะรู้ได้อย่างไรว่าใครเป็นผู้ทำการเปลี่ยนแปลงในการเก็บข้อมูลการเปลี่ยนแปลง?

1
การจัดการข้อยกเว้นในขั้นตอนการจัดเก็บที่เรียกว่าการใช้บล็อกแทรก-exec
ฉันมีขั้นตอนการจัดเก็บที่เรียกว่าในบล็อคแทรก-exec: insert into @t exec('test') ฉันจะจัดการกับข้อยกเว้นที่สร้างขึ้นในขั้นตอนการจัดเก็บและยังคงดำเนินการต่อได้อย่างไร รหัสต่อไปนี้แสดงให้เห็นถึงปัญหา สิ่งที่ฉันต้องการจะทำคือคืน 0 หรือ -1 ขึ้นอยู่กับความสำเร็จหรือความล้มเหลวของการexec()โทรภายใน: alter procedure test -- or create as begin try declare @retval int; -- This code assumes that PrintMax exists already so this generates an error exec('create procedure PrintMax as begin print ''hello world'' end;') set @retval = 0; …

1
เป็นความคิดที่ดีที่จะใช้ฐานข้อมูลเดียวสำหรับร้านค้ากว่า 50,000 แห่งหรือไม่?
ฉันรู้ว่า Shopify ใช้ฐานข้อมูลเดียวเท่านั้นสำหรับร้านค้าทั้งหมด แต่พวกเขาสามารถจัดการฐานข้อมูลด้วยข้อมูลขนาดใหญ่ได้อย่างไร เป็นความคิดที่ดีที่จะใช้ฐานข้อมูลเดียวสำหรับร้านค้ากว่า 50,000 แห่งหรือไม่?

4
วิธีจัดการกับฐานข้อมูลที่ไม่มีเอกสารขนาดใหญ่
ฉันเพิ่งได้รับการว่าจ้างให้เป็น IT Guy คนเดียวใน บริษัท X หนึ่งและฉันได้รับมอบหมายให้แก้ไขแอปพลิเคชันของพวกเขาและในความคิดของฉันวิธีที่ดีที่สุดในการเริ่มต้นคือการทำความเข้าใจฐานข้อมูล ฐานข้อมูลปัจจุบันของพวกเขาคือฐานข้อมูล MySQL ที่มี 186 ตาราง (โปรดทราบว่าบางตารางว่างเปล่าสำหรับพระเจ้ารู้ว่าทำไม) และแอปพลิเคชั่นสื่อสารกับฐานข้อมูลผ่านส่วนต่อประสานฐานข้อมูล MS Access (ฉันถามตัวเองว่าทำไมนักพัฒนาถึงทำเช่นนั้นด้วย) คำถามคือฉันจะเริ่มต้นจัดการฐานข้อมูลที่ไม่มีเอกสารขนาดใหญ่นี้ได้อย่างไร ใช่มันไม่มีเอกสารเนื่องจากผู้พัฒนาแอปพลิเคชันไม่เต็มใจที่จะให้ ERD หรือพจนานุกรมข้อมูลหรือข้อมูลใด ๆ เกี่ยวกับฐานข้อมูลเพื่อทำให้ชีวิตของฉันง่ายขึ้น คุณจะแนะนำให้ใช้ความพยายามที่เต็มไปด้วยอันตรายนี้ในการทำความเข้าใจซอกทุกซอกทุกมุมของฐานข้อมูลที่ค่อนข้างใหญ่ได้อย่างไร คำถามที่เกี่ยวข้อง: วิธีการดำน้ำในฐานข้อมูลที่น่าเกลียด?

2
ผลของการแทนที่ดัชนีด้วยดัชนีที่กรองแล้ว (ไม่ใช่ค่า null) คืออะไร?
โครงการของเราดำเนินงานฐานข้อมูลขนาดใหญ่และซับซ้อนมาก ประมาณหนึ่งเดือนที่แล้วเราสังเกตว่าช่องว่างที่ใช้โดยคอลัมน์ที่มีดัชนีซึ่งมีค่า Null มีขนาดใหญ่เกินไป เพื่อตอบสนองต่อสิ่งนั้นฉันเขียนเป็นสคริปต์ที่จะค้นหาดัชนีคอลัมน์เดี่ยวแบบไดนามิกทั้งหมดที่มีค่า Null มากกว่า 1% จากนั้นปล่อยและสร้างดัชนีเหล่านั้นใหม่เป็นดัชนีที่กรองตามเงื่อนไขที่ค่านั้นไม่ใช่ค่า NULL สิ่งนี้จะดรอปและสร้างดัชนีหลายร้อยรายการใหม่ตลอดทั้งฐานข้อมูลและเพิ่มพื้นที่ว่างเกือบ 15% ของฐานข้อมูลทั้งหมดที่ใช้ ตอนนี้ฉันมีคำถามสองข้อเกี่ยวกับเรื่องนี้: A) ข้อเสียของการใช้ดัชนีที่ถูกกรองในแบบนี้คืออะไร? ฉันจะสมมติว่ามันจะปรับปรุงประสิทธิภาพเท่านั้น แต่มีความเสี่ยงด้านประสิทธิภาพหรือไม่? B) เราได้รับข้อผิดพลาด ( 'ไม่สามารถวางดัชนี XYZ ได้เนื่องจากไม่มีอยู่หรือคุณไม่ได้รับอนุญาต' ) ในการทำดัชนีหล่นและสร้างดัชนีใหม่แม้ว่าจะได้รับการตรวจสอบแล้วก็ตามทุกอย่างเป็นไปตามที่คาดไว้ สิ่งนี้จะเกิดขึ้นได้อย่างไร? ขอบคุณสำหรับความช่วยเหลือใด ๆ ! แก้ไข:เพื่อตอบสนองต่อ @Thomas Kejser สวัสดีและขอบคุณ แต่ปรากฎว่านี่เป็นหายนะ ในเวลานั้นเราไม่เข้าใจหลายสิ่งเช่น: ระหว่างการสืบค้น SQLOS จัดทำแผนดัชนีก่อนที่จะพิจารณาว่าไม่สามารถใช้ค่า NULL สำหรับการเข้าร่วมคอลัมน์ตาราง IE คุณจำเป็นต้องมีตัวกรองคำสั่งย่อย WHERE ที่เหมาะสมสำหรับดัชนีแต่ละตัวกรองที่ใช้ในแบบสอบถามมิฉะนั้นดัชนีจะไม่ถูกใช้เลย การวางและสร้างดัชนีและอัปเดตสถิติของพวกเขาซ้ำซ้อนอีกครั้งหลังจากนั้นอาจยังไม่เพียงพอที่จะสร้างแผนที่อัปเดตซึ่งเราคิดว่าพวกเขาจะทำ มันปรากฏขึ้นในบางกรณีเพียงปริมาณงานที่มากพอที่จะบังคับให้ SQL Server ประเมินแผนอีกครั้ง …

4
วิธีเพิ่มการสำรองข้อมูลที่รวดเร็วและกู้คืนฐานข้อมูล 500GB โดยใช้ mysqldump
มีฐานข้อมูลขนาด 500GB ตารางในฐานข้อมูล A มีทั้งตาราง MyISAM และ INNODB ตาราง MyISAM เป็นตารางต้นแบบและตาราง Innodb เป็นตารางธุรกรรมหลัก สำรองและคืนค่าโดยใช้การถ่ายโอนข้อมูล mysql ออกจากเวลานานหรือวัน max_allowed_packet = 1G foreign_key_checks = 0 auto_commit = ปิด

1
อะไรคือข้อ จำกัด ในทางปฏิบัติเกี่ยวกับตระกูลคอลัมน์ในคาสซานดรา
ในคาสซานดราไม่แนะนำให้มีครอบครัวคอลัมน์มากกว่าสองพันครอบครัวสมมุติว่า 2,000 ครอบครัวเพื่อการโต้แย้ง ในกรณีที่จำเป็นต้องเก็บรักษาข้อมูลมากกว่า 2,000 ประเภทวิธีหนึ่งคือการหักล้างข้อมูลที่ไม่เกี่ยวข้องหลายประเภทลงในแต่ละคอลัมน์ตระกูล ตัวอย่างเช่น CF เดียวสามารถมีคำสั่งซื้อใบแจ้งหนี้และลูกค้าหากคีย์แถวของพวกเขาแตกต่างกัน (เช่นนำหน้าด้วยประเภทวัตถุเช่นคีย์ของ CF เดียวอาจรวมทั้งOrder|1234และCustomer|1234) CF ตัวที่สองอาจประกอบด้วยที่อยู่พูด LineItems และ OrderTypes ด้วยความเป็นไปได้ขั้นพื้นฐานของวิธีการนี้ข้อ จำกัด ในทางปฏิบัติของมันคืออะไร? ตัวอย่างเช่นจะเกิดอะไรขึ้นถ้าใส่วัตถุ 10,000 ชนิดลงใน CF เดียว เท่าที่ฉันสามารถบอกได้จากวิกิพีเดียคาสซานดราไม่มีการ จำกัด ขนาดของ CF อย่างหนัก

3
เก็บสูตรไว้ในตารางและใช้สูตรในฟังก์ชัน
ฉันมีฐานข้อมูล PostgreSQL 9.1 ซึ่งเป็นส่วนหนึ่งที่จัดการค่าคอมมิชชั่นของตัวแทน ตัวแทนแต่ละรายมีสูตรการคำนวณของตนเองเพื่อรับค่าคอมมิชชั่น ฉันมีฟังก์ชั่นในการสร้างจำนวนค่าคอมมิชชันที่แต่ละตัวแทนควรได้รับ แต่มันเป็นไปไม่ได้ที่จะใช้เมื่อจำนวนตัวแทนเพิ่มขึ้น ฉันถูกบังคับให้ทำใบแจ้งยอดที่ยาวและรหัสซ้ำซึ่งทำให้ฟังก์ชั่นของฉันใหญ่มาก สูตรทั้งหมดมีตัวแปรคงที่: d .. วันทำงานในเดือนนั้น r .. โหนดใหม่ได้รับการรับรอง l .. คะแนนความภักดี s .. ค่านายหน้าย่อย b .. อัตราฐาน ฉัน .. รายได้ที่ได้รับ สูตรสามารถเป็นดังนี้: d*b+(l*4+r)+(i/d)+s แต่ละตัวแทนเจรจาสูตรการชำระเงินกับฝ่ายทรัพยากรบุคคล ดังนั้นฉันสามารถเก็บสูตรไว้ในตารางตัวแทนได้แล้วมีฟังก์ชั่นเล็ก ๆ ที่เพิ่งได้สูตรจากตารางและแปลมันด้วยค่าและคำนวณจำนวนหรือไม่

4
ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ sql ในโหมดผู้ใช้คนเดียว
ฉันได้เริ่มต้นของฉันSQL Server 2008 sqlcst02\inst01ในSingle User Modeโดยการผนวกไปยังจุดสิ้นสุดของพารามิเตอร์การเริ่มต้นระบบเช่นนี้;-m SQL Server Configuration Managerฉันได้หยุดSQL Server Agentสำหรับinst01อินสแตนซ์ บัญชีของฉันเป็นสมาชิกคนหนึ่งของDomain Admin groupฉันและฉันได้พยายามที่จะเข้าสู่ระบบการใช้sqlcmd -S sqlcst02\inst01และให้ได้รับข้อผิดพลาดที่ให้บริการอยู่ในSingle User Modeและมีเพียงหนึ่งผู้ดูแลระบบสามารถเข้าสู่ระบบ. ฉันพยายามเพิ่ม;-m"sqlcmd"พารามิเตอร์การเริ่มต้นที่จะ จำกัด การเชื่อมต่อไปเพียงsqlcmdแต่ฉันได้รับ ผลลัพธ์เดียวกัน ฉันได้ลองนี้เข้าสู่ระบบในฐานะบัญชีของตัวเองและเข้าสู่ระบบในฐานะบัญชีผู้ดูแลท้องถิ่น ฉันเริ่มพร้อมท์คำสั่งด้วยตนเองและในฐานะผู้ดูแล แต่ฉันได้รับผลลัพธ์เดียวกัน ฉันได้พยายามเชื่อมต่อใช้ในADMIN:sqlcst02\inst01 SSMSไม่มีโชค. ฉันพยายามรีเซ็ตsaรหัสผ่านเนื่องจากไม่มีผู้ดูแลระบบคนก่อนหน้านี้เหลือข้อมูลนี้ไว้ นี่มันน่าคลั่ง ฉันเคยทำสิ่งนี้มาก่อนในเครื่องอื่น ๆ ที่ไม่มีปัญหา

2
อ่านฐานข้อมูล Oracle โบราณเป็น Oracle เวอร์ชันปัจจุบัน
คอมพิวเตอร์เก่าที่มี Oracle 8i ตายไปแล้ว เรามีการสำรองข้อมูลรายวันของฐานข้อมูล (C: \ oradata) เราไม่สามารถติดตั้ง Oracle เวอร์ชันเก่านี้ได้ทุกที่เพราะเราไม่มีแผ่นซีดีติดตั้ง ตัวอย่างเช่นเราสามารถอ่านฐานข้อมูลนี้ด้วย Oracle Express ได้หรือไม่ ถ้าใช่เป็นอย่างไร

1
SQL Server 2000 ถึง 2008 ถึง 2012
เรากำลังโยกย้ายจาก SQL Server 2000 ถึง 2008 ในขณะนี้ เราทำการเปลี่ยนแปลงโค้ดสคริปต์เนื่องจากมีการเปลี่ยนแปลงมากมายตั้งแต่ปีพ. ศ. 2543 ถึง 2551 ขณะทำการเปลี่ยนแปลงสิ่งที่ฉันต้องการรู้คือ - มีอะไรที่ฉันสามารถทำได้ตอนนี้เพื่อให้เข้ากันได้กับปี 2012 ที่ ในเวลาเดียวกัน อย่างน้อยการเปลี่ยนแปลงเหล่านั้นที่เข้ากันได้ย้อนหลังจาก 2012 ถึง 2008 และอื่น ๆ เหตุผลที่ฉันต้องการทำเช่นนี้คือการลดความพยายามใด ๆ ในอนาคต (3 ถึงสี่ปีต่อจากนี้) เมื่อเราตัดสินใจย้ายจาก 2008 เป็น 2012 อะไรที่ ทั้งหมดที่ฉันสามารถทำได้หรือจำเป็นต้องรู้

3
การเรียกใช้งาน SQL Server ภายในงานอื่น
เป็นไปได้ไหมที่จะเรียกใช้งาน SQL Server เพื่อให้ทำงานภายในงานอื่นได้? ฉันรู้ว่าเราสามารถเพิ่มขั้นตอนทั้งหมดของงาน 1 ลงในงาน 2 แต่ฉันไม่ต้องการทำเช่นนั้น ก่อนอื่นงานที่ 2 ค่อนข้างใหญ่และสองฉันไม่สามารถหาตัวเลือกคัดลอกวางเพื่อคัดลอกขั้นตอนระหว่างงานดังนั้นมันจะใช้เวลานานในการเพิ่มขั้นตอนด้วยตนเอง ข้อเสนอแนะใด ๆ ที่มีความนิยม

2
การลบตาราง MySQL ด้วยธุรกรรมที่ค้างอยู่
มีวิธีการลบตาราง InnoDB หรือฐานข้อมูลที่มีธุรกรรมที่ค้างอยู่ใน MySQL (ควรอยู่ในระดับระบบไฟล์) หรือไม่? เกิดอะไรขึ้น: ฉันใช้ MySQL 5.5.28 และวิ่งLOAD DATA INFILE…เพื่อนำเข้าชุดข้อมูลขนาดใหญ่ (300M แถว) ลงในตาราง InnoDB ฉันไม่ได้ใช้set autocommit = 0;มาก่อน น่าเสียดายที่mysqldมีการหยุดกลางการนำเข้า เมื่อฉันรีสตาร์ทmysqlจะพยายามย้อนกลับธุรกรรมที่กรอกบันทึกของระบบด้วยข้อความเช่นนี้: mysqld_safe [4433]: 121212 16:58:52 InnoDB: กำลังรอ 1 ธุรกรรมที่กำลังจะเสร็จสิ้น ปัญหาคือการย้อนกลับทำงานมากกว่า 25 ชั่วโมงในขณะนี้ซึ่ง mysqldไม่ยอมรับการเชื่อมต่อซ็อกเก็ตใด ๆ ฉันไม่สามารถลบ/var/lib/mysql/*และเริ่มจากศูนย์ได้เนื่องจากมีบางฐานข้อมูล InnoDB / ตารางอื่น ๆ ในเครื่องนี้เช่นกัน อย่างไรก็ตามตารางที่มีปัญหานั้นเป็นตารางเดียวในฐานข้อมูลแยกต่างหาก การลบทั้งตารางหรือฐานข้อมูลทั้งหมดไม่ใช่ปัญหาเนื่องจากฉันสามารถนำเข้าข้อมูลทั้งหมดอีกครั้งในภายหลัง

3
ฉันจะกำหนดค่า SQL Server 2012 เพื่อให้สามารถเรียกคืนและดูไฟล์ในบัญชีผู้ใช้ของฉันได้อย่างไร
ฉันมีอินสแตนซ์ SQL Server 2012 ที่เรียกใช้เป็นบริการบนคอมพิวเตอร์ของฉันและตามหน้าบริการจะล็อกออนเป็นบัญชี "NT Service \ MSSQLSERVER" อย่างไรก็ตามฉันไม่สามารถเห็นชื่อบัญชีนั้นได้ทุกที่รวมถึงในพื้นที่ "ผู้ใช้ท้องถิ่นและกลุ่ม" ในหน้าจอการจัดการคอมพิวเตอร์เพราะตามที่ลิงค์ด้านล่างบอกว่านั่นไม่ใช่บัญชีผู้ใช้มันเป็นชื่อบริการในกล่องนั้น Microsoft จึงมีข้อความว่า "บัญชี" ที่เป็นประโยชน์ เมื่อมาถึงจุดนี้ฉันสามารถเห็นหลายคนกำลังสับสน งานที่ฉันพยายามทำให้สำเร็จคือการกู้คืนไฟล์โดยใช้กล่องโต้ตอบ "ค้นหาไฟล์สำรองข้อมูล" SSMS ซึ่งใช้ไดอะล็อกอย่างสมบูรณ์ซึ่งไม่เหมือนกับไดอะล็อกเปิดไฟล์ windows มาตรฐานใด ๆ อาจเป็นเพราะทำงาน "รีโมต" และทำงานจาก บริบทความปลอดภัยของเซิร์ฟเวอร์ SQL ซึ่งเป็นอีกแหล่งที่มาของความสับสนของผู้ใช้ขั้นปลายที่ฉันหวังว่าคำถามนี้อาจช่วยให้ชัดเจนขึ้น จนถึงตอนนี้ถ้าฉันต้องการกู้คืนไฟล์. mdf / .bak สำรองที่ฉันมีอยู่ในโฟลเดอร์ใดโฟลเดอร์หนึ่งของฉันฉันต้องตั้งค่าโฟลเดอร์นั้นให้ทุกคนสามารถอ่านได้หรืออย่างอื่นฉันไม่สามารถเข้าไปที่นั่นด้วย SQL Server "ค้นหาการสำรองข้อมูล หน้าต่างไฟล์ " ฉันพบว่าความคิดนี้ว่าคุณกำลังใช้ GUI พูดคุยกับบริการที่มีบัญชีผู้ใช้และสิทธิ์ที่แตกต่างจากคุณซึ่งไม่มีใครใน Microsoft ที่ได้รับการเอาใจใส่ที่จะทำให้คุณชัดเจนและสับสนมากแม้ว่าฉันจะมีประสบการณ์กับการบริหารระบบ windows . ฉันหวังว่าฉันพลาดเอกสารหน้าบางส่วนสำหรับ SQL Server …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.