คำถามติดแท็ก sql-server

Microsoft SQL Server ทุกรุ่น (ไม่ใช่ MySQL) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น sql-server-2016 เนื่องจากมักเกี่ยวข้องกับคำถาม

2
การบำรุงรักษาบันทึกธุรกรรมบนฐานข้อมูลมิเรอร์
เวอร์ชันของเซิร์ฟเวอร์ SQL: 2008 R2 Enterprise SP2 ฉันพยายามจัดการกับการบำรุงรักษา SQL Server ของเราและฉันเจอสิ่งที่ฉันคิดว่าไม่ถูกต้อง เรามีอินสแตนซ์การผลิตเดียวซึ่งมี 3 ฐานข้อมูลแต่ละอันถูกมิเรอร์นอกสถานที่ไปยังอินสแตนซ์ DR ในขณะที่ดูอินสแตนซ์ DR ฉันสังเกตเห็นว่าไฟล์ LDF มีขนาดใหญ่มากเกินกว่า 35GB สำหรับฐานข้อมูลที่ใช้งานหนัก ฉันเข้าใจว่าอาจเป็นเพราะฐานข้อมูลมิเรอร์อยู่ในโหมดการกู้คืนแบบเต็มและบันทึกไม่เคยถูกสำรองไว้พวกเขาจะเติบโตต่อไปจนกว่าจะหมดพื้นที่ไดรฟ์ เรากำลังทำการสำรองข้อมูลบันทึกในฐานข้อมูลหลักและคำถามของฉันคือสิ่งที่ gotchas กับการทำสำรองข้อมูลบันทึกในกระจกหรือไม่ ต้องมีการสำรองข้อมูลเต็มรูปแบบอย่างน้อยหนึ่งรายการจากมิเรอร์ก่อนที่จะทำการสำรองข้อมูลบันทึกในกรณีนั้นมีตัวเลือกพิเศษที่จำเป็นต้องใช้เพราะเป็นมิรเรอร์หรือไม่ นี่คือคำแนะนำในการบำรุงรักษาบันทึกธุรกรรมบนฐานข้อมูลMIRROR ขอบคุณสำหรับการป้อนข้อมูลใด ๆ

1
การสุ่มตัวอย่างทำงานอย่างไรเมื่ออัปเดตสถิติ
ฉันมีโต๊ะขนาดใหญ่หลายแห่ง ฉันต้องการตรวจสอบให้แน่ใจว่าสถิติของพวกเขาเป็นข้อมูลล่าสุดผ่านแผนการบำรุงรักษารายสัปดาห์ อย่างไรก็ตามการทำเช่นนั้นใช้เวลามากเกินไป ถ้าฉันระบุ WITH SAMPLE 50 PERCENT ทำ SQL Server แล้วตัวอย่าง: 50% แรกของหน้า หน้าอื่น ๆ หรือกลยุทธ์อื่น ๆ BOLไม่ชัดเจนในเรื่องนี้

3
ฉันสามารถกู้คืนใบรับรอง TDE ได้โดยกู้คืนฐานข้อมูล MASTER หรือไม่
(เราโชคดีที่ไม่ได้อยู่ในสถานการณ์นี้เพียงวางแผนล่วงหน้าเพื่อดูว่าตัวเลือกของเราจะเป็นอย่างไรถ้าเกิดขึ้น) สำหรับฐานข้อมูลที่เข้ารหัสด้วยการเข้ารหัสวันที่โปร่งใส (TDE) สำเนาของการสำรองฐานข้อมูลจะไม่สามารถกู้คืนได้เว้นแต่คุณจะมีสำเนาสำรองของใบรับรองที่ใช้ในการเข้ารหัส ถ้าคุณไม่มีสิ่งนั้น มีตัวเลือกเพิ่มเติมหรือไม่? ในกรณีที่เซิร์ฟเวอร์ล้มเหลวทั้งหมดจะคืนค่าการสำรองข้อมูลของฐานข้อมูล MASTER บนฮาร์ดแวร์ใหม่จะคืนค่าใบรับรองหรือไม่

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 แห่งหรือไม่?

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

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รหัสผ่านเนื่องจากไม่มีผู้ดูแลระบบคนก่อนหน้านี้เหลือข้อมูลนี้ไว้ นี่มันน่าคลั่ง ฉันเคยทำสิ่งนี้มาก่อนในเครื่องอื่น ๆ ที่ไม่มีปัญหา

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

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

3
แทรกจำนวนมากลงใน SQL Server จาก VMWare guest โดยใช้สวิตช์แบบกระจาย
นี่น่าจะไม่ใช่ปัญหาเซิร์ฟเวอร์ SQL เป็นส่วนใหญ่ แต่ดูเหมือนว่าการตั้งค่าจะมีผลเฉพาะกับ BULK INSERTS ไปยังเซิร์ฟเวอร์ SQL เท่านั้น เราเพิ่งย้ายฮาร์ดแวร์ VM และแขกทั้งหมดที่ถูกย้ายมีสวิตช์เสมือนของพวกเขาเปลี่ยนจากมาตรฐานเป็นการกระจาย ฉันเริ่มได้รับแล้ว เกิดข้อผิดพลาดร้ายแรงขณะอ่านอินพุตสตรีมจากเครือข่าย เซสชั่นจะถูกยกเลิก (ข้อผิดพลาดการป้อนข้อมูล: 64 ข้อผิดพลาดการส่งออก: 0) บนเซิร์ฟเวอร์ SQL สองเซิร์ฟเวอร์ในระหว่างการดำเนินการ BULK INSERT หนึ่งในเซิร์ฟเวอร์ SQL คือ VM ที่มีการกำหนดค่าใหม่และอีกรายการหนึ่งเป็นเซิร์ฟเวอร์จริง การดำเนินการทั้งสองแทรกเป็นกลุ่มมาจาก VM ด้วยการกำหนดค่าใหม่ ส่วนแทรกจำนวนมากจะไม่ล้มเหลวทุกครั้งมันจะสุ่มมากเมื่อต้องการ เมื่อเราเปลี่ยนสวิตช์เสมือนเป็นสวิตช์มาตรฐานแทนที่จะเป็นสวิตช์แบบกระจายปัญหาจะหายไป ฉันกำลังหาคำอธิบายเพิ่มเติมว่าทำไมมันไม่ทำงานกับสวิตช์แบบกระจายแทนที่จะเป็นความละเอียด ฉันเดาว่าการดำเนินการแทรกเป็นกลุ่มเป็นแบบอนุกรมและด้วยสวิตช์แบบกระจายแพ็คเก็ตจะถูกส่งผ่านโฮสต์ที่แตกต่างกันซึ่งบางอันอาจยุ่งกว่าผู้อื่นและมาถึงเซิร์ฟเวอร์ปลายทางเกินกว่าขีด จำกัด เวลาแฝง (หมายเหตุ: ไม่มีสิ่งใดในบันทึกเหตุการณ์ของ windows ในเวลาที่เกิดข้อผิดพลาดบนเซิร์ฟเวอร์ต้นทางหรือเซิร์ฟเวอร์ปลายทาง) UPDATE: ปัญหานี้เกิดจาก NIC VMs ทั้งหมดของเราได้รับการกำหนดค่าด้วย E1000 NIC ซึ่งทำงานได้ดีพอกับสวิตช์มาตรฐาน …

1
SQL Server สั่งซื้อผลลัพธ์อย่างไรเมื่อใช้การรวม
SQL Server จะหาลำดับของระเบียนในชุดผลลัพธ์ของการดำเนินการแบบสอบถามได้อย่างไร ฉันพยายามทำให้หัวหรือก้อยของมัน แต่พบว่าตัวเองเกาหัวของฉัน เมื่อฉันเปลี่ยนเขตข้อมูลฉันกำลังเลือกคำสั่งซื้อก็จะเปลี่ยนไปเช่นกัน เมื่อฉันรัน SQL ด้านล่างด้วยSELECT *ฉันได้รับบันทึกเดียวกัน แต่ในลำดับที่แตกต่างกันมาก SELECT TOP (900) AD.ATTACHMENTID, AD.NAME, AD.ISINLINE, AD.INSERTEDDATETIME, ATMT.ATTACHMENTBLOB, U.UFID FROM ATTACHMENTDETAIL AD WITH (NOLOCK) INNER JOIN MESSAGEATTACHMENT MA ON MA.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN ATTACHMENT ATMT ON ATMT.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN MESSAGE MSG ON MSG.ID = MA.MESSAGEID INNER …

3
ฉันจะตรวจสอบการตั้งค่าความปลอดภัยของ SQL Server Endpoint ได้อย่างไร
ฉันอยู่ในกระบวนการสร้างสภาพแวดล้อมการทดสอบสำหรับพนักงานพัฒนาเซิร์ฟเวอร์ SQL ของเรา ในการผลิตเรามี SQL Server 3 ตัวSQL01มีฐานข้อมูลหลายตัวที่ทำมิเรอSQL02ร์ SQL03ทำหน้าที่เป็นพยานใน "ความปลอดภัยสูงพร้อมการล้มเหลวอัตโนมัติ" หรือการกำหนดค่าแบบซิงโครนัส ฉันใช้ VMWare P2V เพื่อทำเวอร์ชวลไลเซชันทั้งสามเครื่องบนฮาร์ดแวร์แยกต่างหากกำหนดค่า SID ของเครื่องอีกครั้งและทำการซ่อนที่อยู่ IP ของเซิร์ฟเวอร์การผลิตของเราจากเครื่องใหม่เหล่านี้ ตอนแรกฉันลืมที่จะ blackhole เครื่องจักรพยานการผลิตดังนั้นฐานข้อมูลในเครื่องทดสอบยังคงใช้SQL03เครื่องเป็นพยาน TEST03สังเกตเห็นปัญหาที่ฉันตัดสินใจที่จะกำหนดค่าฐานข้อมูลในการทดสอบที่จะชี้ไปที่พยานทดสอบเสมือนจริงขึ้นใหม่เรียกว่า ในการกำหนดค่าฐานข้อมูลใหม่เพื่อใช้พยานคนใหม่ฉันได้ป้อนคำสั่งต่อไปนี้บนเซิร์ฟเวอร์หลักTEST01: ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022'; การตอบสนองที่ไม่คาดคิด: The ALTER DATABASE command could not be sent to the remote server instance 'TCP://TEST03.domain.inet:5022'. The database mirroring configuration …

3
วิธีแมปเซิร์ฟเวอร์อื่นผ่าน SQL Server Management Studio
ฉันพยายามแมปเซิร์ฟเวอร์อื่นโดยให้คำสั่ง EXEC xp_cmdshell 'NET USE H:\\568.256.8.358\backup_147 1234abc /USER:cranew /PERSISTENT:yes' ฉันพบข้อผิดพลาดกับสิ่งนี้: ไม่พบเส้นทางเครือข่าย แต่ฉันสามารถแมปเซิร์ฟเวอร์อื่นด้วยตนเองได้ โปรดช่วยฉันในการเรียงลำดับ

3
แบบสอบถามทั้งสองนี้เทียบเท่ากันอย่างมีเหตุผลหรือไม่
แบบสอบถามทั้งสองนี้เทียบเท่ากันอย่างมีเหตุผลหรือไม่ DECLARE @DateTime DATETIME = GETDATE() แบบสอบถาม 1 SELECT * FROM MyTable WHERE Datediff(DAY, LogInsertTime, @DateTime) > 7 แบบสอบถาม 2 SELECT * FROM MyTable WHERE LogInsertTime < @DateTime - 7 ถ้ามันไม่เท่ากันอย่างมีเหตุผลคุณช่วยให้ฉันมีเหตุผลเทียบเท่ากับการสืบค้นแรกเพื่อที่ WHERE clause สามารถใช้ดัชนีได้อย่างมีประสิทธิภาพ (เช่นกำจัดการตัดฟังก์ชั่น)?

3
Visio 2010 และ SQL 2012 - การดำเนินการแบบย้อนกลับ
เราได้อัพเกรดเป็น SQL 2012 และกำลังพยายามที่จะแปลง DBS ของเราเป็น Visio 2010 ฉันตั้งค่าการเชื่อมต่อโดยใช้ไดรเวอร์ SQL 11 และ Visio บ่นว่าไดรเวอร์นั้นไม่ได้รับการสนับสนุน มีใครวิ่งเข้าไปในนี้?

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