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

SQL Server 2005 (รุ่นบิลด์หลัก 9.00.xxxx) โปรดติดแท็ก sql-server ด้วย


6
SQL Server ไม่สามารถวางฐานข้อมูล <dbname> ได้เนื่องจากมีการใช้งานอยู่ ... แต่ไม่มีเซสชันปรากฏขึ้น
เมื่อฉันพยายามที่จะวางฐานข้อมูลฉันได้รับข้อผิดพลาด "ไม่สามารถวางฐานข้อมูล" dbname "เพราะมันกำลังใช้งานอยู่" อย่างไรก็ตามเมื่อฉันรันsp_who2ไม่มีการเชื่อมต่อเซสชันกับฐานข้อมูลนี้ single_user mode with rollback immediateฉันยังได้ตั้งฐานข้อมูลเพื่อ ทำไมสิ่งนี้จึงเกิดขึ้น

6
มีความเสี่ยงอะไรบ้างถ้าเราเปิดใช้งานสแนปชอตการอ่านใน sql-server
ฉันได้อ่านที่นี่ว่าข้อมูลพิเศษบางอย่างจะถูกจัดเก็บต่อแถวดังนั้นเราจึงอาจเห็นประสิทธิภาพลดลง แต่มีความเสี่ยงอื่นอีกหรือไม่ เช่น. สิ่งนี้จะส่งผลต่อการกู้คืนฐานข้อมูลหรือไม่? มีอะไรอีกบ้างที่เราต้องทำเพื่อใช้ประโยชน์จากสิ่งนี้? ฉันวางแผนที่จะดำเนินการคำสั่งเหล่านี้: ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON ฉันเชื่อว่าสิ่งนี้จะทำให้เรามีบางสิ่งที่ใกล้เคียงกับ oracle มากขึ้นหากว่ามีธุรกรรมหนึ่งธุรกรรมที่กำลังอัพเดทธุรกรรมอื่น ๆ ยังคงสามารถอ่านข้อมูลเก่าได้ ถูกต้องหรือไม่ ฉันกำลังมองหาสิ่งนี้เพราะฉันเบื่อปัญหาการล็อคใน SQL Server 2005 ฉันหวังว่าสิ่งนี้อาจลดการหยุดชะงักเป็นครั้งคราวที่ผู้ใช้ของเราเห็นช่วยให้ประสิทธิภาพโดยรวมของแอปพลิเคชันของเราและกระตุ้นให้นักพัฒนาของเรา กลัว.

4
วิธีการระบุแบบสอบถามที่เติมบันทึกธุรกรรม tempdb?
ฉันต้องการทราบวิธีการระบุแบบสอบถามที่ถูกต้องหรือเก็บ proc ซึ่งจริง ๆ แล้วกรอกบันทึกการทำธุรกรรมของฐานข้อมูล TEMPDB

4
ดัชนีค้นหา vs สแกนดัชนี
ดูที่แผนการดำเนินการของคิวรีที่รันช้าและฉันสังเกตว่าบางโหนดเป็นดรรชนีและบางอันก็สแกนดรรชนี ความแตกต่างระหว่างกับการค้นหาดัชนีและการสแกนดัชนีคืออะไร? แบบไหนดีกว่ากัน? SQL จะเลือกอย่างใดอย่างหนึ่งได้อย่างไร ฉันรู้ว่านี่คือคำถาม 3 ข้อ แต่ฉันคิดว่าการตอบคำถามแรกจะอธิบายคำถามอื่น ๆ

3
ชะลอตัวลงอย่างมากในการสืบค้น SQL Server ในการเพิ่มไวด์การ์ด (หรือบน)
ฉันมีสวนสัตว์ 20 ล้านตัวที่ฉันติดตามบนฐานข้อมูล SQL Server 2005 ของฉัน ประมาณ 1% ของพวกเขาเป็นสีดำและประมาณ 1% ของพวกเขาเป็นหงส์ ฉันต้องการทราบรายละเอียดของหงส์ดำทั้งหมดและไม่ต้องการลบหน้าผลลัพธ์ที่ฉันทำ: select top 10 * from animal where colour like 'black' and species like 'swan' (ใช่อย่างน้อยที่สุดฟิลด์เหล่านั้นเป็นข้อความอิสระ แต่ทั้งคู่มีการทำดัชนี) มันกลับกลายเป็นว่าเราไม่มีสัตว์เช่นนี้เมื่อแบบสอบถามส่งคืนชุดว่างในเวลาประมาณ 300 มิลลิวินาที มันคงจะเร็วกว่าสองเท่าถ้าฉันใช้ '=' แทนที่จะเป็น 'like' แต่ฉันมีลางสังหรณ์ที่หลังกำลังจะช่วยฉันพิมพ์บ้าง ปรากฎว่าหัวหน้าผู้ดูแลสวนคิดว่าเขาอาจเข้ามาในหงส์บางตัวว่า 'ดำ' ดังนั้นฉันจึงปรับเปลี่ยนการค้นหาตาม: select top 10 * from animal where colour like 'black%' …

5
แผนการบำรุงรักษาเซิร์ฟเวอร์ SQL - วิธีปฏิบัติที่ดีที่สุดสำหรับงานและการกำหนดตารางเวลา
ฉันได้รับมอบหมายให้วางแผนการบำรุงรักษาสำหรับฐานข้อมูล SQL Server 2005 ของเรา ฉันรู้ว่าสำหรับการสำรองข้อมูลฉันต้องการสำรองข้อมูลฐานข้อมูลเต็มรูปแบบทุกวันและสำรองข้อมูลบันทึกธุรกรรมทุก 15 นาที ปัญหาของฉันมาเพื่อหางานอื่นที่ฉันต้องการทำและความถี่ที่ฉันควรทำ ดังนั้นฉันจึงมีสิ่งนี้อยู่ในใจ แก้ไขฉันหากมีข้อบกพร่องใด ๆ ในความคิดของฉันหรือวิธีที่ดีกว่าในการทำเช่นนี้ สำรองข้อมูล - ตารางทั้งหมดสำรองข้อมูลเต็มรูปแบบ (รายวัน) สำรองข้อมูล - ตารางที่เลือก, สำรองข้อมูลเต็มรูปแบบ (รายชั่วโมง) สำรองข้อมูล - บันทึกธุรกรรม (ทุก 15 นาที) ตรวจสอบความสมบูรณ์ของฐานข้อมูล (รายวัน) จัดระเบียบดัชนีใหม่ (ทุกวัน) อัปเดตสถิติ (ทุกวัน) ย่อขนาดฐานข้อมูล (รายสัปดาห์) สร้างดัชนีใหม่ (ทุกสัปดาห์) การบำรุงรักษาล้าง (ทุกวัน) ฉันจำได้ว่าเคยอ่านเมื่อไม่นานมานี้ (เมื่อฉันตั้งค่าแผนคล้ายกันที่งานอื่น) ว่างานเหล่านี้บางอย่างไม่จำเป็นต้องทำงานทุกวันหรือไม่ควรทำงานทุกวัน เป็นคนที่มันหนีฉัน ฉันสามารถใช้แนวทางเล็กน้อยในการสร้างแผนการบำรุงรักษาที่ดีขึ้นซึ่งจะลดการสูญเสียข้อมูลในภัยพิบัติ แต่จะไม่เก็บภาษีระบบเมื่อทำงานในช่วงเวลาเร่งด่วน (และเพิ่มประสิทธิภาพ)

5
ฉันสามารถเรียกใช้กระบวนงานที่เก็บไว้และส่งคืนได้ทันทีโดยไม่ต้องรอให้เสร็จหรือไม่
เรามีขั้นตอนการจัดเก็บที่ผู้ใช้สามารถเรียกใช้ด้วยตนเองเพื่อรับหมายเลขที่ปรับปรุงแล้วสำหรับรายงานที่ใช้อย่างต่อเนื่องตลอดทั้งวัน ฉันมีขั้นตอนการจัดเก็บที่สองที่ควรเรียกใช้หลังจากการเรียกใช้กระบวนงานที่เก็บไว้ครั้งแรกเนื่องจากเป็นไปตามหมายเลขที่ได้รับจากขั้นตอนการจัดเก็บครั้งแรกนี้ แต่ใช้เวลานานกว่าในการเรียกใช้และเป็นกระบวนการแยกต่างหาก ทำให้ผู้ใช้รอในขณะที่โพรซีเดอร์ที่เก็บไว้นี้ที่ 2 รัน มีวิธีให้โพรซีเดอร์ที่เก็บไว้หนึ่งโพรซีเดอร์เริ่มต้นโพรซีเดอร์ที่เก็บที่สองและส่งคืนทันทีโดยไม่รอผลลัพธ์หรือไม่? ฉันใช้ SQL Server 2005

10
ฉันจะคัดลอกตารางด้วย SELECT INTO ได้อย่างไร แต่ไม่สนใจคุณสมบัติตัวตน
ฉันมีตารางที่มีคอลัมน์ระบุตัวตน: create table with_id ( id int identity(1,1), val varchar(30) ); มันเป็นที่รู้จักกันดีว่าสิ่งนี้ select * into copy_from_with_id_1 from with_id; ผลลัพธ์ใน copy_from_with_id_1 พร้อมรหัสประจำตัวด้วย คำถามล้นสแต็คต่อไปนี้กล่าวถึงรายการคอลัมน์ทั้งหมดอย่างชัดเจน มาลองกัน select id, val into copy_from_with_id_2 from with_id; อ๊ะแม้ในกรณีนี้ id จะเป็นคอลัมน์ข้อมูลประจำตัว สิ่งที่ฉันต้องการคือโต๊ะ create table without_id ( id int, val varchar(30) );

4
กฎที่แข็งและเร็วสำหรับการรวมคอลัมน์ในดัชนี
มีกฎใด ๆ ที่ยากและรวดเร็วในการตัดสินใจว่าควรจะใส่คอลัมน์ใดและเรียงตามลำดับในรวมในดัชนีที่ไม่ทำคลัสเตอร์ ฉันเพิ่งอ่านบทความนี้https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index และฉันพบว่าสำหรับแบบสอบถามต่อไปนี้: SELECT EmployeeID, DepartmentID, LastName FROM Employee WHERE DepartmentID = 5 โปสเตอร์แนะนำให้สร้างดัชนีแบบนี้: CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID, DepartmentID) INCLUDE (Lastname) ที่นี่คำถามของฉันมาทำไมเราไม่สามารถสร้างดัชนีเช่นนี้ CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, DepartmentID, LastName) หรือ CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, LastName) INCLUDE (DepartmentID) และสิ่งใดที่ทำให้ผู้โพสต์ตัดสินใจที่จะเก็บคอลัมน์นามสกุลไว้ด้วย ทำไมไม่คอลัมน์อื่น ๆ และวิธีการตัดสินใจในลำดับที่เราควรเก็บคอลัมน์ที่มี?

2
คุณจะหยุดใช้ออฟไลน์และลบฐานข้อมูล SQL Server ในการกู้คืนได้อย่างไร
ฉันมีฐานข้อมูลการพัฒนาที่ได้เข้าสู่โหมดการกู้คืนเมื่อรีสตาร์ทและได้รับการกู้คืนในชั่วโมงสุดท้ายหรือมากกว่านั้น ฉันจำเป็นต้องหยุดการกู้คืนหรือฆ่ามันด้วยวิธีใดวิธีหนึ่ง ฉันไม่สนใจเกี่ยวกับฐานข้อมูลหรือข้อมูลใด ๆ เลยฉันมีสคริปต์การปรับใช้ ความคิดใด ๆ

3
ความแตกต่างระหว่างลดขนาดฐานข้อมูลและไฟล์คืออะไร?
DBCC ShrinkDatabase() DBCC ShrinkFile() ฉันต้องรันทั้งสองคำสั่ง DBCC เพื่อลดขนาดฐานข้อมูลหรือไม่? ความแตกต่างระหว่างสองสิ่งข้างต้นนี้คืออะไร?

2
ตัวเลือกใดมีประสิทธิภาพมากกว่า: เลือกจากเซิร์ฟเวอร์ที่เชื่อมโยงหรือแทรกลงในเซิร์ฟเวอร์ที่เชื่อมโยง
สมมติว่าฉันต้องส่งออกข้อมูลจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น (ผ่านเซิร์ฟเวอร์ที่เชื่อมโยง) ข้อความใดจะมีประสิทธิภาพมากขึ้น การดำเนินการในเซิร์ฟเวอร์ต้นทาง: INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table] SELECT a, b, c, ... FROM [dbo].Udf_GetExportData() หรือดำเนินการในเซิร์ฟเวอร์เป้าหมาย: INSERT INTO [dbo].[Table] SELECT a, b, c, ... FROM OPENQUERY([OriginLinkedServer], 'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()') อันไหนจะเร็วกว่าและใช้ทรัพยากรน้อยลง (ทั้งเซิร์ฟเวอร์ต้นทางและเซิร์ฟเวอร์เป้าหมาย) เซิร์ฟเวอร์ทั้งสองเป็น SQL Server 2005


7
วิธีที่มีประสิทธิภาพที่สุดในการรับจำนวนคอลัมน์ขั้นต่ำใน SQL Server 2005 คืออะไร
ฉันอยู่ในสถานการณ์ที่ฉันต้องการรับค่าต่ำสุดจาก 6 คอลัมน์ ฉันได้พบสามวิธีในการบรรลุเป้าหมายนี้ แต่ฉันมีความกังวลเกี่ยวกับประสิทธิภาพของวิธีการเหล่านี้และต้องการทราบว่าวิธีไหนที่จะดีกว่าสำหรับการแสดง วิธีแรกคือการใช้คำสั่งคดีใหญ่ นี่คือตัวอย่างที่มี 3 คอลัมน์ตามตัวอย่างในลิงก์ด้านบน คำสั่ง case ของฉันจะนานกว่านี้เพราะฉันจะดูที่ 6 คอลัมน์ Select Id, Case When Col1 &lt;= Col2 And Col1 &lt;= Col3 Then Col1 When Col2 &lt;= Col3 Then Col2 Else Col3 End As TheMin From MyTable ตัวเลือกที่สองคือการใช้ประกอบกับงบเลือกหลายUNION ฉันจะใส่สิ่งนี้ใน UDF ที่ยอมรับพารามิเตอร์ Id select Id, dbo.GetMinimumFromMyTable(Id) from MyTable …

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