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

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

4
ฐานข้อมูลเซิร์ฟเวอร์ SQL ค้างอยู่ในสถานะคืนค่า
ฉันมีเซิร์ฟเวอร์ Sharepoint เรามีปัญหากับเครื่องมือสำรองของเราและตอนนี้ฐานข้อมูลของฉันบางส่วนติดอยู่ในสถานะการกู้คืน! เป็นไปได้หรือไม่ที่จะหยุดกระบวนการกู้คืน และฉันจะมั่นใจได้อย่างไรว่าความสมบูรณ์ของฐานข้อมูลไม่ได้ถูกบุกรุก?

5
เหตุใดการเปลี่ยนแปลงคอลัมน์ไม่เป็นศูนย์ทำให้เกิดการเติบโตของไฟล์บันทึกขนาดใหญ่
ฉันมีตารางที่มีแถว 64 ม. ที่ใช้ดิสก์ 4.3 GB สำหรับข้อมูล แต่ละแถวมีประมาณ 30 ไบต์ของคอลัมน์จำนวนเต็มบวกNVARCHAR(255)คอลัมน์ตัวแปรสำหรับข้อความ ฉันเพิ่ม AA คอลัมน์ nullable Datetimeoffset(0)กับข้อมูลประเภท จากนั้นฉันก็อัพเดทคอลัมน์นี้สำหรับทุกแถวและตรวจสอบให้แน่ใจว่าเม็ดมีดใหม่ทั้งหมดวางค่าในคอลัมน์นี้ เมื่อไม่มีรายการ NULL ฉันก็วิ่งคำสั่งนี้เพื่อให้ฟิลด์ใหม่ของฉันได้รับคำสั่ง: ALTER TABLE tblCheckResult ALTER COLUMN [dtoDateTime] [datetimeoffset](0) NOT NULL ผลที่ได้คือการเติบโตอย่างมากในขนาดของบันทึกการทำธุรกรรม - จาก 6GB เป็นมากกว่า 36GB จนกว่าจะหมดพื้นที่! ไม่มีใครมีความคิดอะไรในโลก SQL Server 2008 R2 ที่กำลังทำอยู่สำหรับคำสั่งง่ายๆนี้เพื่อให้เกิดการเติบโตอย่างมาก

4
อะไรคือเหตุผลทางธุรกิจวัตถุประสงค์ในการใช้ SQL Server 2012 มากกว่า 2008 R2
บริษัท ของฉันกำลังเผชิญกับการตัดสินใจว่าจะซื้อ SQL Server 2012 Denali หรือ SQL Server 2008 R2 สำหรับเซิร์ฟเวอร์ฐานข้อมูลใหม่ ฉันกำลังมองหาเหตุผลวัตถุประสงค์เพื่อเลือกอย่างใดอย่างหนึ่ง ความต้องการของเรา: Standard edition (สำหรับเหตุผลด้านการเงินและการขาดคุณสมบัติองค์กร) ภาระงาน OLTP (ซึ่งหมายความว่าเราไม่ต้องการฟังก์ชั่นการสร้างหน้าต่างใหม่และดัชนีที่จัดเก็บคอลัมน์) ขนาดฐานข้อมูล 10-100 GB ไม่จำเป็นต้องมีคุณสมบัติระบบธุรกิจอัจฉริยะ ต้องการเอ็นจินเชิงสัมพันธ์เท่านั้น การมิร์เรอร์ฐานข้อมูลแบบซิงโครนัส ปัจจุบันเหตุผลต่อไปนี้เป็นที่รู้จักกันสำหรับฉัน: SQL Server 2012 Denali รุ่นใหม่ล่าสุดที่มีอยู่ SQL Server 2008 R2 เทคโนโลยีที่พิสูจน์แล้ว ฉันไม่สามารถหาเหตุผลทางเทคนิคได้มากมายที่จะชอบอีกเหตุผลหนึ่ง โดยพื้นฐานแล้วจะมีการเลือกใช้เทคโนโลยีที่ได้รับการพิสูจน์แล้วว่าทำงานได้สำเร็จเทียบกับรุ่นใหม่ล่าสุดและยิ่งใหญ่ที่สุดที่มีให้ เหตุผลวัตถุประสงค์ในการตัดสินใจมีอะไรบ้าง

2
พฤติกรรมที่แท้จริงของความเข้ากันได้ระดับ 80 คืออะไร?
มีใครให้ข้อมูลเชิงลึกที่ดีกว่าเกี่ยวกับคุณสมบัติโหมดความเข้ากันได้หรือไม่ มันมีพฤติกรรมแตกต่างจากที่ฉันคาดไว้ เท่าที่ฉันเข้าใจโหมดความเข้ากันได้มันเป็นเรื่องเกี่ยวกับความพร้อมใช้งานและการสนับสนุนโครงสร้างภาษาบางอย่างระหว่าง SQL Server รุ่นต่างๆ ไม่ส่งผลกระทบต่อการทำงานภายในของรุ่นโปรแกรมฐานข้อมูล มันจะพยายามป้องกันการใช้คุณสมบัติและโครงสร้างที่ยังไม่พร้อมใช้งานในรุ่นก่อนหน้า ฉันเพิ่งสร้างฐานข้อมูลใหม่ด้วยระดับ 80 ที่เข้ากันได้ใน SQL Server 2008 R2 สร้างตารางที่มีคอลัมน์ int หนึ่งคอลัมน์และสร้างด้วยแถวไม่กี่แถว จากนั้นดำเนินการคำสั่งเลือกด้วยrow_number()ฟังก์ชั่น ความคิดของฉันคือเนื่องจากฟังก์ชั่น row_number เพิ่งเปิดตัวในปี 2005 สิ่งนี้จะทำให้เกิดข้อผิดพลาดในโหมด 80 ที่เข้ากันได้ แต่ด้วยความประหลาดใจของฉันนี้ทำงานได้ดี จากนั้นแน่นอนว่ากฎการเข้ากันได้จะได้รับการประเมินก็ต่อเมื่อคุณ 'บันทึกบางอย่าง' ดังนั้นฉันจึงสร้าง proc ที่เก็บไว้สำหรับคำสั่ง row_number ของฉัน การสร้าง proc ที่จัดเก็บเป็นไปด้วยดีและฉันสามารถดำเนินการได้อย่างสมบูรณ์และได้ผลลัพธ์ มีใครช่วยให้ฉันเข้าใจการทำงานของโหมดความเข้ากันได้ดีขึ้นหรือไม่ ความเข้าใจของฉันมีข้อบกพร่องอย่างชัดเจน


5
การทำให้ข้อมูลสับสนใน SQL Server
แนวปฏิบัติที่ดีที่สุดสำหรับ Data Obfuscation ใน SQL Server คืออะไร เราต้องการใช้ข้อมูลการผลิตแบบสวมหน้ากากในระบบเอือดของเรา ถ้าเราต้องการที่จะทำมันอย่างรวดเร็วและด้วยระดับ obsfucation ที่สูงขึ้นวิธีการที่ควรจะนำมา? ฉันกำลังคิดเกี่ยวกับการแย่งชิงตัวละครสำหรับชื่อและนามสกุลของผู้คน แต่อย่างไร ฉันควรสร้างฟังก์ชั่นด้วยตัวเองหรือมีฟังก์ชั่นที่กำหนดไว้ล่วงหน้าให้ใช้งานหรือไม่? ฉันไม่ต้องการใช้เวลาคิดค้นวงล้อใหม่ :) แล้วฟิลด์วันที่ล่ะ? ตัวอย่างเช่นควรเลือกวันเดือนปีเกิดแบบสุ่มจากตารางทั้งหมดและมอบหมายให้บันทึกหรือมีวิธีที่ดีกว่าในการทำเช่นนั้น?

1
มีอนาล็อกของ GETDATE () ที่ส่งกลับ DATETIME2 หรือไม่
ตาม MSDN, Getdate (), GetUtcDate () และ CURRENT_TIMESTAMP จะส่งกลับ DATETIME ทั้งหมด ฉันรันการทดสอบสั้น ๆ ซึ่งยืนยันว่า: CREATE TABLE #t(T DATETIME2(7)); GO DECLARE @i INT ; SET @i=1; WHILE @i<10000 BEGIN ; INSERT #t VALUES(CURRENT_TIMESTAMP) ; SET @i=@i+1; END ; SELECT DISTINCT t FROM #t ORDER BY t ; --- 2013-01-28 13:23:19.4930000 2013-01-28 …

3
การสแกนที่ไม่คาดหมายระหว่างการลบโดยใช้ WHERE IN
ฉันมีคำถามดังนี้ DELETE FROM tblFEStatsBrowsers WHERE BrowserID NOT IN ( SELECT DISTINCT BrowserID FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID IS NOT NULL ) tblFEStatsBrowsers มี 553 แถว tblFEStatsPaperHits มีแถว 47.974.301 tblFEStatsBrowsers: CREATE TABLE [dbo].[tblFEStatsBrowsers]( [BrowserID] [smallint] IDENTITY(1,1) NOT NULL, [Browser] [varchar](50) NOT NULL, [Name] [varchar](40) NOT NULL, [Version] [varchar](10) NOT NULL, …

6
ทำไมการเพิ่ม TOP 1 ถึงทำให้ประสิทธิภาพแย่ลงอย่างเห็นได้ชัด?
ฉันมีคำถามที่ค่อนข้างง่าย SELECT TOP 1 dc.DOCUMENT_ID, dc.COPIES, dc.REQUESTOR, dc.D_ID, cj.FILE_NUMBER FROM DOCUMENT_QUEUE dc JOIN CORRESPONDENCE_JOURNAL cj ON dc.DOCUMENT_ID = cj.DOCUMENT_ID WHERE dc.QUEUE_DATE <= GETDATE() AND dc.PRINT_LOCATION = 2 ORDER BY cj.FILE_NUMBER นั่นทำให้ฉันมีประสิทธิภาพที่น่ากลัว (อย่างที่ไม่เคยใส่ใจที่จะรอให้มันจบ) แผนแบบสอบถามมีลักษณะดังนี้: อย่างไรก็ตามถ้าฉันลบTOP 1แผนการที่มีลักษณะเช่นนี้ออกและทำงานใน 1-2 วินาที: แก้ไข PK & การทำดัชนีด้านล่าง ความจริงที่ว่าTOP 1แผนการสืบค้นที่เปลี่ยนแปลงนั้นไม่ได้ทำให้ฉันแปลกใจ แต่ฉันก็แปลกใจนิดหน่อยที่มันทำให้แย่ลงไปอีกมาก หมายเหตุ: ฉันได้อ่านผลลัพธ์จากโพสต์นี้และเข้าใจแนวคิดของRow Goalสิ่งอื่น ๆ แล้วสิ่งที่ฉันอยากรู้คือฉันจะเปลี่ยนการสืบค้นอย่างไรเพื่อที่จะใช้แผนการที่ดีกว่า ขณะนี้ฉันกำลังทิ้งข้อมูลลงในตารางชั่วคราวแล้วดึงแถวแรกออกมา …

3
ความแตกต่างในแผนการดำเนินการบนเซิร์ฟเวอร์ UAT และ PROD
ฉันต้องการที่จะเข้าใจว่าทำไมมันถึงมีความแตกต่างอย่างมากในการดำเนินการกับเคียวรีเดียวกันบน UAT (ทำงานใน 3 วินาที) เทียบกับ PROD (ทำงานใน 23 วินาที) ทั้ง UAT และ PROD มีข้อมูลและดัชนีอย่างแน่นอน ค้นหา: set statistics io on; set statistics time on; SELECT CONF_NO, 'DE', 'Duplicate Email Address ''' + RTRIM(EMAIL_ADDRESS) + ''' in Maintenance', CONF_TARGET_NO FROM CONF_TARGET ct WHERE CONF_NO = 161 AND LEFT(INTERNET_USER_ID, 6) != 'ICONF-' …

3
พื้นฐานการดำเนินการตามแผน - ความสับสนของการจับคู่แฮช
ฉันเริ่มเรียนรู้แผนการดำเนินการและสับสนเกี่ยวกับวิธีการทำงานของแฮชที่ตรงกันและทำไมจึงต้องใช้ในการเข้าร่วมง่ายๆ select Posts.Title, Users.DisplayName From Posts JOIN Users on Posts.OwnerUserId = Users.Id OPTION (MAXDOP 1) ตามที่ฉันเข้าใจแล้วผลลัพธ์ของการสแกนดัชนีสูงสุดจะกลายเป็นแฮชและแต่ละแถวในดัชนีสแกนคลัสเตอร์ด้านล่างจะค้นหา ฉันเข้าใจว่าตารางแฮชทำงานอย่างน้อยในระดับหนึ่ง แต่ฉันสับสนเกี่ยวกับค่าที่ได้รับการแฮชในตัวอย่างเช่นนี้ สิ่งที่จะทำให้ฉันรู้สึกว่าเป็นเขตข้อมูลทั่วไประหว่างพวกเขารหัสถูกแฮช - แต่ถ้าเป็นกรณีนี้ทำไมจำนวนแฮช?

1
แบบจำลองการกู้คืนง่ายหรือเต็มสำหรับฐานข้อมูล
ฉันควรใช้แบบจำลองการกู้คืนแบบเต็มเมื่อใดและเมื่อใดควรใช้แบบจำลองการกู้คืนอย่างง่ายสำหรับฐานข้อมูล ฉันใช้รูปแบบการกู้คืนแบบเต็มเสมอเพราะเป็นค่าเริ่มต้น แต่วันนี้ฉันพบข้อผิดพลาดนี้: ผู้ให้บริการ Microsoft OLE DB สำหรับ SQL Server (0x80040E14) บันทึกธุรกรรมสำหรับฐานข้อมูล 'DATABASE NAME' เต็ม หากต้องการค้นหาสาเหตุที่พื้นที่ในบันทึกไม่สามารถนำกลับมาใช้ใหม่ได้ให้ดูคอลัมน์ log_reuse_wait_desc ใน sys.database จริง ๆ แล้วฐานข้อมูลเฉพาะนั้นเป็นหนึ่งในฐานข้อมูลที่เล็กที่สุดและไม่ได้ใช้งานมากที่สุดบนเซิร์ฟเวอร์ของฉันดังนั้นฉันจึงไม่รู้เลยว่าจะสามารถบันทึกข้อมูลได้เต็มรูปแบบในฐานข้อมูลนี้ได้อย่างไร เมื่อต้องการลดขนาดบันทึกและทำให้ฐานข้อมูลสามารถเข้าถึงได้อีกครั้งฉันเปลี่ยนรูปแบบการกู้คืนจาก FULL เป็น SIMPLE และลดขนาดแฟ้มบันทึกเชิงตรรกะด้วยคำสั่งต่อไปนี้ alter database myDbName SET recovery simple go dbcc shrinkfile('LOG FILE LOGICAL NAME', 100) go มันช่วย แต่ตอนนี้ฉันต้องเข้าใจทำไมมันช่วยHOWสถานการณ์นี้เริ่มต้นและวิธีการป้องกันนี้ในอนาคตหรือไม่ แก้ไข: ทุกคืนเวลา 1 นาฬิกาเรากำลังสำรองข้อมูลสคริปต์ทุกฐานข้อมูลบนเซิร์ฟเวอร์ สิ่งนี้กำลังดำเนินการโดยสคริปต์บรรทัด 31 ซึ่งส่วนที่สำคัญที่สุดคือ …

2
วิธีทำให้ sqlcmd ส่งคืน ERRORLEVEL นอกเหนือจาก 0 เมื่อสคริปต์. sql ล้มเหลว
ฉันกำลังเรียกใช้ sqlcmd จากแบตช์ไฟล์และฉันสงสัยว่าจะทำให้ ERRORLEVEL คืนเป็นค่าอื่นนอกเหนือจาก 0 ได้อย่างไรเมื่อมีบางอย่างผิดพลาดในการสำรองข้อมูล

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

5
ทำไมถึงมีประเภทข้อมูล varchar อยู่?
ฐานข้อมูลของฉันหลายแห่งมีเขตข้อมูลที่กำหนดเป็น varchars นี่ไม่ได้เป็นปัญหามากนักตั้งแต่ฉันอาศัยและทำงานในอเมริกา (ภาษาเดียวที่มีอยู่คือ "อเมริกัน" อะแฮ่ม ) หลังจากทำงานกับฐานข้อมูลประมาณ 5 ปีฉันก็พบว่าในที่สุดฉันก็พบปัญหาเกี่ยวกับลักษณะที่ จำกัด ของเขตข้อมูล varchar และฉันต้องแก้ไขเขตข้อมูลของฉันเพื่อเก็บข้อมูลเป็น nvarchars หลังจากต้องทำการอัปเดตอีกครั้งในตารางการแปลงเขตข้อมูล varchar เป็น nvarchar ฉันเพิ่งคิดว่า - ทำไมเรายังคงทำเช่นนี้อยู่ ฉันตัดสินใจที่จะกำหนดเขตข้อมูลใหม่ทั้งหมดของฉันเป็น nvarchar แทน varchar ซึ่งเป็นสิ่งที่ฉันเรียนรู้ที่จะทำจากหนังสือเรียนเมื่อตอนที่ฉันอยู่โรงเรียนเมื่อ 10 ปีที่แล้ว ในปี 2554 และมี SQL Server รุ่นใหม่เมื่อปีที่แล้ว ทำไมเรายังคงสนับสนุนประเภทข้อมูล varchar เมื่อเราสามารถ / ควรใช้ nvarchar แทน? ฉันรู้ว่ามันมักจะเป็นที่ถกเถียงกันอยู่ว่า nvarchars เป็น "ใหญ่เป็นสองเท่า" เป็น varchars ดังนั้นการใช้พื้นที่เก็บข้อมูลอาจเป็นหนึ่งในการโต้แย้งสำหรับ maitaining …

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