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

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

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

3
การอัพเดตสถิติแบบขนาน
ใน SQL Server 2008 หรือใหม่กว่าUPDATE STATISTICS WITH FULLSCANการดำเนินการแบบเธรดเดียวหรือสามารถใช้การขนานได้หรือไม่ วิธีการเกี่ยวกับสถิติการปรับปรุงด้วยการสุ่มตัวอย่างเริ่มต้น - มันสามารถใช้ขนานกันได้อย่างไร ฉันไม่เห็นตัวเลือกที่ระบุMAXDOPด้วยสถิติการอัปเดต

2
วิธีลบฐานข้อมูลการกู้คืน
ฉันเรียกใช้บันทึกการจัดส่งกับ SQL Server 2008 R2 ฉันมีสถานการณ์ที่ไดรฟ์ฐานข้อมูลรองมีพื้นที่เหลืออยู่และไม่ได้ใช้บันทึกธุรกรรมการจัดส่งบันทึก วิธีที่ฉันต้องการแก้ไขคือลบฐานข้อมูลที่สองและกำหนดค่าบันทึกการจัดส่งจากศูนย์ ปัญหาที่ฉันมีตอนนี้คือฐานข้อมูลรองของฉันอยู่ในสถานะการกู้คืนและฉันไม่สามารถลบได้ ฉันจะดำเนินการต่อได้อย่างไร ตัวอย่างเช่นหากฉันพยายามทำให้พวกเขาออฟไลน์ฉันจะได้รับข้อผิดพลาด ALTER DATABASE is not permitted while the database is in the Restoring state.

2
วิธีเพิ่มผู้ใช้ด้วยการเข้าถึงมุมมองเดียว?
ฉันทำงานกับ MSSQL Server Management Studio 2008 และฉันจำเป็นต้องเปิดเผยมุมมองต่อบุคคลที่สามสำหรับการปรับยอดข้อมูลให้ตรงกัน ฉันสร้างมุมมองที่เหมาะสม แต่ฉันมีปัญหาในการสร้างผู้ใช้และให้สิทธิ์ที่เหมาะสมแก่ผู้ใช้ในการเลือกจากมุมมอง ฉันติดตามพ่อมดเพื่อสร้างการเข้าสู่ระบบและผู้ใช้แล้วเพิ่มมุมมองของฉันในส่วนที่ปลอดภัยด้วยกล่องสิทธิ์ที่เลือกไว้ ทุกอย่างดูเหมือนจะดี แต่เมื่อฉันเข้าสู่ระบบในฐานะผู้ใช้นั้นและพยายามที่จะทำ "เลือก * จาก MyViewName" มันบอกฉันว่าการอนุญาตเลือกถูกปฏิเสธ ฉันเพิ่งสร้างผู้ใช้ใหม่ (คราวนี้ใช้ SQL แทนตัวช่วยสร้าง) และได้รับการอนุญาตอย่างชัดเจนและตอนนี้มันทำให้ฉันเกิดข้อผิดพลาด: Msg 916, Level 14, State 1, Line 2 The server principal "username" is not able to access the database "unrelated_db" under the current security context.(ฉันไม่รู้ว่าทำไมมันถึงพยายามเข้าถึงฐานข้อมูลที่ไม่เกี่ยวข้อง ... ) ฉันไม่รู้จะไปจากที่นี่จริงๆ …

1
พฤติกรรมของข้อมูลในดัชนีตามปัจจัยการเติม
สมมติว่าคุณมีฐานข้อมูลที่ปัจจัยการเติมเริ่มต้นคือ 20 เมื่อใดก็ตามที่ข้อมูลถูกแทรกมันจะสร้างหน้าเว็บที่เต็มไปถึง 20% เท่านั้นหรือไม่? จากความเข้าใจของฉันเมื่อข้อมูลถูกแทรกจะมีประมาณ 20% ของข้อมูลในหน้า อย่างไรก็ตามเมื่อมีการอัพเดทข้อมูลมันจะขยายไปเป็นดัชนีมากกว่า 20% เพื่อบรรจุและสร้างการแบ่งหน้าใช่ไหม?

2
SQL Server VARCHAR ความกว้างคอลัมน์
ฉันพบคำแนะนำที่ขัดแย้งกันว่ามีผลกระทบต่อประสิทธิภาพการทำงานหรือไม่เมื่อระบุคอลัมน์ VARCHAR กว้างเกินไปเช่น VARCHAR (255) เมื่อ VARCHAR (30) อาจทำ ฉันเห็นข้อตกลงอย่างสม่ำเสมอว่ามีการดำเนินการอย่างต่อเนื่องหากทั้งแถวเกินกว่า 8060 ไบต์ นอกจากนั้นฉันเห็นความไม่ลงรอยกัน การอ้างสิทธิ์เป็นจริงThe default is SET ANSI PADDING ON = potential for lots of trailing spacesหรือไม่ ตราบใดที่ความกว้างแถวรวมน้อยกว่า 8060 มีความกังวลเกี่ยวกับประสิทธิภาพที่แท้จริงในคอลัมน์ VARCHAR ที่มีขนาดใหญ่เกินไปหรือไม่? หลักฐานที่แสดงความกว้างของคอลัมน์นั้นสำคัญ The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that …

3
เหตุใดคำสั่ง ALTER TABLE แบบธรรมดาจึงใช้เวลานานในตารางที่มีดัชนีข้อความแบบเต็ม?
ฉันมีตารางชื่อมูลค่าขนาดใหญ่ (~ 67 ล้านแถว) ที่มีการจัดทำดัชนีข้อความแบบเต็มในDataValueคอลัมน์ ถ้าฉันพยายามเรียกใช้คำสั่งต่อไปนี้: ALTER TABLE VisitorData ADD NumericValue bit DEFAULT 0 NOT NULL; มันทำงานเป็นเวลา 1 ชั่วโมง 10 นาทีและยังไม่เสร็จสมบูรณ์ในVisitorDataตารางที่มีประมาณ 67 ล้านแถว ทำไมการดำเนินการนี้ใช้เวลานานและไม่เสร็จสมบูรณ์ ฉันจะทำอะไรได้บ้าง นี่คือรายละเอียดเพิ่มเติมเกี่ยวกับตาราง: CREATE TABLE [dbo].[VisitorData]( [VisitorID] [int] NOT NULL, [DataName] [varchar](80) NOT NULL, [DataValue] [nvarchar](3800) NOT NULL, [EncryptedDataValue] [varbinary](max) NULL, [VisitorDataID] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT …

5
ประสิทธิภาพของเซิร์ฟเวอร์ SQL ที่เชื่อมโยงกับเซิร์ฟเวอร์: เหตุใดแบบสอบถามระยะไกลจึงมีราคาแพง
ฉันมีเซิร์ฟเวอร์ฐานข้อมูลสองตัวเชื่อมต่อผ่านเซิร์ฟเวอร์ที่เชื่อมโยง ทั้งสองเป็นฐานข้อมูล SQL Server 2008R2 และการเชื่อมต่อเซิร์ฟเวอร์ที่เชื่อมโยงจะทำผ่านลิงค์ "SQL Server" ปกติโดยใช้บริบทความปลอดภัยของการเข้าสู่ระบบปัจจุบัน เซิร์ฟเวอร์ที่เชื่อมโยงนั้นมีทั้งในดาต้าเซ็นเตอร์เดียวกันดังนั้นการเชื่อมต่อจึงไม่เป็นปัญหา ฉันใช้แบบสอบถามต่อไปนี้เพื่อตรวจสอบว่าค่าของคอลัมน์identifierใดที่พร้อมใช้งานจากระยะไกล แต่ไม่ใช่ภายในเครื่อง SELECT identifier FROM LinkedServer.RemoteDb.schema.[TableName] EXCEPT SELECT DISTINCT identifier FROM LocalDb.schema.[TableName] identifierบนโต๊ะทั้งสองเป็นดัชนีที่ไม่ใช่คลัสเตอร์ในคอลัมน์ ในพื้นที่มีแถว 2.6M แถวจากระยะไกลเพียง 54 แต่เมื่อมองไปที่แผนแบบสอบถาม 70% ของเวลาดำเนินการจะถูกใช้เพื่อ "ประมวลผลแบบสอบถามระยะไกล" นอกจากนี้เมื่อศึกษาแผนคิวรีที่สมบูรณ์จำนวนแถวท้องถิ่นโดยประมาณนั้น1แทน2695380(ซึ่งคือจำนวนแถวโดยประมาณเมื่อเลือกเฉพาะคิวรีที่มาหลังจากนั้นEXCEPT) เมื่อดำเนินการค้นหานี้จะใช้เวลานานแน่นอน มันทำให้ฉันประหลาดใจ: ทำไมถึงเป็นอย่างนี้? การประมาณค่าเป็น "เพียงแค่" ปิดหรือมีการสอบถามระยะไกลบนเซิร์ฟเวอร์ที่เชื่อมโยงที่มีราคาแพงจริงๆ?

1
กำลังกู้คืนฐานข้อมูล 'MyDb' รอจนกว่าการกู้คืนจะเสร็จสิ้น
ฉันได้รับข้อผิดพลาด: กำลังกู้คืนฐานข้อมูล 'MyDb' รอจนกว่าการกู้คืนจะเสร็จสิ้น ฉันมีการดำเนินการที่สำคัญในเวลานั้น สาเหตุของสถานการณ์นี้คืออะไร? และจะหลีกเลี่ยงได้อย่างไร

5
ข้อดี / ข้อเสียของการใช้หลายฐานข้อมูลเทียบกับการใช้ฐานข้อมูลเดียว
ฉันกำลังทำงานในโครงการใหม่ที่มีความต้องการใช้ฐานข้อมูล 7 ตัวโดยยืนยันว่าประสิทธิภาพเสถียรภาพการปรับให้เหมาะสมนั้นง่ายขึ้น ในขณะที่ฉันไม่เห็นด้วยฉันมีปัญหาในการรวบรวมอาร์กิวเมนต์ที่ดีเพื่อใช้ฐานข้อมูลเดียว (แยกตารางออกเป็นโดเมนแบบลอจิคัล) อาร์กิวเมนต์หนึ่งที่ฉันมีคือความสมบูรณ์ของข้อมูล (ฉันไม่สามารถใช้คีย์ต่างประเทศระหว่างฐานข้อมูล) ข้อดี / ข้อเสียที่ดีในการใช้ฐานข้อมูลเดียวหรือหลายฐานข้อมูลคืออะไร [สรุปแล้ว] ข้อโต้แย้งกับฐานข้อมูลหลายแห่ง: การสูญเสียความถูกต้องของข้อมูล (ไม่สามารถใช้ foreign key แทนฐานข้อมูล) สูญเสียคืนความสมบูรณ์ การเพิ่มความซับซ้อน (ผู้ใช้ db / บทบาท) เซิร์ฟเวอร์ / ฐานข้อมูลอัตราต่อรองขนาดเล็กจะลดลง Solutions: ใช้สกีมาเพื่อแยกโดเมน POC: ใช้ข้อมูลจำลองเพื่อพิสูจน์จุดในแผนการดำเนินการของ 7/1 db

2
เหตุใดฉันจึงไม่ได้รับการบันทึกขั้นต่ำเมื่อแทรกเข้าไปในตารางที่จัดทำดัชนี
ฉันกำลังทดสอบการแทรกการบันทึกน้อยที่สุดในสถานการณ์ที่แตกต่างกันและจากสิ่งที่ฉันอ่าน INSERT INTO SELECT เป็นฮีปที่มีดัชนีที่ไม่ใช่คลัสเตอร์โดยใช้ TABLOCK และ SQL Server 2016+ ควรบันทึกอย่างน้อยที่สุด แต่ในกรณีของฉันเมื่อทำสิ่งนี้ การบันทึกเต็มรูปแบบ ฐานข้อมูลของฉันอยู่ในรูปแบบการกู้คืนข้อมูลแบบง่ายและฉันได้รับการแทรกที่น้อยที่สุดใน heap โดยไม่มีดัชนีและ TABLOCK ฉันใช้การสำรองข้อมูลเก่าของฐานข้อมูล Stack Overflow เพื่อทดสอบและได้สร้างการทำซ้ำของตารางโพสต์ด้วยสคีมาต่อไปนี้ ... CREATE TABLE [dbo].[PostsDestination]( [Id] [int] NOT NULL, [AcceptedAnswerId] [int] NULL, [AnswerCount] [int] NULL, [Body] [nvarchar](max) NOT NULL, [ClosedDate] [datetime] NULL, [CommentCount] [int] NULL, [CommunityOwnedDate] [datetime] NULL, [CreationDate] [datetime] …

2
ฉันควรเพิ่มการบีบอัดระดับหน้าก่อนเพิ่มคีย์หลักหรือหลังจาก?
สถานการณ์ คลังข้อมูลบน SQL Server 2008 Enterprise ฮีปของแถว 36+ ล้านแถว (ไม่ต้องถาม) พร้อมคอลัมน์มากกว่า 60 คอลัมน์ เพิ่มขึ้น 750k ต่อเดือน ไม่ได้กำหนดคีย์หลัก (ตอนนี้ฉันระบุแล้ว) ไม่มีการบีบอัด สิ่งที่ฉันกำลังคิดที่จะทำ (ตามลำดับนี้) เพิ่มการบีบอัดระดับหน้า เพิ่ม PK เพิ่มดัชนีที่ไม่ทำคลัสเตอร์จำนวนหนึ่ง ทำสิ่งนี้ให้เร็วที่สุด คำถาม ท้ายที่สุด: ฉันจะเพิ่มการบีบอัด PK หรือหน้าก่อนหรือไม่ (มันสำคัญไหม) ถ้าฉันเพิ่มการบีบอัดก่อนลงในตารางดัชนีใด ๆ จะสืบทอดการตั้งค่าการบีบอัดระดับตารางหรือไม่ คำตอบสำหรับคำถามนี้คือ "ไม่บีบอัดไม่ได้รับมรดก" พบได้ที่นี่ใน dba.stackexchange สิ่งที่ฉันกำลังโน้มตัวไปข้างหน้าในขณะนี้ -- Add page level compression alter table dbo.TableName rebuild with …

2
แบบสอบถามแบบเลือกอย่างง่ายได้รับการล็อกหรือไม่
ฉันใหม่มากกับ SQL Server และต้องการที่จะเข้าใจว่าต่อไปนี้selectคำสั่งที่ง่ายมากที่จะล็อคใด ๆ Select * from Student; โปรดพิจารณากรณีที่คำสั่งจะไม่ทำงานภายในbegin tranบล็อก

3
วิธีแทรกในตารางที่มีเฉพาะคอลัมน์ตัวตนได้อย่างไร
เมื่อกำหนดตารางที่มีเพียงคอลัมน์ IDENTITY คุณจะแทรกแถวใหม่ได้อย่างไร ฉันได้ลองทำสิ่งต่อไปนี้แล้ว: INSERT INTO TABLE (Syntax error) INSERT INTO TABLE VALUES() (Syntax error) INSERT INTO TABLE (Id) VALUES() (Syntax error) ฉันกำลังทดสอบบางอย่างและต้องการเพียงคอลัมน์ตัวตน ไม่ใช่เพื่อการผลิต มิฉะนั้นตารางดังกล่าวสามารถใช้เป็นเครื่องกำเนิดไฟฟ้าตามลำดับที่ไม่จำเป็นต้องมีคอลัมน์อื่น ๆ

2
ทำไม CTE ควรเริ่มต้นด้วยเซมิโคลอน
ฉันแค่ดูโพสต์ในStackOverflowที่ Aaron Bertrand เสนอให้ใช้ CTE แทนตารางตัวเลขซึ่งเป็นวิธีที่ยอดเยี่ยมในการปฏิบัติงานในมือ คำถามของฉันคือทำไมบรรทัดแรกของ CTE เริ่มต้นด้วยเซมิโคลอน ;WITH n AS (SELECT TOP (10000) n FROM (SELECT n = ROW_NUMBER() OVER (ORDER BY s1.[object_id]) FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2 ) AS x ORDER BY n ) SELECT n FROM n ORDER BY n; -- look …
14 sql-server  t-sql  cte  syntax 

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