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

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

2
การล่ม CLR บน SQL Server 2014 (windows 2012R2)
ฉันมี CLR ขนาดเล็กนี้ที่ทำหน้าที่ RegEX ในสตริงในคอลัมน์ เมื่อทำงานบน SQL Server 2014 (12.0.2000) บน Windows Server 2012R2 กระบวนการขัดข้อง ข่าวสารเกี่ยวกับ 0, ระดับ 11, สถานะ 0, บรรทัด 0 มีข้อผิดพลาดร้ายแรงเกิดขึ้นกับคำสั่งปัจจุบัน ควรยกเลิกผลลัพธ์หากมี และให้กองการถ่ายโอนข้อมูลถ้าฉันทำ select count (*) from table where (CLRREGEX,'Regex') แต่เมื่อฉันทำ select * from table where (CLRREGEX,'Regex') มันจะส่งคืนแถว ทำงานได้อย่างสมบูรณ์บน SQL Server รุ่นเดียวกับที่ทำงานบน Windows 8.1 ความคิดใด ๆ - …

1
สถิติเป็นข้อมูลล่าสุด แต่การประมาณการไม่ถูกต้อง
เมื่อฉันฉันจะdbcc show_statistics ('Reports_Documents', PK_Reports_Documents)ได้รับผลลัพธ์ต่อไปนี้สำหรับรหัสรายงาน 18698: สำหรับการค้นหานี้: SELECT * FROM Reports_Documents WHERE ReportID = 18698 option (recompile) ฉันได้รับแผนคิวรีที่ทำให้ดัชนีเป็นกลุ่มค้นหาPK_Reports_Documentsตามที่คาดไว้ แต่สิ่งที่ทำให้ฉันยุ่งเหยิงคือค่าที่ไม่ถูกต้องสำหรับจำนวนแถวโดยประมาณ: ตามนี้ : เมื่อแบบสอบถามตัวอย่างค่า WHERE อนุประโยคเท่ากับค่าฮิสโตแกรม RANGE_HI_KEY ค่า SQL Server จะใช้คอลัมน์ EQ_ROWS ในฮิสโตแกรมเพื่อกำหนดจำนวนแถวที่เท่ากับ นี่เป็นวิธีที่ฉันคาดหวังไว้ว่าจะเป็นอย่างไรก็ตามในชีวิตจริงดูเหมือนจะไม่เป็นเช่นนั้น ฉันยังลองRANGE_HI_KEYค่าอื่น ๆที่มีอยู่ในฮิสโตแกรมที่จัดทำโดยshow_statisticsและประสบการณ์เดียวกัน ปัญหานี้ในกรณีของฉันดูเหมือนว่าจะทำให้แบบสอบถามบางอย่างใช้แผนการดำเนินการที่ไม่เหมาะสมมากทำให้เวลาดำเนินการไม่กี่นาทีในขณะที่ฉันสามารถเรียกใช้ใน 1 วินาทีพร้อมคำใบ้แบบสอบถาม สรุป: มีคนอธิบายได้ไหมว่าทำไมEQ_ROWSไม่ใช้ฮิสโตแกรมมาคำนวณหาจำนวนแถวและการประมาณการที่ไม่ถูกต้องมาจากไหน ข้อมูลอีกเล็กน้อย (อาจมีประโยชน์): เปิดใช้งานการสร้างสถิติอัตโนมัติและสถิติทั้งหมดเป็นข้อมูลล่าสุด ตารางที่สอบถามมีประมาณ 80 ล้านแถว PK_Reports_Documentsเป็นการรวมกันของ PK ประกอบด้วยReportID INTและDocumentID CHAR(8) ดูเหมือนว่าแบบสอบถามจะโหลดวัตถุสถิติที่แตกต่างกันทั้งหมด …

1
บัญชีบริการ SQL Server สิทธิ์ Windows และสิทธิพิเศษ
คำถามของฉันคือถ้าคุณสร้างบัญชีผู้ใช้โดเมนใหม่สำหรับกระบวนการ SQL Server แต่ละกระบวนการควรตั้งค่าการอนุญาตใดสำหรับแต่ละบัญชี หรือผู้จัดการการกำหนดค่า SQL ดูแลเรื่องนี้จริง ๆ และฉันเพิ่งมีปัญหาที่ไม่คาดคิด? ฉันค่อนข้างบ่อยต้องติดตั้ง Microsoft SQL Server และสงสัยว่าใครสามารถให้คำแนะนำในการกำหนดค่าบัญชีที่ควรใช้บริการ IMO สิ่งนี้ได้รับการรับรองโดย Microsoft อย่างชัดเจนในขณะที่พวกเขาชี้คุณไปในทิศทางที่ถูกต้องฉันไม่สามารถหาตัวอย่างที่เป็นรูปธรรมได้ เพื่อสรุปสิ่งที่ฉันเห็น: สำหรับสภาพแวดล้อมการปรับใช้ \ development อย่างง่ายคุณสามารถใช้บัญชีเสมือนที่เป็นค่าเริ่มต้นที่โปรแกรมติดตั้งใช้: เช่น NT SERVICE\MSSQLSERVER หลีกเลี่ยงการใช้SYSTEMบัญชีนี้ไม่ปลอดภัย สำหรับการผลิตและในสภาพแวดล้อมของโดเมนขอแนะนำให้ใช้บัญชีบริการที่มีการจัดการหรือสร้างบัญชีผู้ใช้โดเมน (ไม่ใช่ผู้ดูแลระบบ) สำหรับแต่ละบริการ ถูกกล่าวหาว่าถ้าคุณใช้บัญชีโดเมนในเวลาติดตั้งโปรแกรมติดตั้งจะกำหนดสิทธิ์ที่จำเป็นสำหรับคุณ หากเปลี่ยนบัญชีบริการในการติดตั้งที่มีอยู่จากบัญชีเสมือนเป็นบัญชีโดเมนคำแนะนำคือการใช้ตัวจัดการการกำหนดค่าเซิร์ฟเวอร์ SQL เพื่อตั้งค่าบัญชีบริการใหม่ ที่ถูกกล่าวหาว่าจะตั้งค่าสิทธิ์ที่จำเป็นสำหรับคุณ ฉันเพิ่งลองเปลี่ยนบัญชีบริการในการติดตั้งที่มีอยู่เป็นบัญชีโดเมนและมันจะทำให้ฉันล้มเหลวในการเข้าสู่ระบบจนกว่าฉันจะได้รับอนุญาตบัญชีlog on as serviceซึ่งขัดแย้งกับส่วนที่ผู้จัดการการกำหนดค่า SQL Server จะกำหนดสิทธิ์ที่จำเป็น (แม้ว่าฉันไม่แน่ใจว่า GPO อาจรบกวนการตั้งค่านโยบายความปลอดภัยในพื้นที่นี้หรือไม่) Microsoft จัดทำรายการสิทธิ์ที่การตั้งค่าเซิร์ฟเวอร์ SQL มอบให้ในหน้านี้ แต่มันก็ไม่ชัดเจนสำหรับฉันถ้านั่นเป็นสิ่งที่ฉันควรทำด้วยตนเองสำหรับผู้ใช้ที่ฉันสร้างเพื่อเรียกใช้บริการหรือว่าการใช้ตัวจัดการการกำหนดค่า …

2
“ อัตราส่วนการเข้าแคชบัฟเฟอร์” ของ 9990 หมายถึงอะไร
ฉันได้รับข้อความค้นหานี้จากโพสต์บล็อก : SELECT object_name, counter_name, cntr_value FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Buffer Manager%' AND [counter_name] = 'Buffer cache hit ratio' โพสต์บอกว่าจะให้เปอร์เซ็นต์ของการเข้าชมแคช ดูเหมือนว่าจะระบุว่าจะมีค่า 0-100 (แสดงให้เห็นผลลัพธ์ที่ 87) แต่เมื่อฉันเรียกใช้ฉันได้รับตัวเลขที่สูงมาก นี่คือตัวอย่าง: object_name counter_name cntr_value SQLServer:Buffer Manager Buffer cache hit ratio 9990 หมายความว่า 99.90% หรือไม่ ถ้าไม่มันหมายความว่าอย่างไร และฉันจะได้รับมูลค่าที่แท้จริงได้อย่างไร หมายเหตุ: ฉันมีค่าต่ำสุด257และสูงถึง352363 ในกรณีที่มีความเกี่ยวข้องนี่คือสถิติเซิร์ฟเวอร์อื่น ๆ บางประการ: อายุขัยของหน้า: 145 หน้าอ่าน …

1
สาเหตุของปัญหานี้กับ CONVERT () คืออะไร
พิจารณาสองข้อความต่อไปนี้: PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0); PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0); ทั้งสองงบกลับ-1; ไม่ถูกต้องเนื่องจากค่าไบนารีที่สองเป็นทศนิยม 65,536 สูงกว่าค่าแรกใช่หรือไม่ แน่นอนสิ่งนี้ไม่สามารถเกิดขึ้นได้เนื่องจากการตัดทอนเงียบ ถ้าฉันเรียกใช้คำสั่งต่อไปนี้: PRINT CONVERT(NUMERIC(38, 0), 0x00000001, 0); PRINT CONVERT(NUMERIC(38, 0), 0x00010001, 0); ฉันพบข้อผิดพลาดต่อไปนี้: Msg 8114, Level 16, State 5, Line 1 Error converting data type varbinary to numeric. ฉันจะวินิจฉัยสิ่งที่เกิดขึ้นที่นี่ได้อย่างไร ฉันใช้สิ่งนี้ใน SQL Server 2012, v11.0.5058 ผลลัพธ์จะเหมือนกันใน …

4
SQL Server เคยลบไฟล์บันทึกข้อผิดพลาดเก่าหรือไม่?
ฉันรู้ว่าฉันสามารถวนรอบข้อผิดพลาดปัจจุบันได้อย่างง่ายดายโดยการเรียกใช้ sp_cycle_errorlog แต่ฉันสงสัยว่า SQL Server จะลบไฟล์บันทึกข้อผิดพลาดเก่า / ที่เก็บถาวรเลยหรือไม่ ดูเหมือนจะไม่สามารถหาคำตอบได้ทุกที่ ...

3
ฉันจะพิจารณาอย่างน่าเชื่อถือได้อย่างไรว่าอินสแตนซ์ของ SQL Server ที่ระบุมี“ ล็อกหน้าในหน่วยความจำ” ถูกต้องหรือไม่?
"ล็อคหน้าในหน่วยความจำ" ด้านขวาสามารถมอบให้กับบัญชีบริการที่ใช้โดย SQL Server สิ่งนี้ทำให้ SQL Server สามารถป้องกันหน่วยความจำเพจได้กับดิสก์ ฉันสังเกตเห็นว่าเครื่อง SQL Server ของเราหลายเครื่องไม่มีนโยบายภายในที่กำหนดค่าไว้ให้ใช้สิทธิ์นี้สำหรับบัญชีบริการที่ใช้โดย SQL Server เนื่องจากเรามีเซิร์ฟเวอร์จำนวนมากจึงน่าเบื่อที่สุดที่จะตรวจสอบแต่ละเซิร์ฟเวอร์ด้วยตนเองโดยใช้คอนโซลการจัดการ "นโยบายระบบท้องถิ่น" มีแบบสอบถาม T-SQL, ขยายกระบวนงานที่เก็บไว้หรือวิธีอื่น ๆ ที่ฉันสามารถใช้เพื่อตรวจสอบว่าเซิร์ฟเวอร์ในคำถามมีสิทธิหรือไม่? ฉันต้องการที่จะไม่ใช้EXEC xp_readerrorlog 0, 1, 'lock memory privilege was not granted';เพราะมันต้องอาศัยการตรวจสอบบันทึกข้อผิดพลาด SQL Server ปัจจุบัน และบันทึกข้อผิดพลาดนั้นอาจไม่มีรายการที่เกี่ยวข้องสมมติว่าบันทึกได้ถูกยกเลิกเนื่องจากเซิร์ฟเวอร์รีสตาร์ทครั้งล่าสุด ฉันรู้ว่าฉันสามารถตรวจสอบบันทึกเก่าโดยแก้ไขพารามิเตอร์แรกจาก0เป็น1ฯลฯ อย่างไรก็ตามเราเก็บบันทึกข้อผิดพลาดเพียง 10 รายการเท่านั้นและนั่นอาจไม่เพียงพอ ฉันต้องการวิธีที่ไม่ปลอดภัยในการยืนยันการตั้งค่า

1
การสลับข้อมูลล้มเหลวด้วย“ อนุญาตค่าที่ไม่ได้รับอนุญาตจากการตรวจสอบข้อ จำกัด หรือฟังก์ชั่นพาร์ติชันบนตารางเป้าหมาย”
รับดังต่อไปนี้ -- table ddl create table dbo.f_word( sentence_id int NULL, sentence_word_id int NULL, word_id int NULL, lemma_id int NULL, source_id int NULL, part_of_speech_id int NULL, person_id int NULL, gender_id int NULL, number_id int NULL, tense_id int NULL, voice_id int NULL, mood_id int NULL, case_id int NULL, degree_id int NULL, citation …

3
ตรวจสอบหรือ COMMIT เขียนลงดิสก์?
สมมติว่าสำหรับ SQLServer2008R2 และสูงกว่าพร้อมฐานข้อมูลโหมดการกู้คืนแบบเต็ม ฉันคิดเสมอ: เมื่อมีการทำธุรกรรม (COMMIT) ธุรกรรมนั้นจะถูกเขียนไปยังบันทึกธุรกรรมใน RAM เมื่อ CHECKPOINT เกิดขึ้น (หลังจากเวลาผ่านไปและ / หรือธุรกรรมบางอย่างและเกณฑ์อื่น ๆ ) ธุรกรรมระหว่าง CHECKPOINT ที่ผ่านมาและปัจจุบันจะถูกเขียนไปยังดิสก์ เมื่อบันทึกการสำรองข้อมูลเกิดขึ้นข้อมูลจะถูกเขียนไปยังไฟล์ MDF ฉันถูกไหม? เพื่อนร่วมงานของฉันบางคนบอกว่าฉันผิดและยากที่จะหาคำตอบที่ถูกต้องแม้กับ BOL ขอบคุณ!
12 sql-server 

2
การเขียนสคริปต์แผนการบำรุงรักษา
ฉันสร้างแผนการบำรุงรักษาสำหรับ SQL Server 2008 R2 โดยใช้ SQL Server Management Studio (SSMS) อย่างไรก็ตามฉันไม่สามารถส่งออก / แปลงเป็นสคริปต์ในกรณีที่ฉันต้องทำซ้ำบนเซิร์ฟเวอร์อื่น มีวิธีหรือไม่? ถ้าไม่มีจะมีวิธีใช้ SQL Server รุ่นใหม่กว่านี้ไหม

2
วิธีที่มีประสิทธิภาพในการเปรียบเทียบชุดข้อมูลขนาดใหญ่สองชุดใน SQL
ขณะนี้ฉันกำลังเปรียบเทียบชุดข้อมูลสองชุดที่มีStoreKey/ProductKeyชุดค่าผสมที่ไม่ซ้ำกัน ชุดข้อมูลชุดที่ 1 มีชุดค่าStoreKey/ProductKeyผสมที่ไม่ซ้ำกันสำหรับการขายระหว่างเริ่มมกราคม 2012 และสิ้นสุดพฤษภาคม 2014 (ผลลัพธ์ = 450K บรรทัด) ชุดข้อมูลที่ 2 มีชุดค่าStoreKey/ProductKeyผสมที่ไม่ซ้ำกันสำหรับการขายเริ่มต้นมิถุนายน 2014 จนถึงวันนี้ (ผลลัพธ์ = 190K บรรทัด) ฉันกำลังมองหาStoreKey/ProductKeyชุดค่าผสมที่อยู่ในชุดที่ 2 แต่ไม่ใช่ในชุดที่ 1 - คือผลิตภัณฑ์ใหม่ที่ขายตั้งแต่ต้นเดือนมิถุนายน จนถึงตอนนี้ฉันได้ทิ้งชุดข้อมูลสองชุดลงในตารางชั่วคราวสร้างดัชนีสำหรับทั้งสองตารางบนทั้งสองปุ่มแล้วใช้EXCEPTคำสั่งเพื่อค้นหารายการที่ไม่ซ้ำกัน วิธีที่มีประสิทธิภาพที่สุดในการเปรียบเทียบชุดข้อมูลขนาดใหญ่ดังกล่าวคืออะไร มีวิธีที่มีประสิทธิภาพมากกว่าในการทำการเปรียบเทียบขนาดใหญ่ประเภทนี้หรือไม่

1
อายุการใช้งานหน้า SQL Server 2012 รีเซ็ตเป็น 0 หลังจากนั้นประมาณ 50 วัน
ฉันสังเกตเห็นพฤติกรรมแปลก ๆ ในคลัสเตอร์ HA แบบ 2 เซิร์ฟเวอร์และฉันหวังว่าจะมีคนยืนยันความสงสัยของฉันหรืออาจมีคำอธิบายอื่น ๆ ... นี่คือการตั้งค่าของฉัน: การติดตั้ง SQL 2012 SP1 แบบ 2 เซิร์ฟเวอร์ SQL AlwaysOn HA เปิดใช้งานสำหรับฐานข้อมูลไม่กี่แห่ง ซีพียูคือ 2.4GHz, 4 คอร์ RAM คือ 34 GB (เป็นอินสแตนซ์ AWS ดังนั้นจึงเป็นเลขคี่) การใช้ทรัพยากรค่อนข้างต่ำ - เซิร์ฟเวอร์แต่ละเครื่องมีหน่วยความจำไม่เกิน 14+ GB และ SQL ไม่ได้ต่อยอดกับจำนวนหน่วยความจำที่ใช้ เวลาในการเข้าถึงดิสก์นั้นดี - ไม่ค่อยเกิน 15ms / อ่านหรือเขียน ฐานข้อมูลไม่ใหญ่ - 1 GB, …

9
ฉันจะลดความเสี่ยงในการแก้ไขฐานข้อมูลผิดโดยไม่ตั้งใจได้อย่างไร
ฉันเพิ่งเรียนรู้วิธีที่ยากที่จะตัดการเชื่อมต่อจากเซิร์ฟเวอร์ใน Object Explorer ไม่ได้หยุดคุณหลังจากนั้นในการดำเนินการหน้าต่างแบบสอบถามที่เปิดอยู่แล้วบนเซิร์ฟเวอร์นั้น สถานการณ์ของฉันเป็นเช่นนี้: ฉันมี SSMS หนึ่งอินสแตนซ์ที่ฉันใช้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ dev / staging และเซิร์ฟเวอร์ที่ใช้งานจริงของเรา ฉันต้องลบข้อมูลจำนวนมากบน dev ดังนั้นฉันจึงคิดว่าฉันควรปิดการเชื่อมต่อกับการผลิต แต่ฉันไม่ได้สนใจหน้าต่างแบบสอบถามที่ฉันใช้ (โชคดีที่เรามีการสำรองข้อมูลไว้เพียงไม่กี่ชั่วโมง) ฉันไม่ใช่คนแรกที่ทำลายข้อมูลการผลิตและฉันจะไม่ใช่คนสุดท้ายที่ฉันแน่ใจ ดังนั้นฉันกำลังมองหารายการตรวจสอบแนวทางปฏิบัติที่ดีที่สุด ฯลฯ ที่ช่วยให้คุณลดความเสี่ยงในการดำเนินการค้นหาในฐานข้อมูลผิด คุณเคยเกิดเหตุการณ์เช่นนี้กับคุณมาก่อนและคุณได้ปรับเวิร์กโฟลว์ของคุณเพื่อพยายามหลีกเลี่ยงปัญหานี้ได้อย่างไร
12 sql-server  ssms 

4
ฉันจะถ่ายโอนข้อมูลเข้าสู่ระบบจาก 2008R2 เป็น 2014 ด้วยรหัสผ่านได้อย่างไร
ฉันได้ลองTasks> Generate Scripts...และตั้งค่า 'การเข้าสู่ระบบสคริปต์' ในตัวเลือกการเขียนสคริปต์ขั้นสูง แต่ฉันได้รับสิ่งนี้ในผลลัพธ์: /* For security reasons the login is created disabled and with a random password. */ มีวิธีง่ายๆในการเขียนสคริปต์การเข้าสู่ระบบเหล่านี้ด้วยรหัสผ่านหรือวิธีอื่นในการถ่ายโอนการเข้าสู่ระบบจากอินสแตนซ์ 2008R2 เป็นอินสแตนซ์ 2014 หรือไม่?

1
สร้างดัชนี SQL Server 2008 R2 ล้มเหลวด้วยความรุนแรง 17
ในบางครั้งระหว่างการบำรุงรักษาดัชนีของเรางานจะล้มเหลวพร้อมกับข้อผิดพลาด SEV 17 ที่ไม่สามารถจัดสรรพื้นที่ได้เพียงพอสำหรับวัตถุที่สร้างใหม่ ฐานข้อมูลถูกจัดวางเช่น: Data_file1 PRIMARY 0 growth 0% free Max Size UNLIMITED Data_file2 PRIMARY 0 growth 0% free Max Size UNLIMITED Data_file3 PRIMARY 0 growth Less than 1% free Max Size UNLIMITED Data_file4 PRIMARY 250 MB growth Less than 1% free Max Size UNLIMITED โดยพื้นฐานแล้วไฟล์ข้อมูล 3 ใน 4 …

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