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

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

3
เป็นไปได้หรือไม่ที่จะเลือก RAISERROR หรือ THROW ขึ้นอยู่กับรุ่นของ SQL Server
นี่คือรหัสของฉันตอนนี้: BEGIN TRY INSERT INTO TABLE (F1,F2,F3) VALUES ('1','2','3') END TRY BEGIN CATCH ;THROW END CATCH ใช้งานได้ดีเว้นแต่ว่ามันจะทำงานบนเครื่องที่มี SQL 2008 ฉันต้องการให้ CATCH block ทำการตรวจสอบกับเวอร์ชันของ SQL และเรียกใช้ THROW ถ้ามันเท่ากับหรือสูงกว่าถึง 2012 และ RAISERROR ถ้าเป็น 2008 ฉันจะทำงานต่อไป ข้อผิดพลาดทางไวยากรณ์และฉันสงสัยว่ามันเป็นไปได้ แม้แต่สิ่งที่เรียบง่ายเช่นนี้ก็ไม่ได้ผลสำหรับฉัน BEGIN CATCH IF ((SELECT SERVERPROPERTY('productversion')) >= 11) ;THROW END CATCH คำแนะนำใด ๆ ที่ชื่นชม

2
SQL Server - คอลัมน์ NTEXT และการจัดการสตริง
ฉันมีตารางที่มีNTEXTคอลัมน์ชื่อcommentsหนึ่ง ฉันมีสตริงที่สองขอเรียกว่าanothercomment(กvarchar) ที่ความต้องการวางภายในที่กำหนดสตริงหลังคำว่าcommentsUPDATEHERE กำลังส่งเพื่อnvarchar(max)ตัดทอนcommentsสตริงดังนั้นฉันจึงไม่สามารถใช้ไลค์ของCHARINDEX()( Msg 8152, Level 16, State 10, Line 2 String or binary data would be truncated.). ฉันเคยdatalength()ตรวจสอบว่ามีคอลัมน์สองสามพันคอลัมน์ที่มี> 8000 ตัวอักษร ตัวอย่างของสิ่งที่ฉันต้องการบรรลุ (แม้ว่าจะมีสตริงที่ยาวกว่า): ความคิดเห็น - This is a test UPDATEHERE This is the end of the test ความคิดเห็นอื่น - . This is inserted. สตริงผลลัพธ์ - This is a test …

1
ไม่ใช้ดัชนี SEEK เว้นแต่ OPTION (RECOMPILE)?
(คำถามย้ายจาก SO) ฉันมีตาราง (ข้อมูลหุ่น) ที่มีดัชนีคลัสเตอร์ประกอบด้วย 2 คอลัมน์: ตอนนี้ฉันเรียกใช้แบบสอบถามทั้งสองนี้: declare @productid int =1 , @priceid int = 1 SELECT productid, t.priceID FROM Transactions AS t WHERE (productID = @productid OR @productid IS NULL) AND (priceid = @priceid OR @priceid IS NULL) SELECT productid, t.priceID FROM Transactions AS t WHERE (productID = …

2
เหตุผลที่ดีในการใช้ SELECT ... ด้วย XLOCK
ฉันกำลังเผชิญหน้ากับการหยุดชะงักที่เกิดขึ้นอีกครั้งหนึ่งในนั้นคือ Keylock และมีการสืบค้น SELECT พร้อมคำใบ้ XLOCK ที่กลายเป็นเหยื่อการหยุดชะงัก คำสั่งอื่น ๆ คือการแทรกลงในหนึ่งในตารางที่เป็นส่วนหนึ่งของมุมมองของแบบสอบถามแรก ดู: create view dbo.viewE as select * from dbo.E where myValue > 13000 เลือกคำค้นหา: select * from dbo.viewE with (XLOCK) where A > GETUTCDATE() คำสั่ง INSERT: INSERT INTO [dbo].[E] (myValue,A) VALUES (10,GetDate()) ตารางต้นแบบ dbo.E มีพื้นที่ประมาณ 3 ล้านแถวในประมาณ 20 คอลัมน์บางส่วนเป็น ntext …

5
การใช้เครื่องมือของบุคคลที่สามเพื่อสำรองข้อมูล
มีข้อดีใดบ้างที่จะใช้เครื่องมือของบุคคลที่สามในการสำรองข้อมูล ฉันไม่ได้อ้างถึงอย่างใดอย่างหนึ่ง แต่ฉันต้องการที่จะรู้ว่าถ้ามีคนใช้พวกเขาไปยัง DB มากกว่า 200 GB เซิร์ฟเวอร์ส่วนใหญ่เป็น MSSQL 2008R2, Standard และ Enterprise Editions

1
การสร้างดัชนีบนตารางที่ยุ่งมาก
เรามีโต๊ะที่มีจำนวนมากinsert\selectทุกครั้ง (เช่น 100 เครื่องที่แทรกการอัพเดททุกวินาที) วิธีที่ดีที่สุดในการสร้างดัชนีบนตารางที่ไม่สามารถล็อคไม่ได้เป็นวินาทีคืออะไร? ถ้าฉันสร้างดัชนีฉันแน่ใจว่ามันจะล็อคคำขอและฉันทำไม่ได้ มันเป็นตารางขนาดใหญ่ที่มี 1 ล้านแถว +

2
การประมาณค่า SARG cardinality ทำไมไม่สแกนแบบเต็ม?
เหตุใดจึงไม่มีการสแกนเต็มรูปแบบ (ใน SQL 2008 R2 และ 2012) ข้อมูลการทดสอบ: DROP TABLE dbo.TestTable GO CREATE TABLE dbo.TestTable ( TestTableID INT IDENTITY PRIMARY KEY, VeryRandomText VarChar(50), VeryRandomText2 VarChar(50) ) Go Set NoCount ON Declare @i int Set @i = 0 While @i < 10000 Begin Insert Into dbo.TestTable(VeryRandomText, VeryRandomText2) Values(Cast(Rand()*10000000 as VarChar(50)), Cast(Rand()*10000000 …

1
ตรวจสอบรุ่นและรุ่นของ SQL Server จากการตั้งค่าที่มีอยู่ก่อนติดตั้งจริงหรือไม่
เรากำลังจะทำการปรับลดรุ่นจาก SQL Server 2008 R2 Enterprise เป็น Standard Edition เพื่อเริ่มกิจกรรมข้างต้นเรากำลังมองหา Standard Edition ของ SQL Server ที่มีอยู่ เราพบหนึ่ง แต่สับสนในจุดด้านล่าง: ไฟล์ติดตั้ง (บันทึกโดยสมาชิกในทีมก่อนหน้า) อยู่ในโฟลเดอร์ที่ระบุว่าเป็น SQL Server 2008 R2 แต่เพื่อข้ามการตรวจสอบก่อนที่เราจะเริ่มการติดตั้งเราผ่านไฟล์default.iniซึ่งระบุว่า: SQLSERVER2008 Configuration File [SQLSERVER2008] สิ่งนี้สร้างข้อสงสัยว่านี่เป็น SQL Server รุ่นที่ถูกต้องหรือไม่ ดังนั้นมีวิธีอื่นในกรณีที่กล่าวถึงวิธีการดังกล่าวไม่ถูกต้องเพื่อตรวจสอบรุ่นก่อนที่เราจริงไปข้างหน้าและลองติดตั้ง? เราสามารถตรวจสอบรุ่นของ SQL Server ที่มีอยู่ได้เพราะในการตั้งค่าเราแทบจะไม่สามารถทราบได้ว่าเป็น Standard Edition จริงหรือไม่ เราไม่สามารถดาวน์โหลดสื่อใหม่ตามนโยบายความปลอดภัยของเรา นอกจากนี้เราไม่มีสิทธิ์ในการดาวน์โหลด

3
การตรวจสอบนโยบายรหัสผ่านเกี่ยวกับผู้ใช้ที่มีอยู่
ฉันเพิ่งเข้ามาในสภาพแวดล้อมที่เข้าสู่ระบบฐานข้อมูลจำนวนมากไม่ได้enforce_password_policyเปิดใช้งานการตั้งค่าสถานะ การตรวจสอบที่กำลังจะมาถึงนั้นจำเป็นต้องทำการยืนยันรหัสผ่านของการเข้าสู่ระบบเหล่านี้ ฉันใช้แบบสอบถามต่อไปนี้เพื่อรับรายการการเข้าสู่ระบบและไม่ว่าธงจะเปิดหรือปิด select @@SERVERNAME as servername, name, IS_SRVROLEMEMBER('sysadmin', name) as SYSADMIN, type_desc, create_date, is_policy_checked, is_disabled, password_hash, PWDCOMPARE(name, password_hash) as UsernameAsPassword FROM sys.sql_logins อย่างไรก็ตามสิ่งนี้ไม่ได้บอกฉันว่ารหัสผ่านนั้นเป็นไปตามนโยบายรหัสผ่านจริงหรือไม่เนื่องจากการตั้งค่าสถานะนั้นเกี่ยวข้องเฉพาะเมื่อสร้างผู้ใช้ มีวิธีรู้จักทดสอบผู้ใช้ปัจจุบันสำหรับการปฏิบัติตามนโยบายรหัสผ่านหรือไม่ ฉันไม่สามารถเข้าถึงรหัสผ่านเก่าได้และฉันต้องการวิธีที่ไม่ต้องการรหัสผ่าน

1
PAGELATCH_ สูงและรอ WRITELOG พวกเขาเกี่ยวข้องกันไหม
เราเห็นประเภทรอ PAGELATCH_EX และ PAGELATCH_SH สูงมากพร้อมกับรอ WRITELOG สูง ฉันได้วินิจฉัยแบบสอบถามที่ทำให้ PAGELATCH รอและสามารถกำจัดได้โดยลดอัตราการแทรกลงในคีย์หลักที่ทำคลัสเตอร์ไม่ว่างที่กำหนดด้วยค่าตัวตน ฉันเข้าใจว่าปรากฏการณ์นี้เป็นที่รู้จักกันในหน้าสุดท้ายแทรก latch contention อย่างไรก็ตามคำถามของฉันคือเมื่อมีการแทรกระเบียนใหม่ SQL Server จะใช้ PAGELATCH_EX แบบเอกสิทธิ์เฉพาะบุคคลบนหน้าบัฟเฟอร์แทรกระเบียนไปยังหน้าบัฟเฟอร์เขียนระเบียนลงในบันทึกธุรกรรมและจากนั้นปล่อย PAGELATCH_EX แบบละเอียดโดยละเอียดhttps: // www.microsoft.com/en-ie/download/details.aspx?id=26665หน้า 24 หรือเขียนบันทึกลงในบันทึกการทำธุรกรรมครั้งแรกก่อนที่จะใช้ PAGELATCH_EX โดยมีรายละเอียดว่า "การแก้ปัญหา PAGELATCH การแก้ปัญหาบนเวิร์กโหลด INSERT" ข้อมูลความเป็นมาSQLCAT's Guide to: Relational Engine หากบันทึกถูกเขียนเพื่อเข้าสู่ระบบนอกกลไกการล็อคแล้วฉันสามารถออกกฎเขียนช้าลงในดิสก์เป็นสาเหตุของ PAGELATCH สูงรอ แต่ถ้าสลักถูกเก็บไว้จนกว่าบันทึกจะแข็งขึ้นเพื่อเข้าสู่ระบบฉันควรพิจารณา WRITELOG นอกจากนี้การมีดัชนีที่ไม่ทำคลัสเตอร์หลายรายการจะทำให้ PAGELATCH_ * latch จัดขึ้นอีกต่อไปเช่นหากตารางมีดัชนีที่ทำคลัสเตอร์และหลายดัชนีที่ไม่ได้ทำคลัสเตอร์นั้นจะเพิ่มและปล่อยไปยังหน้าบัฟเฟอร์ดัชนีแต่ละหน้าพร้อมกันหรือไม่ อัปเดต 1 หลังจากอ่านconfio-sql-server-writelog-waitเลื่อนสองและสถาปัตยกรรม WAL …

2
ขั้นตอนงาน SQL ทำงานเป็นบัญชี sql ที่แตกต่างกัน
ฉันอยากรู้วิธีตั้งค่าขั้นตอนงาน SQL เพื่อดำเนินการเป็นบัญชีเข้าสู่ระบบ SQL อื่น ดูเหมือนว่าฉันจะต้องตั้งค่าบัญชีพร็อกซีใหม่ซึ่งต้องใช้ข้อมูลรับรองที่มีอยู่ เมื่อฉันสร้างข้อมูลรับรองตัวเลือกเดียวของฉันคือการใช้ข้อมูลรับรองเข้าสู่ระบบ Windows งานที่ฉันพยายามเรียกใช้อยู่ด้านล่าง มีคำสั่งเพิ่มเติมอื่น ๆ แต่เมื่อฉันตั้งค่าขั้นตอนงานให้ทำงานเป็นล็อกอิน SQL มันล้มเหลว insert into [dbo].[TableA] SELECT ss.[Ref_ID] ,mm.[studentID] ,mm.[studentPersonID] ,mm.[studentFirstname] FROM [dbo].[TableB] mm left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID where ss.Ref_ID is not null; เมื่อสิ่งนี้ถูกเรียกใช้ผ่าน SQL Job Step มันจะล้มเหลว Executed as user: an_admin_account. …

3
มีวิธีหาใครเปลี่ยนรหัสผ่านสำหรับการเข้าสู่ระบบหรือไม่?
ฉันพยายามค้นหาว่าใครเปลี่ยนรหัสผ่านสำหรับการเข้าสู่ระบบใน SQL Server 2008 R2 ฉันได้ตรวจสอบการติดตามเริ่มต้นแล้วและไม่ได้บันทึกเหตุการณ์นั้น การติดตามเริ่มต้นจะรวมถึงเหตุการณ์ที่เกี่ยวข้องกับความปลอดภัย: /* Audit Add DB user event Audit Add login to server role event Audit Add Member to DB role event Audit Add Role event Audit Add login event Audit Backup/Restore event Audit Change Database owner Audit DBCC event Audit Database Scope GDR event …

3
ดัชนีหนึ่งหรือสอง
ฉันสร้างดัชนีต่อไปนี้บนตารางในฐานข้อมูลของฉัน: CREATE INDEX [idx_index1] on [table1] (col1, col2, col3) เซิร์ฟเวอร์กำลังแนะนำดัชนี 'ขาดหายไป' ต่อไปนี้: CREATE INDEX [idx_index2] on [table1] (col1, col2) INCLUDE (col3, col4, col5, col6....) ดูเหมือนว่าฉันมีเหตุผลที่จะแก้ไขคำจำกัดความดัชนีที่มีอยู่เพื่อรวมคอลัมน์ที่แนะนำแทนที่จะสร้างดัชนีใหม่ที่ต้องได้รับการบำรุงรักษา แบบสอบถามที่เลือกบน col1 และ col2 สามารถใช้ index1 ได้อย่างมีประสิทธิภาพเท่ากับ index2 ฉันถูกต้องหรือว่าฉันขาดอะไรไป

3
ข้อกำหนดหน่วยความจำทั่วไปสำหรับ sql server 2008 r2
ฉันไม่ได้มีประสบการณ์กับงาน DBA แต่ฉันพยายามทำกรณีขอทรัพยากรเพิ่มเติมสำหรับเซิร์ฟเวอร์ sql ของเราและหวังว่าฉันจะได้คนฉลาด ๆ มาเสนอการประมาณคร่าวๆของสิ่งที่เราควรใช้ ฉันสงสัยว่าการจัดสรรทรัพยากรไอทีให้กับเซิร์ฟเวอร์ sql ที่ใช้งานจริงของเราอยู่ในระดับต่ำ ฮาร์ดแวร์และซอฟต์แวร์: ฐานข้อมูล: sql server 2008 r2 ฐานข้อมูลองค์กร Windows: Windows 2008 r2 Enterprise 64 บิตค่อนข้างแน่ใจว่าทำงานบน VMware หน่วยประมวลผล: Intel (R) Xeon (R) CPU E7-4860 @ 2.27GHz 2.26 GHz (โปรเซสเซอร์ 2 ตัว) หน่วยความจำที่ติดตั้ง: 4GB ฮาร์ดไดรฟ์สำหรับไฟล์ฐานข้อมูล: 300GB ฮาร์ดไดรฟ์สำหรับการสำรองข้อมูล: 150GB ฮาร์ดไดรฟ์สำหรับบันทึก: 100GB การประยุกต์ใช้: เรามีฐานข้อมูลหลัก 3 …

5
การตั้งค่าหน่วยความจำสูงสุดใน SQL Server
ฉันใช้ SQL Server 2008 และแอปพลิเคชันบนเว็บบนเซิร์ฟเวอร์เฉพาะเครื่องเดียวมีหน่วยความจำเพียง 2Gb เท่านั้น ตามที่ระบุไว้ที่อื่น SQL Server ใช้หน่วยความจำกายภาพสูงสุดถึง 98% เป็นประจำซึ่งดูเหมือนจะทำให้เว็บแอพพลิเคชันทำงานช้าลงบนเซิร์ฟเวอร์ ในคุณสมบัติเซิร์ฟเวอร์ใน SSMS ภายใต้หน่วยความจำหน่วยความจำเซิร์ฟเวอร์สูงสุด (เป็น Mb) ถูกตั้งค่าเป็น: 2147483647 คำถามของฉันคือจำนวนที่แนะนำที่จะใส่ในกล่องหน่วยความจำเซิร์ฟเวอร์สูงสุดตามจำนวนหน่วยความจำที่ฉันมีอยู่และเซิร์ฟเวอร์เดียวกันก็ใช้งานเว็บแอปพลิเคชันด้วยหรือไม่ นอกจากนี้การเปลี่ยนหมายเลขนี้เป็นเรื่องที่ปลอดภัยหรือไม่ในขณะที่ SQL Server กำลังทำงานอยู่ ขอบคุณสำหรับคำแนะนำ.

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