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

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

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

4
ฉันจะสำรองฐานข้อมูล SQL Server ขนาดใหญ่โดยไม่ส่งผลต่อประสิทธิภาพได้อย่างไร
เรามีรายงานคิวรีที่ทำงานช้าหรือหมดเวลาในตอนเช้าและงานเดียวที่ฉันเห็นว่าทำงานซึ่งฉันคิดว่าอาจส่งผลกระทบต่องานนี้คืองานสำรองฐานข้อมูลของเรา ฐานข้อมูลเองมีขนาดประมาณ 300GB และงานสำรองเริ่มต้นที่ 4:30 น. และยังไม่เสร็จจนกว่าจะถึงเวลา 7:00 น. ไวยากรณ์ปัจจุบันของงานสำรองของเราคือ: BACKUP DATABASE [DatabaseName] TO DISK = N'E:\Database Backups\DatabaseName.Bak' WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak', NOSKIP, STATS = 10, NOFORMAT E:\ เป็นพาร์ติชันบนเซิร์ฟเวอร์ที่เก็บทั้งฐานข้อมูลและสำรองฐานข้อมูล ควรสังเกตว่านี่เป็นเซิร์ฟเวอร์เสมือนไม่ใช่เซิร์ฟเวอร์แยกต่างหาก เราเริ่มได้รับการร้องเรียนเกี่ยวกับการชะลอตัวในระหว่างกระบวนการสำรองข้อมูลทันทีหลังจากที่เราเปลี่ยนเป็นเซิร์ฟเวอร์เสมือนดังนั้นฉันคิดว่าอาจเกี่ยวข้องกัน มีวิธีการเรียกใช้งานการสำรองข้อมูลนี้จึงไม่ส่งผลกระทบต่อประสิทธิภาพการค้นหาในขณะที่ทำงานอยู่หรือไม่ เรากำลังใช้ SQL Server 2005

3
High Disk I / O จากเซิร์ฟเวอร์ sql หรือ High disk I / O ทำให้เซิร์ฟเวอร์ sql ช้าลงหรือไม่
ฉันโต้เถียงกับ DBA และพวกฮาร์ดแวร์สองคนเกี่ยวกับปัญหาด้านประสิทธิภาพบนเซิร์ฟเวอร์ SQL ของเรา โดยทั่วไปทุกอย่างเรียบร้อยดี แต่ในช่วงสองสามสัปดาห์ที่ผ่านมาเรามี spikes ล่าช้ามากในเซิร์ฟเวอร์ sql มันชัดเจนว่า SQL Server กำลังรอบนดิสก์ I / O แต่ฉันได้รับการบอกว่าเป็นเพราะ SQL Server จะขอ I / O สูงผิดปกติ ซึ่งไม่ใช่กรณี ฉันสามารถดูได้จากสิ่งที่กำลังทำงานอยู่ซึ่งไม่มีอะไรผิดปกติและ DBA ทุกคนใส่ใจที่จะดูว่าอะไรเป็นสาเหตุของการบล็อกและอื่น ๆ ซึ่งไม่มีประโยชน์ ตัวอย่างเช่นสิ่งสำคัญที่เราเห็นการสำรองข้อมูลคือการทำงานบนฐานข้อมูล ASPState ซึ่งเราใช้เพื่อจัดการสถานะเซสชัน ASP บนเว็บเซิร์ฟเวอร์ ปกติการดำเนินการเหล่านี้จะไม่เคยเห็นในผลลัพธ์ที่ใช้งาน Sp_who2 เนื่องจากเกิดขึ้นอย่างรวดเร็ว ฐานข้อมูลอยู่ในโหมดการกู้คืนอย่างง่ายและการบันทึกเป็นสิ่งผิดปกติ อย่างไรก็ตามในระหว่างความล่าช้าเหล่านี้เราสามารถเห็นการเลือกมากและปรับปรุงการดำเนินงานในฐานข้อมูลที่ถูกบล็อกหรือรอ ฉันแน่ใจว่าสิ่งที่เกิดขึ้นคือบางคนหรืองานบางอย่างกำลังทำงานบางอย่างที่ก่อให้เกิดการใช้งานดิสก์อย่างหนักหน่วงในอาร์เรย์การโจมตีที่ใช้สำหรับบันทึกฐานข้อมูลและไฟล์ข้อมูล ปัญหาคือการพิสูจน์เพราะไม่มีใครต้องการที่จะยอมรับว่าพวกเขากำลังทำสิ่งที่กำลังฆ่าเว็บไซต์ของเรา คำถามของฉันคือตัวนับประสิทธิภาพหรือสิ่งใดที่ฉันสามารถบันทึกได้ซึ่งจะช่วยแสดงว่าเซิร์ฟเวอร์ SQL กำลังรอ I / O แต่ไม่ใช่เพราะการขอมากกว่าปกติ …

1
เป็นไปได้หรือไม่ที่จะสร้างนามแฝงหรือคำเหมือนสำหรับฐานข้อมูล
เป็นไปได้หรือไม่ที่จะสร้างนามแฝงฐานข้อมูลหรือคำเหมือน? สิ่งที่ฉันหวังว่าจะสามารถทำได้คือ NewDatabaseName เป็นนามแฝงเป็น OldDatabaseName เพื่อป้องกันไม่ให้ต้องเขียนรหัสเป็นตัน Backstory: ฉันได้รับการติดต่อจากลูกค้าด้วยปัญหาที่เกิดขึ้นด้วยตนเองที่ไร้สาระ พวกเขามีแอปพลิเคชันของบุคคลที่สามที่มีเซิร์ฟเวอร์ SQL ส่วนหลัง ผู้ใช้งานได้เขียนรายงานที่กำหนดเองกับฐานข้อมูลนี้โดยใช้ Visual Basic พร้อมกับข้อมูลการเชื่อมต่อฐานข้อมูลทั้งหมดที่เขียนโค้ดไว้ในโปรแกรมของพวกเขา เมื่อเร็ว ๆ นี้ซอฟต์แวร์ของบุคคลที่สามได้เปลี่ยนชื่อฐานข้อมูล ตอนนี้รายงาน EXE ทั้งหมดล้มเหลว โอ้พวกเขาไม่มีซอร์สโค้ดมากมายเช่นกัน ฉันกลั้นหัวเราะและพูดว่าฉันจะเห็นสิ่งที่ฉันทำได้

3
กำหนดช่วงแบบไดนามิกในมิติข้อมูล
ฉันมีปัญหาที่ฉันเผชิญทุกครั้งที่ฉันตัดสินใจที่จะสร้างคิวบ์และฉันยังไม่พบวิธีที่จะเอาชนะมันได้ ปัญหาคือวิธีการอนุญาตให้ผู้ใช้กำหนดช่วงของสิ่งต่าง ๆ โดยอัตโนมัติโดยไม่จำเป็นต้อง hardcode พวกเขาในมิติ ฉันจะอธิบายปัญหาของฉันในตัวอย่าง ฉันมีตารางชื่อลูกค้า : นี่คือข้อมูลในตาราง: ฉันต้องการแสดงข้อมูลในรูปแบบ pivot และจัดกลุ่มเงินเดือนและอายุในช่วงที่กำหนดดังนี้: ฉันเขียนสคริปต์นี้และกำหนดช่วง: SELECT [CustId] ,[CustName] ,[Age] ,[Salary] ,[SalaryRange] = case when cast(salary as float) <= 500 then '0 - 500' when cast(salary as float) between 501 and 1000 then '501 - 1000' when cast(salary as float) between 1001 …

3
ความหมายของ 'SET' ในข้อความแสดงข้อผิดพลาด 'ค่า Null ถูกลบโดยการรวมหรือการดำเนินการ SET อื่น ๆ '
ฉันเห็นข้อความ 'คำเตือน ANSI' ข้างต้นวันนี้เมื่อเรียกใช้สคริปต์ของเพื่อนร่วมงาน (และฉันไม่ทราบว่าคำสั่งใดในหลาย ๆ คำที่ทำให้คำเตือนปรากฏขึ้น) ในอดีตที่ผ่านมาฉันไม่สนใจ: ฉันหลีกเลี่ยงโมฆะตัวเองและดังนั้นสิ่งที่จะกำจัดพวกเขาเป็นสิ่งที่ดีในหนังสือของฉัน! อย่างไรก็ตามวันนี้คำว่า 'SET' ตะโกนออกมาอย่างแท้จริงและฉันก็รู้ว่าฉันไม่รู้ความหมายของคำว่าควรจะอยู่ในบริบทนี้ ความคิดแรกของฉันขึ้นอยู่กับความจริงมันเป็นตัวพิมพ์ใหญ่คือมันหมายถึงSETคำหลักและหมายถึง 'การมอบหมาย' ใน UPDATE <table> SET ... ...ON DELETE SET NULL... SET IDENTITY_INSERT <table> ON ตามความช่วยเหลือของเซิร์ฟเวอร์ SQL คุณลักษณะ 'คำเตือนของ ANSI' จะขึ้นอยู่กับ ISO / ANSI SQL-92 ข้อมูลจำเพาะที่ใช้คำว่า 'ตั้งค่าการดำเนินงาน' เพียงครั้งเดียวในหัวข้อย่อยดังนั้นในกรณีหัวเรื่องใน ส่วนการกำหนดข้อมูล อย่างไรก็ตามหลังจาก Googling อย่างรวดเร็วของข้อความแสดงข้อผิดพลาดฉันเห็นตัวอย่างที่เป็นSELECTแบบสอบถามที่ดูเหมือนจะไม่มีการมอบหมายที่เกี่ยวข้อง ความคิดที่สองของฉันซึ่งขึ้นอยู่กับถ้อยคำของคำเตือน SQL Server คือความหมายทางคณิตศาสตร์ของชุดนั้นเป็นนัย อย่างไรก็ตามฉันไม่คิดว่าการรวมใน SQL …
18 sql-server 

3
จะเก็บบันทึกเว็บเซิร์ฟเวอร์ 'วัน' ใน SQL Server ได้อย่างไร
สำหรับการรายงานที่รวดเร็วขึ้นและการวิเคราะห์ประสิทธิภาพเราต้องการแทรกบันทึกการใช้เว็บเซิร์ฟเวอร์ลงใน SQL Server สิ่งนี้จะช่วยให้เราเห็นรูปแบบการจราจรปัญหาการชะลอตัวในเวลาใกล้เคียงแบบเรียลไทม์ เรามีดีมอนที่รับฟังกิจกรรมการร้องขอ / ตอบสนองจาก load balancer และแทรกจำนวนมากของเราในฐานข้อมูล อย่างไรก็ตามเราได้รับบันทึกประมาณ 1 GB ต่อวันและเราต้องเก็บประมาณหนึ่งสัปดาห์ (อย่างน้อยในรูปแบบดิบนี้) วิธีที่ดีที่สุดในการจัดเก็บข้อมูลนี้และวิธีที่ดีที่สุดในการลบรายการเก่าคืออะไร? เราได้พูดคุยเกี่ยวกับการจัดเก็บข้อมูลของแต่ละวันในตารางของตัวเองเช่นLog_2011_04_07จะมีรายการทั้งหมดสำหรับวันนั้นแล้ววางตารางที่เก่าที่สุด สามารถสร้างมุมมองเพื่อขยายตารางวันทั้งหมดเพื่อให้ง่ายต่อการสืบค้น เป็นไปได้หรือไม่

2
จุดประสงค์ของคอลัมน์ Row_GUID คืออะไร
ฉันขุดในฐานข้อมูล AdventureWorks2012 และดู Row_GUID ที่ใช้ในหลายตาราง คำถามของฉันมี 2 ส่วน: เมื่อใดที่ฉันควรรวมคอลัมน์ Row_GUID การใช้และประโยชน์ของคอลัมน์ Row_GUID คืออะไร
18 sql-server  uuid 

3
ทำไมการเข้าร่วม cardinality นี้จึงมีขนาดใหญ่มาก?
ฉันกำลังประสบกับสิ่งที่ฉันคิดว่ามีค่าระดับความเป็นหัวใจสูงสำหรับการค้นหาต่อไปนี้: SELECT dm.PRIMARY_ID FROM ( SELECT COALESCE(d1.JOIN_ID, d2.JOIN_ID, d3.JOIN_ID) PRIMARY_ID FROM X_DRIVING_TABLE dt LEFT OUTER JOIN X_DETAIL_1 d1 ON dt.ID = d1.ID LEFT OUTER JOIN X_DETAIL_LINK lnk ON d1.LINK_ID = lnk.LINK_ID LEFT OUTER JOIN X_DETAIL_2 d2 ON dt.ID = d2.ID LEFT OUTER JOIN X_DETAIL_3 d3 ON dt.ID = d3.ID ) …

2
เหตุใด SQL Injection จึงไม่เกิดขึ้นกับแบบสอบถามนี้ภายในกระบวนงานที่เก็บไว้
ฉันทำขั้นตอนการจัดเก็บต่อไปนี้: ALTER PROCEDURE usp_actorBirthdays (@nameString nvarchar(100), @actorgender nvarchar(100)) AS SELECT ActorDOB, ActorName FROM tblActor WHERE ActorName LIKE '%' + @nameString + '%' AND ActorGender = @actorgender ตอนนี้ฉันพยายามทำอะไรแบบนี้ บางทีฉันอาจทำผิด แต่ฉันต้องการให้แน่ใจว่ากระบวนการดังกล่าวสามารถป้องกัน SQL Injection: EXEC usp_actorBirthdays 'Tom', 'Male; DROP TABLE tblActor' ภาพด้านล่างแสดง SQL ด้านบนที่ถูกดำเนินการใน SSMS และผลลัพธ์ถูกแสดงอย่างถูกต้องแทนที่จะมีข้อผิดพลาด: Btw ฉันเพิ่มส่วนต่อไปที่อัฒภาคหลังจากแบบสอบถามเสร็จสิ้นการดำเนินการ จากนั้นฉันก็ดำเนินการอีกครั้ง แต่เมื่อฉันตรวจสอบเพื่อดูว่าตาราง tblActor มีอยู่หรือไม่มันยังคงอยู่ที่นั่น ฉันกำลังทำอะไรผิดหรือเปล่า? …

5
ไม่สามารถสร้างดัชนีที่กรองแล้วในคอลัมน์จากการคำนวณ
ในคำถามก่อนหน้านี้ของฉันเป็นความคิดที่ดีหรือไม่ที่จะปิดใช้งานการเลื่อนระดับล็อคในขณะที่เพิ่มคอลัมน์จากการคำนวณใหม่ลงในตาราง ฉันกำลังสร้างคอลัมน์จากการคำนวณ: ALTER TABLE dbo.tblBGiftVoucherItem ADD isUsGift AS CAST ( ISNULL( CASE WHEN sintMarketID = 2 AND strType = 'CARD' AND strTier1 LIKE 'GG%' THEN 1 ELSE 0 END , 0) AS BIT ) PERSISTED; คอลัมน์จากการคำนวณคือPERSISTEDและตามcomputed_column_definition (Transact-SQL) : ยืนกราน ระบุว่า Database Engine จะจัดเก็บค่าที่คำนวณในร่างกายและอัพเดตค่าเมื่อคอลัมน์อื่น ๆ ที่คอลัมน์ที่คำนวณขึ้นอยู่นั้นถูกอัพเดต การทำเครื่องหมายคอลัมน์ที่คำนวณเป็น PERSISTED อนุญาตให้สร้างดัชนีบนคอลัมน์ที่คำนวณได้ซึ่งกำหนดไว้ แต่ไม่แม่นยำ สำหรับข้อมูลเพิ่มเติมดูดัชนีในคอลัมน์ที่คำนวณ …

4
ใช้ DISTINCT ในฟังก์ชั่นหน้าต่างกับ OVER
ฉันพยายามที่จะโยกย้ายแบบสอบถามจาก Oracle ไปยัง SQL Server 2014 นี่คือข้อความค้นหาของฉันที่ใช้งานได้ดีใน Oracle: select count(distinct A) over (partition by B) / count(*) over() as A_B from MyTable นี่คือข้อผิดพลาดที่ฉันได้รับหลังจากพยายามเรียกใช้แบบสอบถามนี้ใน SQL Server 2014 Use of DISTINCT is not allowed with the OVER clause ใครรู้ว่าปัญหาคืออะไร? เป็นชนิดของแบบสอบถามที่เป็นไปได้ใน SQL Server หรือไม่ กรุณาแนะนำ

2
จำเป็นต้องเข้าใจข้อผิดพลาดในการดำเนินการแบบสอบถามแบบขนาน
วันนี้เราประสบกับประสิทธิภาพที่ลดลงในเซิร์ฟเวอร์ sql ของเรา ทำให้เวลานี้เกิดขึ้นเราบันทึก"The query processor could not start the necessary thread resources for parallel query execution"ข้อผิดพลาดหลายครั้ง การอ่านที่ฉันทำแสดงให้เห็นว่าสิ่งนี้เกี่ยวข้องกับจำนวน CPU ที่ใช้เมื่อดำเนินการคิวรีที่ซับซ้อน CPU Utilization was only at 7%แต่เมื่อตรวจสอบในระหว่างการหยุดทำงานของเรา มีอะไรอีกบ้างที่อ้างอิงเช่นนี้ที่ฉันยังไม่ได้เจอ? นี่เป็นสาเหตุของการเสื่อมประสิทธิภาพหรือไม่หรือว่าฉันกำลังไล่ต้อนปลาเฮอริ่งแดง? ค่า sp_configure ของฉันสำหรับสิ่งนี้มีดังนี้: name minimum maximum config_value run_value cost threshold for parallelism 0 32767 5 5

4
ทางออกที่ดีที่สุดในการแก้ไขการออกแบบฐานข้อมูลด้วย GUID เป็นคีย์หลัก
ฉันหลังจากการยืนยันแนวคิดนี้เพื่อแก้ไขฐานข้อมูลที่มีประสิทธิภาพไม่ดีหรือมีข้อเสนอแนะที่ดีกว่าถ้ามีใครมี เปิดรับข้อเสนอแนะที่ดีกว่าเสมอ ฉันมีฐานข้อมูลขนาดใหญ่มาก (มากกว่า 20 ล้านบันทึกการเติบโตประมาณ 1/2 ล้านต่อวัน) ซึ่งใช้ GUID เป็น PK การดูแลในส่วนของฉัน แต่ PK นั้นทำคลัสเตอร์บนเซิร์ฟเวอร์ SQL และทำให้เกิดปัญหาประสิทธิภาพการทำงาน เหตุผลสำหรับ guid - ฐานข้อมูลนี้มีการซิงโครไนซ์บางส่วนกับฐานข้อมูลอื่น 150 ฐานดังนั้น PK จึงจำเป็นต้องไม่ซ้ำกัน การซิงโครไนซ์ไม่ได้รับการจัดการโดย SQL Server แต่มีกระบวนการแบบกำหนดเองที่สร้างขึ้นซึ่งเก็บข้อมูลให้ตรงกับความต้องการของระบบ - ทั้งหมดขึ้นอยู่กับ GUID นั้น ฐานข้อมูลระยะไกล 150 ตัวแต่ละตัวไม่เก็บข้อมูลแบบเต็มตามที่เก็บไว้ในฐานข้อมูล SQL ส่วนกลาง พวกเขาจัดเก็บชุดย่อยของข้อมูลที่พวกเขาต้องการจริงและข้อมูลที่ต้องการนั้นไม่ซ้ำกัน (10 จาก 150 ฐานข้อมูลอาจมีบางระเบียนเดียวกันจากฐานข้อมูลไซต์อื่นเช่นพวกเขาแบ่งปัน) นอกจากนี้ - ข้อมูลถูกสร้างขึ้นจริงที่ไซต์ระยะไกล - ไม่ใช่ที่จุดศูนย์กลาง - …

2
SQL Server มีวิธีการรับรอบบันทึกธุรกรรมเมื่ออัปเดตคอลัมน์เป็น int
ฉันมีตาราง SQL Server 2005 ชื่อBRITTNEY_SPEARS_MARRIAGESและมีคอลัมน์ต่อไปนี้: MarrigeId tinyint, HusbandName varchar(500), MarrigeLength int ตอนนี้ฉันมีอีกโต๊ะ BRITTNEY_SPEARS_MARRIAGE_STORIES StoryId int, MarriageId tinyint, StoryText nvarchar(max) ปัญหาคือเราต้องการที่จะปรับปรุงMarrigeIdคอลัมน์ไปยังจากint tinyintเราแค่รู้สึกว่า Brittney กำลังจะมีการแต่งงานมากมายก่อนที่ทุกอย่างจะถูกพูดและทำ ตอนนี้BRITTNEY_SPEARS_MARRIAGE_STORIESตารางมีแถวอยู่ 18 ล้านแถว (เดี๋ยวก่อนผู้หญิงมีปัญหา) ดังนั้นเมื่อเราไปอัปเดตบันทึกธุรกรรมจะเต็มและกล่อง SQL Server ของเราก็ตาย เราจะแก้ไขสิ่งนี้ได้อย่างไร จะมีการพูดว่า "สวัสดี SQL Server ฉันจะอัปเดตคอลัมน์นี้และทำให้ใหญ่ขึ้นเชื่อฉันใน SQL Server นี้กรุณาอย่ากรอกบันทึกการทำธุรกรรมในขณะที่คุณพยายามตรวจสอบทุกอย่าง?"

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