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

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

2
DDL_admin เทียบกับสิทธิ์ db_owner
ฉันเข้าร่วมโปรเจ็กต์ที่เกี่ยวข้องกับการลบและ จำกัด สิทธิ์ของผู้ใช้ฐานข้อมูลทั้งหมดในเซิร์ฟเวอร์ฟาร์มของเรา (ช่วงเวลาแห่งความสนุก) หนึ่งในสิทธิ์ที่ถูก จำกัด ในขณะนี้คือสิทธิ์ db_owner การอนุญาตนี้กำลังได้รับการตรวจสอบเป็นกรณี ๆ ไป แต่การเปลี่ยนแปลงทั่วไปคือการแทนที่สิทธิ์ db_owner ด้วยสิ่งต่อไปนี้: db_datareader db_datawriter db_ddladmin db_executor ฉันต้องการกำหนดความแตกต่างที่แน่นอนระหว่างสอง (เพื่อแจ้งลูกค้า) อย่างไรก็ตามเท่าที่ฉันสามารถบอกได้ความแตกต่างระหว่างสองควรเป็น: สิทธิ์ db_accessadmin สิทธิ์ db_backupoperator สิทธิ์ db_securityadmin ดังนั้นในผลกระทบที่พวกเขาจะสูญเสีย: [ALTER ANY USER] [CREATE SCHEMA] [BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT] [ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE] [DROP DATABASE] มีอะไรอีกบ้างที่ผู้ใช้จะหลวมเมื่อ db_owner ถูกแทนที่ด้วยสี่บทบาทข้างต้น? สิ่งนี้ให้บริการรักษาความปลอดภัยอย่างชาญฉลาดหรือไม่?

4
จะค้นหา SSISDB เพื่อค้นหาข้อผิดพลาดในแพ็คเกจได้อย่างไร
ฉันเคยเห็นคำถามนี้ SSIS 2012 - วิธีการสืบค้นแพคเกจที่รันอยู่ใน T-SQL ในปัจจุบัน? มันให้สคริปต์ต่อไปนี้กับฉัน: SELECT E.execution_id , E.folder_name , E.project_name , E.package_name , E.reference_id , E.reference_type , E.environment_folder_name , E.environment_name , E.project_lsn , E.executed_as_sid , E.executed_as_name , E.use32bitruntime , E.operation_type , E.created_time , E.object_type , E.object_id , E.status , E.start_time , E.end_time , E.caller_sid , E.caller_name …

5
การสำรองและคืนค่าฐานข้อมูลเซิร์ฟเวอร์ SQL 10-20 สู่สถานะ ~ แบบซิงโครนัส
ฉันต้องการสำรองฐานข้อมูล 10-20 SQL Server 2008 R2 ที่มีขนาดระหว่าง 10-50 GB ในขณะที่พวกเขาออนไลน์และใช้พร้อมกันโดยแอปองค์กรเดียว ฉันต้องการกู้คืนพวกเขากลับสู่สถานะที่ถูกซิงโครไนซ์กับฐานข้อมูลทั้งหมดเป็นส่วนใหญ่ วัตถุประสงค์คือเพื่อรวบรวมข้อมูลการผลิตสำหรับสภาพแวดล้อม QA / DEV ฉันต้องการอย่างยิ่งที่จะไม่เรียกใช้ฐานข้อมูลในการกู้คืนเต็มรูปแบบและมาพร้อมกับวิธีการสำรองข้อมูลที่ทุ่มเทให้กับการเก็บข้อมูลสำหรับสภาพแวดล้อม QA และยังคงเป็นอิสระจากกระบวนการสำรองข้อมูลหลักซึ่งไม่ได้อยู่ในการควบคุมของฉัน สำหรับลูกค้าของฉันจะใช้เวลา 1-2 ชั่วโมงในการเก็บสำรองข้อมูลทั้งหมด 20 ครั้งที่ ~ 30 GB ต่อครั้ง สิ่งนี้ทำให้การสำรองข้อมูลเต็มรูปแบบไม่สามารถยอมรับได้เนื่องจากฐานข้อมูลจะถูกซิงโครไนซ์มากเกินไปเมื่อทำงานในการกู้คืนอย่างง่าย ฉันกำลังมองหาความคิดที่ดีกว่าสิ่งเหล่านี้: IDEA 1: snapshot ระดับ SAN ของดิสก์ VM xcopy MDFs / LDF จากภาพรวม เมื่อไฟล์ที่คัดลอกถูกแนบไปกับอินสแตนซ์ของเซิร์ฟเวอร์ที่แตกต่างกันกระบวนการกู้คืนของมันควรจะสร้างฐานข้อมูลที่สอดคล้องกัน Googling เชื่อฉันว่านี่เป็นความคิดที่ดีอย่างน้อยเพราะฉันอาจได้รับ desync เทียบกับ master / msdb / …

2
ทำไมการประมาณแถวของ SQL Server จึงเปลี่ยนเมื่อฉันเพิ่มคำแนะนำการเข้าร่วม
ฉันมีแบบสอบถามที่รวมตารางไม่กี่ตารางและทำงานได้ไม่ดีนัก - การประมาณแถวเป็นวิธีปิด (1,000 ครั้ง) และมีการเลือกการเข้าร่วมลูปซ้อนกันทำให้เกิดการสแกนหลายตาราง รูปร่างของแบบสอบถามค่อนข้างตรงไปตรงมามีลักษณะดังนี้: SELECT t1.id FROM t1 INNER JOIN t2 ON t1.id = t2.t1_id LEFT OUTER JOIN t3 ON t2.id = t3.t2_id LEFT OUTER JOIN t4 ON t3.t4_id = t4.id WHERE t4.id = some_GUID เล่นรอบกับแบบสอบถามฉันสังเกตเห็นว่าเมื่อฉันบอกเป็นนัย ๆ ให้ใช้การรวม Merge สำหรับการรวมอย่างใดอย่างหนึ่งมันทำงานเร็วขึ้นหลายครั้ง สิ่งนี้ฉันสามารถเข้าใจได้ - การรวมการผสานเป็นตัวเลือกที่ดีกว่าสำหรับข้อมูลที่เข้าร่วม แต่ SQL Server ไม่คาดการณ์ว่าจะเลือก …

4
หน่วยความจำสูงสุดของ SQL Server, ไฟล์หน้า, ความเท่าเทียมระดับสูงสุด
คำถามสามข้อหวังว่าคุณอาจารย์ DBA แห่งจักรวาลสามารถตอบคำถาม: ฉันรู้ว่ามันเป็นวิธีปฏิบัติที่ดีที่สุดในการตั้งค่าหน่วยความจำสูงสุดของ SQL Server ดังนั้นหากเซิร์ฟเวอร์ที่มี RAM ขนาด 44 GB ได้ติดตั้ง SQL Server ไว้เราควรตั้งค่าหน่วยความจำสูงสุดของเซิร์ฟเวอร์ SQL ให้อยู่ที่ประมาณ 37GB แต่เราควรตั้งค่าอะไรถ้าบริการวิเคราะห์ SQL และบริการรายงานของ SQL ติดตั้งอยู่บนเซิร์ฟเวอร์เดียวกันกับ SQL Server ถ้าอย่างนั้นจะเป็นการดีกว่าถ้าตั้งค่าหน่วยความจำสูงสุดของ SQL Server เป็น 22GB RAM ดังนั้นการวิเคราะห์สามารถใช้ RAM ขนาด 22GB อื่นได้หรือไม่ บนเซิร์ฟเวอร์ที่ใช้ SQL Server พร้อม RAM ขนาด 44 GB วิธีปฏิบัติที่ดีที่สุดในการตั้งค่าขนาดไฟล์ของหน้าคืออะไร ฉันอ่าน Brent Ozar ( http://www.brentozar.com/archive/2014/06/sql-server-setup-checklist-free-ebook-download/ …

1
ข้อความค้นหาที่ผู้ใช้แบ่งปัน: ไดนามิก SQL กับ SQLCMD
ฉันต้องรีแฟคเตอร์และจัดทำเอกสารfoo.sqlแบบสอบถามจำนวนหนึ่งซึ่งจะใช้ร่วมกันโดยทีมสนับสนุนด้านเทคนิคของ DB (สำหรับการกำหนดค่าลูกค้าและสิ่งต่างๆเช่นนั้น) มีตั๋วหลายประเภทที่มาเป็นประจำที่ลูกค้าแต่ละรายมีเซิร์ฟเวอร์และฐานข้อมูลของตัวเอง แต่ไม่เช่นนั้นสคีมาจะเหมือนกันทั่วกระดาน กระบวนงานที่เก็บไว้ไม่ใช่ตัวเลือกในเวลาปัจจุบัน ฉันกำลังถกเถียงกันว่าจะใช้ไดนามิกหรือ SQLCMD ฉันไม่ได้ใช้อะไรมากมายเพราะฉันค่อนข้างใหม่ที่ SQL Server การสคริปต์ SQLCMD ฉันรู้สึกว่า "ดู" สะอาดกว่าสำหรับฉันและง่ายต่อการอ่านและเปลี่ยนแปลงการสืบค้นเล็กน้อยตามต้องการ แต่ยังบังคับให้ผู้ใช้เปิดใช้งานโหมด SQLCMD แบบไดนามิกนั้นยากกว่าเนื่องจากการเน้นไวยากรณ์เสียไปเนื่องจากการสืบค้นที่เขียนโดยใช้การจัดการสตริง สิ่งเหล่านี้กำลังถูกแก้ไขและรันโดยใช้ Management Studio 2012, SQL เวอร์ชัน 2008R2 อะไรคือข้อดี / ข้อเสียของวิธีใดวิธีหนึ่งหรือ SQL Server "วิธีปฏิบัติที่ดีที่สุด" บางวิธีในวิธีหนึ่งหรือวิธีอื่น เป็นหนึ่งในนั้น "ปลอดภัย" กว่าอีกหรือไม่ ตัวอย่างแบบไดนามิก: declare @ServerName varchar(50) = 'REDACTED'; declare @DatabaseName varchar(50) = 'REDACTED'; declare @OrderIdsSeparatedByCommas varchar(max) …

2
ทำไมฟังก์ชันอันทรงคุณค่าของสเกลาร์ต้องได้รับอนุญาตให้ดำเนินการแทนที่จะเลือก
ฉันสงสัยว่าเพราะเหตุใดสำหรับฟังก์ชันที่มีค่าสเกลาร์ฉันต้องให้ผู้ใช้ดำเนินการแทนที่จะเลือกเท่านั้น? ในขณะที่ฟังก์ชั่นที่มีคุณค่าของตารางนั้นใช้งานได้ดีโดยมีเพียงสิทธิ์อนุญาตหรือความdb_datareaderเป็นสมาชิกที่เลือกเท่านั้น เพื่อให้ชัดเจนยิ่งขึ้นนี่คือตัวอย่างของฉัน: ฉันต้องการผู้ใช้ที่ได้รับอนุญาตให้อ่านฐานข้อมูลเท่านั้น ดังนั้นฉันจึงสร้างผู้ใช้ที่เรียกว่าtestUserและให้การdb_datareaderเป็นสมาชิก fn_InlineTableแล้วฉันสร้างตารางมูลค่าฟังก์ชั่นที่เรียกว่า และทุกอย่างยอดเยี่ยม testUserรัน SQL นี้ตลอดทั้งวัน select * from dbo.fn_InlineTable fn_ScalarTestแล้วฉันต้องมีฟังก์ชั่นเกลาดังนั้นฉันสร้างฟังก์ชั่นที่เรียกว่าสเกลา testUserไม่สามารถรัน SQL นี้ Select dbo.fn_ScalarTest(1) ดีเข้าใจ: มันเป็นเพราะผมยังไม่ได้ให้ "testuser" fn_ScalarTestได้รับอนุญาตในการดำเนินการ คำถามของฉันคือ: ตามลิงค์นี้/programming/6150888/insert-update-delete-with-function-in-sql-serverซึ่งบอกว่าFUNCTIONไม่สามารถใช้เพื่อดำเนินการแก้ไขสถานะฐานข้อมูลได้ . ดังนั้นทำไมไม่ปล่อยให้ฟังก์ชั่นสเกลาร์ถูกใช้ด้วยสิทธิ์ "SELECT" แบบเดียวกันแทนที่จะเรียกใช้สิทธิ์ ??? ฉันหวังว่าคำถามของฉันจะสมเหตุสมผล ขอขอบคุณ.

2
ดัชนีในคอลัมน์ที่คำนวณแล้วยังไม่สามารถค้นหาได้
ฉันมีตารางเรียกว่ามีคอลัมน์คำนวณยังคงเรียกว่าAddress Hashkeyคอลัมน์นั้นถูกกำหนดไว้แล้ว แต่ไม่แม่นยำ มันมีดัชนีที่เป็นเอกลักษณ์ของมันที่ไม่สามารถหาได้ ถ้าฉันเรียกใช้แบบสอบถามนี้คืนคีย์หลัก: SELECT @ADDRESSID= ISNULL(AddressId,0) FROM dbo.[Address] WHERE HashKey = @HashKey ฉันได้รับแผนนี้: ถ้าฉันบังคับดัชนีฉันจะได้รับสิ่งนี้ยิ่งแย่ลง: ถ้าฉันพยายามและบังคับทั้งดัชนีและการค้นหาฉันได้รับข้อผิดพลาด: ตัวประมวลผลแบบสอบถามไม่สามารถสร้างแผนแบบสอบถามได้เนื่องจากคำแนะนำที่กำหนดไว้ในแบบสอบถามนี้ ส่งแบบสอบถามอีกครั้งโดยไม่ระบุคำแนะนำใด ๆ และไม่ใช้SET FORCEPLAN นี่เป็นเพียงเพราะมันไม่แม่นยำใช่ไหม ฉันคิดว่าไม่สำคัญว่ามันจะยังคงอยู่หรือไม่? มีวิธีทำให้ดัชนีนี้ค้นหาได้โดยไม่ทำให้คอลัมน์นี้ไม่คำนวณหรือไม่ ใครบ้างมีลิงค์ไปยังข้อมูลเกี่ยวกับเรื่องนี้? ฉันไม่สามารถโพสต์การสร้างตารางจริง แต่นี่เป็นตารางทดสอบที่มีปัญหาเดียวกัน: drop TABLE [dbo].[Test] CREATE TABLE [dbo].[Test] ( [test] [VARCHAR](100) NULL, [TestGeocode] [geography] NULL, [Hashkey] AS CAST( ( hashbytes ('SHA', ( RIGHT(REPLICATE(' ', …

4
ฉันจะแปลงคีย์ในรายงานการหยุดชะงักของ SQL Server เป็นค่าได้อย่างไร
ฉันมีรายงานการหยุดชะงักที่บอกฉันว่ามีข้อขัดแย้งเกี่ยวกับ waitresource = "KEY: 9: 72057632651542528 (543066506c7c)" และฉันเห็นสิ่งนี้: <keylock hobtid="72057632651542528" dbid="9" objectname="MyDatabase.MySchema.MyTable" indexname="MyPrimaryKeyIndex" id="locka8c6f4100" mode="X" associatedObjectId="72057632651542528"> ภายใน <resource-list> ฉันต้องการที่จะหาค่าที่แท้จริงสำหรับคีย์ (id = 12345 เป็นต้น) ฉันต้องใช้คำสั่ง SQL อะไรในการรับข้อมูลนั้น

1
sp_cursoropen และขนาน
ฉันพบปัญหาด้านประสิทธิภาพด้วยข้อความค้นหาที่ฉันไม่สามารถเข้าใจได้ ฉันดึงแบบสอบถามออกจากคำจำกัดความของเคอร์เซอร์ แบบสอบถามนี้ใช้เวลาไม่กี่วินาทีในการดำเนินการ SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N'IW') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT 'X' FROM PRODROUTE B WHERE ((B.DATAAREAID=N'IW') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157'))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N'GRIJZEN'))) AND NOT EXISTS (SELECT 'X' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N'IW') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND …

2
มีวิธีใดในการลด / ลดขนาด tempdb.mdf โดยไม่ต้องรีสตาร์ท SQL Server
มีความจำเป็นต้องรีสตาร์ท SQL Server หลังจากที่DBCC SHRINKFILEในtempdb.mdfหรือมีวิธีการอื่น ๆ เพื่อลดขนาดของtempdb.mdfโดยไม่ต้องรีสตาร์ท SQL Server? กรุณาช่วยตามที่ฉันต้องการสำหรับเซิร์ฟเวอร์ที่ใช้งานจริงและฉันหวังว่าจะลดขนาดลงโดยไม่ต้องหยุดทำงาน
15 sql-server 

1
อ่านแถวที่อัปเดตบางส่วนหรือไม่
สมมติว่าฉันมีสองแบบสอบถามทำงานในสองช่วงแยกกันใน SSMS: เซสชั่นแรก: UPDATE Person SET Name='Jonny', Surname='Cage' WHERE Id=42 เซสชั่นที่สอง: SELECT Name, Surname FROM Person WITH(NOLOCK) WHERE Id > 30 เป็นไปได้ไหมที่SELECTคำแถลงสามารถอ่านแถวที่มีการอัพเดตครึ่งหนึ่งได้เช่นเดียวกับName = 'Jonny'และSurname = 'Goody'? แบบสอบถามจะถูกดำเนินการเกือบจะพร้อมกันในเซสชันที่แยกต่างหาก

2
การค้นหารายการใบรับรองการเข้ารหัสสำหรับฐานข้อมูล
มีการใช้ใบรับรองใดในการเข้ารหัสแต่ละฐานข้อมูลในอินสแตนซ์ ฉันสามารถรับข้อมูลโดยใช้ข้อมูลต่อไปนี้ แต่ฉันจะเขียนแบบสอบถามได้อย่างไร USE master GO -- this provides the list of certificates SELECT * FROM sys.certificates -- this provides the list of databases (encryption_state = 3) is encrypted SELECT * FROM sys.dm_database_encryption_keys WHERE encryption_state = 3; ฉันสังเกตเห็นว่าคอลัมน์ sys.certifcates.thumbprint และ sys.dm_database_encryption_keys.encryptor_thumbprint มีข้อมูลเดียวกัน

2
ผลกระทบใดที่จะลดขนาดของคอลัมน์ varchar ที่มีต่อไฟล์ฐานข้อมูล
เรามีตารางจำนวนหนึ่งในฐานข้อมูลของเราที่มีVARCHAR(MAX)คอลัมน์ที่VARCHAR(500)(หรือบางสิ่งที่เล็กกว่ามาก) จะพอเพียง โดยธรรมชาติฉันต้องการทำความสะอาดสิ่งเหล่านี้และทำให้ขนาดลงไปถึงระดับที่สมเหตุสมผลยิ่งขึ้น 'วิธีการ' ที่จะทำสิ่งนี้ฉันเข้าใจ: คำถามของฉันคือสิ่งที่จะแก้ไขคอลัมน์เหล่านี้ทำในหน้าและที่มีอยู่ในดิสก์? (มีข้อมูลมากมายเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณขยายคอลัมน์ แต่มีปัญหาในการค้นหาข้อมูลเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณย่อขนาด) ตารางบางตัวมีจำนวนแถวน้อยมากดังนั้นฉันจึงไม่กังวลเกี่ยวกับค่าใช้จ่ายในการเปลี่ยนแปลง แต่บางตารางมีขนาดค่อนข้างใหญ่และฉันกังวลว่าอาจมีการจัดระเบียบใหม่และทำให้การบล็อก / การหยุดทำงานเป็นจำนวนมาก ในทางปฏิบัติฉันต้องการวิธีประมาณหน้าต่างการบำรุงรักษา โดยทั่วไปฉันต้องการทำความเข้าใจให้ดีขึ้นว่าเอ็นจิ้นฐานข้อมูลทำงานอย่างไรในกรณีนี้ ขอบคุณล่วงหน้า! แก้ไข: ฉันมีตาราง 20 ตารางที่ฉันดู แต่มีเพียงครึ่งหนึ่งเท่านั้นที่มีจำนวนแถวมากกว่า 1,000 ใหญ่ที่สุดมีเกือบล้านแถว ผู้กระทำความผิดที่เลวร้ายที่สุดคือตารางที่มี 350,000 แถวและสี่VARCHAR(MAX)คอลัมน์ที่สามารถหดได้ถึงVARCHAR(500)ระดับ

1
เหตุใดผู้ดำเนินการรวมจึงใช้หลังจากการสแกนดัชนีที่ไม่ซ้ำ
ฉันมีตารางที่มีดัชนีที่ไม่ซ้ำซึ่งกรองแล้วสำหรับค่าที่ไม่เป็นโมฆะ ในแผนแบบสอบถามมีการใช้งานที่แตกต่างกัน มีเหตุผลสำหรับสิ่งนี้หรือไม่? USE tempdb CREATE TABLE T1( Id INT NOT NULL IDENTITY PRIMARY KEY ,F1 INT , F2 INT ) go CREATE UNIQUE NONCLUSTERED INDEX UK_T1 ON T1 (F1,F2) WHERE F1 IS NOT NULL AND F2 IS NOT NULL GO INSERT INTO T1(f1,F2) VALUES(1,1),(1,2),(2,1) SELECT DISTINCT F1,F2 FROM T1 …

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