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

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

1
เปลี่ยนความยาวของ varchar บนตารางผลิตภัณฑ์สด
ฉันมีเซิร์ฟเวอร์ฐานข้อมูล MS SQL Server 2008 R2 อยู่ในขณะนี้ที่ใช้กับแอปที่ใช้งานจริง การปรับปรุงใหม่ให้กับแอพตอนนี้ต้องการvarchar(100)คอลัมน์ในตารางที่จะเพิ่มความยาว ความยาวของคอลัมน์ที่มีอยู่นี้ใน prod DB จะเพิ่มขึ้นได้หรือไม่โดยไม่กระทบต่อข้อมูลปัจจุบัน การเปลี่ยนแปลงนี้จะต้องเสร็จสิ้นในช่วงนอกเวลาทำการเพื่อหลีกเลี่ยงการหยุดให้บริการหรือไม่?

4
เหตุใดบันทึกการทำธุรกรรมจึงยังคงเติบโตในโหมดการกู้คืนอย่างง่ายพร้อมการสำรองข้อมูลทุกคืน
ก่อนที่จะทำเครื่องหมายว่าซ้ำกันทันทีฉันได้อ่านของ Mike Walsh เหตุใดทรานแซคชันทรานแซกชันเติบโตหรือหมดพื้นที่ แต่ฉันไม่คิดว่ามันจะให้คำตอบกับสถานการณ์ของฉัน ฉันดูคำถามที่คล้ายกันหลายสิบคำถาม แต่คำถามที่เกี่ยวข้องส่วนใหญ่เพิ่งพูดว่า "ซ้ำ" และชี้ไปที่คำถามของไมค์ รายละเอียด: ฉันมีฐานข้อมูลจำนวน ~ 500MB ใน SQL Server 2008 R2 ทั้งหมดในโหมดการกู้คืนที่เรียบง่าย (ไม่ใช่ตัวเลือกของฉัน) สำรองข้อมูลเต็มรูปแบบทุกคืนพร้อมแฟ้มข้อมูล ~ 200MB และไฟล์บันทึก ~ 300MB บันทึกจะไม่โตขึ้นเป็น 300MB ทันที แต่ค่อนข้างช้าในช่วงสองสามเดือน ไม่มีธุรกรรมใด ๆ เปิดอยู่อย่างน้อยตาม sp_who2 และการตรวจสอบกิจกรรม ถ้าฉันคลิกขวาที่ฐานข้อมูลและเลือกคุณสมบัติมันบอกฉันว่ามี ~ 50MB ฟรี โดยเฉพาะอย่างยิ่งหลังจากการสำรองข้อมูลไฟล์บันทึกทั้งหมดไม่ควรว่างหรือไม่ ในโหมด SIMPLE บันทึกไม่ควรฟรีตราบใดที่ไม่มีธุรกรรมเปิดอยู่ log_reuse_wait_descจากsys.databasesว่าพูดว่า "ไม่มีอะไร" ซึ่งขึ้นอยู่กับคำถามและคำตอบที่อ้างถึงข้างต้นบอกว่ามันไม่ควรรออะไรที่จะนำมาใช้ซ้ำพื้นที่ ถ้าฉันทำ 'DBCC SHRINKFILE' ไฟล์บันทึกจะลดลงเหลือ …

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

3
เป็นวิธีที่ดีที่สุดในการเก็บถาวรทั้งหมดยกเว้นปีปัจจุบันและแบ่งพาร์ติชันตารางในเวลาเดียวกัน
งาน เก็บถาวรทั้งหมดยกเว้นรอบระยะเวลา 13 เดือนจากกลุ่มของตารางขนาดใหญ่ ข้อมูลที่เก็บถาวรต้องถูกเก็บไว้ในฐานข้อมูลอื่น ฐานข้อมูลอยู่ในโหมดการกู้คืนอย่างง่าย ตารางมีขนาด 50 ล้านแถวถึงหลายพันล้านและในบางกรณีอาจใช้เวลาหลายร้อยกิกะไบต์ในแต่ละครั้ง ตารางไม่ได้ถูกแบ่งพาร์ติชันในปัจจุบัน แต่ละตารางมีหนึ่งดัชนีคลัสเตอร์ในคอลัมน์วันที่เพิ่มขึ้น แต่ละตารางจะมีดัชนีที่ไม่ใช่คลัสเตอร์อีกหนึ่งดัชนี การเปลี่ยนแปลงข้อมูลทั้งหมดในตารางเป็นการแทรก เป้าหมายคือเพื่อลดการหยุดทำงานของฐานข้อมูลหลัก เซิร์ฟเวอร์คือ 2008 R2 Enterprise ตาราง "เก็บถาวร" จะมีประมาณ 1.1 พันล้านแถวตาราง "สด" ประมาณ 400 ล้านแถว เห็นได้ชัดว่าตารางเก็บถาวรจะเพิ่มขึ้นเมื่อเวลาผ่านไป แต่ฉันคาดว่าตารางถ่ายทอดสดจะเพิ่มขึ้นอย่างรวดเร็วด้วยเช่นกัน พูดอย่างน้อย 50% ในอีกไม่กี่ปีข้างหน้า ฉันคิดเกี่ยวกับฐานข้อมูล Azure ยืด แต่น่าเสียดายที่เราอยู่ที่ 2008 R2 และมีแนวโน้มที่จะอยู่ที่นั่นชั่วครู่ แผนปัจจุบัน สร้างฐานข้อมูลใหม่ สร้างตารางใหม่ที่แบ่งพาร์ติชันตามเดือน (โดยใช้วันที่แก้ไข) ในฐานข้อมูลใหม่ ย้ายข้อมูล 12-13 เดือนล่าสุดไปยังตารางที่แบ่งพาร์ติชัน ทำการเปลี่ยนชื่อการแลกเปลี่ยนของฐานข้อมูลทั้งสอง ลบข้อมูลที่ย้ายแล้วออกจากฐานข้อมูล "เก็บถาวร" …

1
อัปเกรดฐานข้อมูล SQL Server 2000 เป็น 2008 R2 และเปิดใช้งานคุณลักษณะใหม่
ฉันเพิ่งอัพเกรดฐานข้อมูล SQL Server 2000 เป็น 2008 R2 สิ่งที่ฉันทำคือ: ปิดบริการ SQL Server 2000 (ด่วน) บนเครื่องเก่า ย้าย datafiles ( mydatabase.mdfและmydatabase.ldf ) ไปยังเครื่องใหม่ เรียกใช้ SQL Server Management Studio 2008 เชื่อมต่อกับโปรแกรมฐานข้อมูลท้องถิ่น แนบดาต้าไฟล์เข้ากับฐานข้อมูล เปลี่ยนระดับความเข้ากันได้ของฐานข้อมูลเป็น SQL 2008 (100) คำถาม: ฉันต้องทำอะไรอีกบ้างเพื่อให้การย้ายข้อมูลเสร็จสมบูรณ์ ฉันต้องการ: ใช้คุณสมบัติใหม่เช่นการตรวจสอบและการกู้คืนเต็มรูปแบบ ทำฐานข้อมูลนี้ให้ตรงตามที่สร้างใน SQL 2008 R2 ทำให้ฐานข้อมูลนี้สามารถใช้งานร่วมกันได้อย่างถูกต้องและสมบูรณ์แบบสำหรับเครื่องมือฐานข้อมูล SQL 2008 R2 ใหม่ กล่าวอีกนัยหนึ่ง:ฉันแค่ต้องการทราบวิธีการแปลงฐานข้อมูล SQL 2000 เก่าอย่างถูกต้องและสมบูรณ์ให้เป็นฐานข้อมูล 2008 …

5
เพิ่มบทความลงในสิ่งพิมพ์ของทรานแซคชันโดยไม่ต้องสร้างสแนปชอตใหม่
การใช้การจำลองแบบของทรานแซคชัน SQL 2008 R2 กับสมาชิก pull เมื่อเราเพิ่มบทความฉันต้องการหลีกเลี่ยงการสร้าง snapshot ทั้งหมด (db คือ ~ 80 GB ดังนั้นจึงใช้เวลาหลายชั่วโมง) จากบทความนี้ฉันได้เห็นวิธีการทำสิ่งนี้ด้วยสแนปชอตบางส่วนโดยการปิดใช้งานทันที_sync แต่นั่นไม่ได้ผลสำหรับเรา โดยหลักการแล้วฉันต้องการเรียกใช้สิ่งนี้เป็นส่วนหนึ่งของสคริปต์ db ของเราเพื่อสร้างตารางดังนั้นถ้าเราต้องการให้มันทำซ้ำเรา: Create Table ... sp_addArticle ... sp_PushThisToOurSubscribersNow

7
รายการสิทธิ์ทั้งหมดสำหรับบทบาทที่กำหนด?
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 6 ปีที่แล้ว ฉันค้นหาไปทั่วและไม่พบคำตอบที่สรุปสำหรับคำถามนี้ ฉันต้องการสคริปต์ที่สามารถให้สิทธิ์ทั้งหมดสำหรับบทบาทที่เกี่ยวข้อง ความคิดใด ๆ หรือเป็นไปได้? นี่ทำให้ฉันใกล้ - แต่ฉันไม่สามารถพลิกมันและให้บทสรุปสำหรับบทบาทมากกว่าผู้ใช้ http://consultingblogs.emc.com/jamiethomson/archive/2007/02/09/SQL-Server-2005_3A00_-View-all-permissions--_2800_2_2900_.aspx WITH perms_cte as ( select USER_NAME(p.grantee_principal_id) AS principal_name, dp.principal_id, dp.type_desc AS principal_type_desc, p.class_desc, OBJECT_NAME(p.major_id) AS object_name, p.permission_name, p.state_desc AS permission_state_desc from sys.database_permissions p inner JOIN sys.database_principals dp on p.grantee_principal_id = …

2
วิธีการแบ่งพาร์ติชันตารางที่ไม่มีการแบ่งพาร์ติชันที่มีอยู่
ฉันมีตารางที่มีข้อมูลอยู่แล้ว: dbo.Test (col1,col2,col3....) ON [PRIMARY] ฉันต้องเปลี่ยนตารางนี้เพื่อให้มีการแบ่งพาร์ติชันเช่นนี้: dbo.Test(col1,col2,col3....) ON Ps_Date(Col2) ฉันจะทำสิ่งนี้ให้สำเร็จโดยไม่ต้องวางและสร้างโต๊ะขึ้นใหม่ได้อย่างไร?

2
LIKE ใช้ดัชนี CHARINDEX ไม่ได้หรือ
คำถามนี้เป็นคำถามที่เกี่ยวข้องกับคำถามเก่าของฉัน ข้อความค้นหาด้านล่างนี้ใช้เวลาดำเนินการ 10 ถึง 15 วินาที: SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id] FROM [company].dbo.[customer] WHERE (Charindex('123456789',CAST([company].dbo.[customer].[Phone no] AS VARCHAR(MAX)))>0) ในบางบทความฉันเห็นว่าการใช้CASTและCHARINDEXจะไม่ได้รับประโยชน์จากการจัดทำดัชนี นอกจากนี้ยังมีบทความบางส่วนที่กล่าวว่าการใช้LIKE '%abc%'จะไม่ได้รับประโยชน์จากการทำดัชนีในขณะที่LIKE 'abc%': http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement- สำหรับ -like-query http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568 ในกรณีของฉันฉันสามารถเขียนแบบสอบถามเป็น: SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id] FROM [company].dbo.[customer] WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%' แบบสอบถามนี้ให้ผลลัพธ์เช่นเดียวกับรายการก่อนหน้า ผมได้สร้างดัชนี nonclustered Phone noสำหรับคอลัมน์ เมื่อผมดำเนินการค้นหานี้มันจะทำงานในเวลาเพียง1 วินาที นี่เป็นการเปลี่ยนแปลงครั้งใหญ่เมื่อเทียบกับ14 วินาทีก่อนหน้านี้ วิธีการที่ไม่LIKE '%123456789%'ได้รับประโยชน์จากการจัดทำดัชนี? เหตุใดบทความที่ระบุจึงไม่สามารถปรับปรุงประสิทธิภาพได้ ฉันพยายามเขียนแบบสอบถามใหม่เพื่อใช้CHARINDEXแต่ประสิทธิภาพยังคงช้า เหตุใดจึงไม่CHARINDEXได้ประโยชน์จากการจัดทำดัชนีตามที่ปรากฏในLIKEแบบสอบถาม …

4
รวมคำสั่ง deadlocking ตัวเอง
ฉันมีขั้นตอนดังต่อไปนี้ (SQL Server 2008 R2): create procedure usp_SaveCompanyUserData @companyId bigint, @userId bigint, @dataTable tt_CoUserdata readonly as begin set nocount, xact_abort on; merge CompanyUser with (holdlock) as r using ( select @companyId as CompanyId, @userId as UserId, MyKey, MyValue from @dataTable) as newData on r.CompanyId = newData.CompanyId and r.UserId = newData.UserId …

3
วิธีที่ไม่เจ็บปวดในการสร้างดัชนีคลัสเตอร์บนโต๊ะขนาดใหญ่หรือไม่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ดังนั้นเราจึงมีเว็บไซต์ลูกค้าที่ร้องเรียนเกี่ยวกับประสิทธิภาพที่ช้ามาก ฉันลองดูหนึ่งครั้งและเห็นได้ชัดว่าปัญหานี้เกิดขึ้นเนื่องจากSomebody Else (grrrr) ออกแบบตารางที่มีระเบียนมากกว่า 20 ล้านรายการโดยไม่มีดัชนีคลัสเตอร์ ตอนนี้ฉันต้องการสร้างดัชนีคลัสเตอร์บนตารางนั้น - แต่ในสภาพแวดล้อมการทดสอบของฉันcreate indexคำสั่งของฉันทำงานเป็นเวลาหนึ่งชั่วโมงและยังไม่เสร็จ ไซต์ลูกค้าเป็นร้านค้าที่ใช้งานได้ตลอด 24 ชั่วโมงทุกวันและไม่สามารถเสียเวลาลงได้หนึ่งชั่วโมงในขณะที่ฉันสร้างดัชนี มีวิธีการบังคับใช้เดรัจฉานน้อยกว่าในการสร้างดัชนีที่จะทำให้งานเสร็จอย่างรวดเร็วหรือทำด้วยวิธีที่ชาญฉลาดซึ่งจะไม่ทำลายประสิทธิภาพของเซิร์ฟเวอร์โดยสิ้นเชิงในขณะที่กำลังทำงานอยู่หรือไม่? เรากำลังใช้ SQL Server Enterprise Edition

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

5
เหตุใดการส่งข้อมูลที่ชัดเจนนี้ทำให้เกิดปัญหากับเซิร์ฟเวอร์ที่เชื่อมโยงเท่านั้น
ฉันกำลังสืบค้นข้อมูลจากเซิร์ฟเวอร์ที่เชื่อมโยงผ่านมุมมองบนเซิร์ฟเวอร์ต้นทาง มุมมองต้องรวมคอลัมน์มาตรฐานสองสามมาตรฐานเช่นCreated, ModifiedและDeleted, แต่ในกรณีนี้ตารางบนเซิร์ฟเวอร์ต้นทางไม่มีข้อมูลที่เหมาะสม คอลัมน์จึงถูกส่งไปยังประเภทที่เกี่ยวข้องอย่างชัดเจน ฉันอัปเดตมุมมองเปลี่ยนคอลัมน์จาก NULL AS Modified ไปยัง CAST(NULL as DateTime) as Modified อย่างไรก็ตามหลังจากดำเนินการอัปเดตนี้มุมมองกำลังเรียกใช้ข้อความแสดงข้อผิดพลาดต่อไปนี้: ข่าวสารเกี่ยวกับ 7341 ระดับ 16 สถานะ 2 บรรทัด 3 ไม่สามารถรับค่าแถวปัจจุบันของคอลัมน์ "(นิพจน์ที่ผู้ใช้สร้างขึ้น). Expr1002" จากผู้ให้บริการ OLE DB "SQLNCLI11" สำหรับเซิร์ฟเวอร์ที่เชื่อมโยง "" เราได้ทำ "การแปลงที่ชัดเจน" โดยทั่วไปทั่วเซิร์ฟเวอร์ต้นทางโดยไม่ต้องกังวลและฉันสงสัยว่าปัญหาอาจเกี่ยวข้องกับรุ่นของเซิร์ฟเวอร์ที่เกี่ยวข้อง เราไม่จำเป็นต้องใช้นักแสดงนี้ แต่มันรู้สึกสะอาดขึ้น ตอนนี้ฉันแค่อยากรู้ว่าทำไมสิ่งนี้เกิดขึ้น รุ่นเซิร์ฟเวอร์ (ที่มา): Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 14 พฤษภาคม …

5
SQL Server ไม่เริ่มทำงานเมื่อเริ่มต้น Windows แต่เริ่มต้นด้วยตนเอง
บริการของ SQL Server (SQL Server 2008 R2 Express) ของอินสแตนซ์ของฉันมีประเภทการเริ่มต้น = อัตโนมัติ สองสามครั้งที่ผ่านมาฉันรีสตาร์ทคอมพิวเตอร์ของฉันบริการล้มเหลวในการเริ่มต้นด้วยตัวเอง แต่มันก็เริ่มต้นได้ดีเมื่อฉันเริ่มบริการด้วยตนเอง ตัวแสดงเหตุการณ์แสดงว่าบริการไม่สามารถเริ่มทำงานได้เนื่องจากการหมดเวลาเชื่อมต่อ มี 2 ​​รายการที่เกี่ยวข้องกับการหมดเวลานี้: รายการที่ 1 หมดเวลาถึง (30000 มิลลิวินาที) ในขณะที่รอบริการ SQL Server (SQLEXPRESS) เพื่อเชื่อมต่อ รายการที่ 2 บริการ SQL Server (SQLEXPRESS) ล้มเหลวในการเริ่มต้นเนื่องจากข้อผิดพลาดต่อไปนี้: บริการไม่ตอบสนองต่อการร้องขอการเริ่มต้นหรือการควบคุมในเวลาที่เหมาะสม ฉันตรวจสอบไฟล์ ERRORLOG และไม่มีข้อผิดพลาดในการบันทึกเวลาของรายการ Event Viewer เหล่านั้น ความคิดเห็นใด ๆ เกี่ยวกับสาเหตุของปัญหานี้หรือฉันจะตรวจสอบเพิ่มเติมได้อย่างไร

1
ค้นหาแบบสอบถามทั้งหมดที่ดำเนินการเมื่อเร็ว ๆ นี้ในฐานข้อมูล
[ฉันเป็นโปรแกรมเมอร์ T-SQL ระดับเริ่มต้น] [.. และหวังว่าฉันจะอยู่ในไซต์แลกเปลี่ยนสแต็คที่เหมาะสม] ฉันต้องการรับรายการคำถามทั้งหมดที่ฉันดำเนินการ (อย่างน้อยที่สุดคำถามที่ฉันดำเนินการตั้งแต่เช้า) ฉันต้องการรายงานเกี่ยวกับเวลาดำเนินการของแบบสอบถาม การค้นหาออนไลน์ไม่ได้ให้ข้อมูลที่มีประโยชน์กับฉันมากนัก ข้อความค้นหาเดียวที่ฉันพบทางออนไลน์ซึ่งดูเหมือนว่าใกล้เคียงกันมาก SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest ORDER BY deqs.last_execution_time DESC ข้อความค้นหานี้ส่งกลับผลลัพธ์แปลก ๆ (ส่วนใหญ่เป็นกลุ่มของ sprocs) ยิ่งกว่านั้นผลลัพธ์ทั้งหมดเหล่านี้แสดงข้อความค้นหาที่ดำเนินการตั้งแต่บ่ายวันนี้ (ฉันต้องการข้อความค้นหาตั้งแต่เช้า) ฉันไม่พบสิ่งใดในคำถามก่อนหน้า (หากคำถามที่คล้ายกันได้ถูกถามไปแล้วโปรดชี้ให้ฉันเห็น) ฉันเห็นคำแนะนำบางอย่างเกี่ยวกับ SQL Profiler แต่ฉันเดาว่า Profiler จะช่วยฉันเฉพาะเมื่อฉันเริ่มต้นการติดตามแล้ว (แก้ไขฉันถ้าฉันผิด) ใครช่วยแนะนำฉันว่าฉันควรจะได้รับรายการของแบบสอบถามทั้งหมดที่มีการดำเนินการในฐานข้อมูลตั้งแต่เช้า (รวมถึงเวลาดำเนินการแบบสอบถาม) .. [มันจะมีประโยชน์ (ไม่ใช่ข้อกำหนด) …

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