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

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

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

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

4
ผลของการตั้งค่า varchar (8000) คืออะไร?
เนื่องจาก varchar ใช้พื้นที่ดิสก์ตามสัดส่วนกับขนาดของเขตข้อมูลมีเหตุผลใดที่เราไม่ควรกำหนด varchar เป็นค่าสูงสุดเสมอเช่นvarchar(8000)ใน SQL Server บนโต๊ะสร้างถ้าฉันเห็นใครทำvarchar(100)ฉันควรบอกพวกเขาไม่ผิดคุณควรทำvarchar(8000)อย่างไร

7
คุณจะเตะผู้ใช้ออกจากฐานข้อมูล SQL Server 2008 ได้อย่างไร
เราจำเป็นต้องทำการกู้คืนและไม่สามารถทำได้เนื่องจากผู้ใช้รายอื่นเชื่อมต่ออยู่ เราคิดว่าเราตัดการเชื่อมต่อทุกขั้นตอน แต่ดูเหมือนจะไม่ จาก Studio Management เราจะเริ่มต้นกับคนอื่นได้อย่างไรเพื่อให้เราสามารถสำรองข้อมูลนี้ได้

4
'หลีกเลี่ยงการสร้างดัชนีแบบคลัสเตอร์โดยยึดตามคีย์ที่เพิ่มขึ้น' เป็นตำนานมาจาก SQL Server 2000 หรือไม่
ฐานข้อมูลของเราประกอบด้วยตารางจำนวนมากโดยส่วนใหญ่ใช้คีย์ตัวแทนจำนวนเต็มเป็นคีย์หลัก ประมาณครึ่งหนึ่งของคีย์หลักเหล่านี้อยู่ในคอลัมน์ข้อมูลประจำตัว การพัฒนาฐานข้อมูลเริ่มต้นขึ้นในยุคของ SQL Server 6.0 หนึ่งในกฎที่ใช้จากจุดเริ่มต้นคือหลีกเลี่ยงการสร้างดัชนีคลัสเตอร์บนพื้นฐานของความสำคัญที่เพิ่มขึ้นในขณะที่คุณพบในเหล่านี้ดัชนีเคล็ดลับการเพิ่มประสิทธิภาพ ตอนนี้ใช้ SQL Server 2005 และ SQL Server 2008 ฉันมีความประทับใจอย่างมากว่าสถานการณ์เปลี่ยนไป ในขณะเดียวกันคอลัมน์คีย์หลักเหล่านี้เป็นตัวเลือกแรกที่สมบูรณ์แบบสำหรับดัชนีกลุ่มของตาราง

2
ฉันต้องมีดัชนีแยกต่างหากสำหรับการสืบค้นแต่ละประเภทหรือไม่หรือจะใช้ดัชนีหลายคอลัมน์ได้หรือไม่
ฉันค่อนข้างรู้คำตอบสำหรับคำถามนี้อยู่แล้ว แต่ฉันรู้สึกเสมอว่ามีมากกว่าที่ฉันต้องรับในหัวข้อ ความเข้าใจพื้นฐานของฉันคือการพูดโดยทั่วไปดัชนีเดียวที่รวมเขตข้อมูลทั้งหมดที่คุณอาจทำการสืบค้น / เรียงลำดับในเวลาที่กำหนดไม่น่าจะมีประโยชน์ แต่ฉันได้เห็นสิ่งนี้แล้ว บางคนคิดว่า "เอาล่ะถ้าเราใส่ข้อมูลทั้งหมดลงในดัชนีฐานข้อมูลก็สามารถใช้เพื่อค้นหาสิ่งที่ต้องการ" โดยไม่ต้องเห็นแผนการดำเนินการสำหรับการสืบค้นจริงบางข้อ ลองนึกภาพโต๊ะแบบนี้: id int pk/uid name varchar(50) customerId int (foreign key) dateCreated datetime ผมอาจจะเห็นดัชนีเดียวรวมทั้งname, customerIdและdateCreatedสาขา แต่ความเข้าใจของฉันคือว่าดัชนีดังกล่าวจะไม่ถูกใช้ในแบบสอบถามเช่น: SELECT [id], [name], [customerId], [dateCreated] FROM Representatives WHERE customerId=1 ORDER BY dateCreated สอบถามเช่นมันดูเหมือนว่าผมว่าเป็นความคิดที่ดีกว่าจะเป็นดัชนีรวมทั้งcustomerIdและdateCreatedเขตที่มีcustomerIdข้อมูลเป็น 'ครั้งแรก' สิ่งนี้จะสร้างดัชนีที่จะมีการจัดระเบียบข้อมูลในลักษณะที่แบบสอบถามนี้สามารถค้นหาสิ่งที่ต้องการได้อย่างรวดเร็ว - ตามลำดับที่ต้องการ อีกสิ่งที่ฉันเห็นบ่อยครั้งเป็นอันดับแรกคือดัชนีแต่ละรายการในแต่ละฟิลด์ เพื่อให้แต่ละคนบนname, customerIdและdateCreatedสาขา ไม่เหมือนตัวอย่างแรกข้อตกลงประเภทนี้บางครั้งฉันก็ดูเหมือนจะมีประโยชน์บางส่วน แผนการดำเนินการของแบบสอบถามอาจแสดงให้เห็นว่าอย่างน้อยก็ใช้ดัชนีในcustomerIdเพื่อเลือกระเบียน แต่ไม่ได้ใช้ดัชนีกับdateCreatedเขตข้อมูลเพื่อเรียงลำดับ ฉันรู้ว่านี่เป็นคำถามที่กว้างขวางเพราะคำตอบเฉพาะสำหรับคำถามใด ๆ ในชุดของตารางใด …
22 sql-server  index 

7
จำเป็นต้องโยกย้าย SQL Server ไปยัง MySQL
ฉันมีฐานข้อมูลบน SQL Server 2008 บนเซิร์ฟเวอร์ Windows และฉันต้องการย้ายข้อมูลทั้งหมดไปยังฐานข้อมูล MySQL บนเซิร์ฟเวอร์ Ubuntu ฉันได้ลองใช้ตัวช่วยสร้างการนำเข้าและส่งออกเซิร์ฟเวอร์ SQL ด้วยไดรเวอร์ MySQL ODBC และเข้าถึงฐานข้อมูลทั้งสองได้อย่างถูกต้อง แต่ไฟล์ xml ที่มีข้อกำหนดสำหรับการแปลงประเภทไม่มีอยู่จริงและข้อกำหนด จำกัด เกินไปสำหรับฉันในการสร้างอย่างถูกต้อง ไม่มีใครรู้วิธีสร้างไฟล์แปลงประเภทหรือสถานที่ที่จะได้รับเครื่องมือที่ดีกว่าสำหรับการถ่ายโอนข้อมูลนี้หรือไม่?

4
วิธี จำกัด จำนวนแถวสูงสุดในตารางให้เหลือเพียง 1
ฉันมีตารางการกำหนดค่าในฐานข้อมูล SQL Server ของฉันและตารางนี้ควรมีแถวเดียวเท่านั้น เพื่อช่วยให้นักพัฒนาในอนาคตเข้าใจสิ่งนี้ฉันต้องการป้องกันไม่ให้มีการเพิ่มข้อมูลมากกว่าหนึ่งแถว ฉันเลือกที่จะใช้ทริกเกอร์สำหรับสิ่งนี้ดังนี้ ... ALTER TRIGGER OnlyOneConfigRow ON [dbo].[Configuration] INSTEAD OF INSERT AS BEGIN DECLARE @HasZeroRows BIT; SELECT @HasZeroRows = CASE WHEN COUNT (Id) = 0 THEN 1 ELSE 0 END FROM [dbo].[Configuration]; IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0 BEGIN RAISERROR ('You should not …

1
เหตุใดจึงสร้างดัชนี ... ด้วยออนไลน์ = บล็อกการเข้าถึงตารางในช่วงเวลาไม่กี่นาที
ฉันมีตารางที่มีอยู่: CREATE TABLE dbo.ProofDetails ( ProofDetailsID int NOT NULL CONSTRAINT PK_ProofDetails PRIMARY KEY CLUSTERED IDENTITY(1,1) , ProofID int NULL , IDShownToUser int NULL , UserViewedDetails bit NOT NULL CONSTRAINT DF_ProofDetails_UserViewedDetails DEFAULT ((0)) ); ตารางนี้มี 150,000,000 แถว ระบบกำลังทำงาน 24x7x365 ดังนั้นจึงไม่มีหน้าต่างการบำรุงรักษาที่เกิดขึ้นเป็นประจำ ฉันต้องการเพิ่มดัชนีลงในตารางและด้วย Enterprise Edition ของ SQL Server ฉันควรจะทำเช่นนั้นได้โดยไม่ปิดกั้นการเข้าถึงการเขียนลงในตาราง คำสั่งที่ฉันใช้คือ: CREATE INDEX IX_ProofDetails_ProofID_Etc …

4
ให้สิทธิ์ในการเรียกใช้งานเซิร์ฟเวอร์ SQL
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันมีงานบนเซิร์ฟเวอร์ MSSQL 2005 ของฉันที่ฉันต้องการอนุญาตให้ผู้ใช้ฐานข้อมูลใด ๆ ทำงาน ฉันไม่กังวลเกี่ยวกับความปลอดภัยเนื่องจากอินพุตของงานจริงมาจากตารางฐานข้อมูล เพียงแค่เรียกใช้งานโดยไม่ต้องเพิ่มบันทึกลงในตารางนั้นจะไม่ทำอะไรเลย ฉันไม่สามารถหาวิธีอนุญาตสิทธิ์สาธารณะให้กับงานได้ มีวิธีการทำเช่นนี้? สิ่งเดียวที่ฉันสามารถคิดได้ ณ จุดนี้คือการให้งานทำงานอย่างต่อเนื่อง (หรือตามกำหนดเวลา) แต่เนื่องจากมันจำเป็นต้องทำงานจริง ๆ น้อย ๆ (บางทีทุกๆสองสามเดือน) และฉันต้องการให้งานเป็นจริง เสร็จสิ้นทันทีที่มีอยู่สิ่งนี้ดูเหมือนจะไม่เป็นทางออกที่ดีที่สุด

1
ข้อความ FlushCache ที่ปรากฏในบันทึกในเวลาที่กำหนด
เมื่อไม่นานมานี้เรามีปัญหาเกี่ยวกับประสิทธิภาพของฐานข้อมูลจำนวนมากและฉันพยายามที่จะดูว่าฉันสามารถหาสาเหตุได้หรือไม่ เราไม่มี DBA (ฉันเป็นผู้พัฒนาซอฟแวร์) ดังนั้นฉันจึงเป็นคนชักปีกและสิ่งที่ฉันพบว่าการอ่านออนไลน์เช่นภาษาต่างประเทศให้ฉัน เราได้รีสตาร์ท SQL Server ทุกเช้าเพราะนั่นเป็นวิธีเดียวที่จะเปิดให้บริการในระหว่างวันทำงาน ฉันสังเกตว่าทุกเช้าประมาณตี 5 เราเริ่มได้รับข้อความนี้ทุกสองนาทีในบันทึก: FlushCache: ทำความสะอาด 11848 bufs ด้วย 7432 เขียนใน 97168 ms (หลีกเลี่ยงสกปรก 8139 bufs ใหม่) สำหรับ db 9: 0 เป้าหมายสุดท้ายที่โดดเด่น: 4, avgWriteLatency 32 ปริมาณงานเฉลี่ย: 0.72 MB / วินาที, ความอิ่มตัวของ I / O: 11635, บริบทสวิตช์ 18849 ตัวเลขแตกต่างกันในแต่ละครั้งแน่นอน แต่มันเป็นข้อความเดียวกันซ้ำไปซ้ำมาในรูปแบบนั้นจนกว่าฉันจะรีสตาร์ทเซิร์ฟเวอร์ ฉันไม่แน่ใจว่าจะตีความสิ่งนี้อย่างไรฉันได้ลองใช้ Google เกี่ยวกับเรื่องนี้และสิ่งที่ฉันรวบรวมได้ทั้งหมดนั่นก็หมายความว่าอาจมีบางอย่างผิดปกติกับ …

1
ใน SQL Server เหตุใดการสแกนย้อนหลังของดัชนีคลัสเตอร์จึงไม่สามารถใช้การขนานได้
ฉันอ่านเกี่ยวกับ SQL Server internals และหนังสือหรือบล็อกทุกฉบับที่กล่าวถึงเรื่องการสแกนย้อนหลัง การสแกนย้อนหลังของดัชนีคลัสเตอร์ไม่สามารถใช้การขนาน โพสต์เดียวที่กล่าวถึงบางสิ่งอยู่ด้านล่างนี้ โพสต์บอกว่าทีม SQL Server ไม่ได้ใช้การปรับให้เหมาะสมที่จำเป็นสำหรับการสแกนย้อนหลัง https://www.itprotoday.com/sql-server/descending-indexes เนื่องจากเพจระดับลีฟนั้นถูกเชื่อมโยงโดยใช้ลิสต์ที่มีการลิงก์ซ้ำกันสองครั้งฉันไม่เข้าใจว่าทำไมการสแกนย้อนหลังจึงแตกต่างจากการสแกนไปข้างหน้า การชี้แจงใด ๆ ที่ชื่นชมจริง ๆ

5
เป็นการดีที่สุดที่จะหลีกเลี่ยงการใช้พอร์ตเริ่มต้นสำหรับ SQL Server หรือไม่
ในอดีตนั้นไม่แนะนำให้ใช้พอร์ตเริ่มต้นสำหรับการเชื่อมต่อกับ SQL Server ซึ่งเป็นส่วนหนึ่งของแนวปฏิบัติด้านความปลอดภัยที่ดีที่สุด บนเซิร์ฟเวอร์ที่มีอินสแตนซ์เริ่มต้นเดียวจะใช้พอร์ตต่อไปนี้เป็นค่าเริ่มต้น: บริการ SQL Server - พอร์ต 1433 (TCP) บริการเบราว์เซอร์เซิร์ฟเวอร์ SQL - พอร์ต 1434 (UDP) การเชื่อมต่อผู้ดูแลระบบเฉพาะ - พอร์ต 1434 (TCP) คำถาม: คำแนะนำนี้ยังเกี่ยวข้องหรือไม่? ควรเปลี่ยนพอร์ตด้านบนทั้งหมดหรือไม่

6
การฉีด SQL Server - ความเสียหายเท่าไหร่ใน 26 ตัวอักษร?
ฉันกำลังทดสอบความยืดหยุ่นจากการโจมตีของการฉีดในฐานข้อมูล SQL Server ชื่อตารางในฐานข้อมูลเป็นกรณีที่ต่ำกว่าและการเปรียบเทียบเป็นกรณีที่มีความไวLatin1_General_CS_AS สตริงที่ฉันสามารถส่งถูกบังคับให้พิมพ์ใหญ่และสามารถมีความยาวสูงสุด 26 อักขระ ดังนั้นฉันไม่สามารถส่งเป็นตาราง DROP ได้เนื่องจากชื่อตารางจะเป็นตัวพิมพ์ใหญ่และดังนั้นคำสั่งจะล้มเหลวเนื่องจากการเปรียบเทียบ ดังนั้น - ความเสียหายสูงสุดที่ฉันสามารถทำได้ใน 26 ตัวละครคืออะไร? แก้ไข ฉันรู้ทั้งหมดเกี่ยวกับข้อความค้นหาที่กำหนดพารามิเตอร์และอื่น ๆ - ลองจินตนาการว่าบุคคลที่พัฒนาส่วนหน้าที่สร้างคิวรีเพื่อส่งไม่ได้ใช้พารามิเตอร์ในกรณีนี้ ฉันยังไม่ได้พยายามทำอะไรชั่วร้ายนี่เป็นระบบที่สร้างโดยคนอื่นในองค์กรเดียวกัน

4
เพราะเหตุใด INSERT BULK จึงถือว่าเป็นอันตราย
คำถามนี้ถูกย้ายจากการแลกเปลี่ยนความปลอดภัยข้อมูลกองซ้อนเนื่องจากสามารถตอบได้ในการแลกเปลี่ยนผู้ดูแลฐานข้อมูล อพยพ 2 ปีที่แล้ว ฉันต้องการที่จะเข้าใจว่าทำไมทีมรักษาความปลอดภัยทางไซเบอร์โดยทั่วไป (มากกว่าหนึ่งองค์กรที่ฉันจัดการ) ถูกตั้งค่าให้ตายต่อการให้สิทธิ์BULK INSERT(เช่น TSQL) กับแอปพลิเคชันและโปรแกรมเมอร์ฐานข้อมูล ฉันไม่อยากจะเชื่อข้อแก้ตัว "เติมดิสก์ที่ไม่เหมาะสม" เว้นแต่ฉันจะพลาดบางสิ่งเนื่องจากผลลัพธ์ที่ได้ไม่ต่างจากแอพพลิเคชั่นที่ทำสิ่งต่อไปนี้: for (long i = 0; i < LONG_MAX; ++i) executeSQL("INSERT INTO table VALUES(...)"); และINSERTเป็นคำสั่ง DML ทั่วไปที่ทุกคนที่มีสิทธิ์เขียนขั้นพื้นฐานสามารถดำเนินการได้ เพื่อประโยชน์ของแอปพลิเคชันBULK INSERTมีประสิทธิภาพมากขึ้นเร็วขึ้นและบรรเทาความต้องการโปรแกรมเมอร์ในการแยกวิเคราะห์ไฟล์นอก SQL แก้ไข: เดิมฉันถามคำถามนี้ในเว็บไซต์ความปลอดภัยของข้อมูลด้วยเหตุผล - ไม่ใช่ DBA ที่ขัดกับการใช้ BULK INSERT มันคือ "การรับรองข้อมูล" (IA สำหรับย่อ - กลุ่มความปลอดภัยทางไซเบอร์) ที่บังคับให้ออก ฉันจะปล่อยให้คำถามนี้ตุ๋นอีกหนึ่งหรือสองวัน แต่ถ้าการดำเนินการเป็นกลุ่มทำผ่านข้อ จำกัด …

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