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

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

1
DBCC CHECKDB ยิงทุก 20 - 60 วินาที
ฉันมีสภาพแวดล้อมแบบ dev ที่กำลังนำไปใช้งานอย่างรวดเร็วในการผลิตและสังเกตเห็นในบันทึกที่ประมาณทุกๆ 20 วินาทีที่ฉันเห็นข้อความ: Starting up database 'dbname' CHECKDB for database 'dbname' finished without errors ฉันสังเกตเห็นสิ่งนี้เพราะผู้ใช้ปลายทางที่ทำการทดสอบนี้มีปัญหาซึ่งฉันแยกเป็นข้อผิดพลาดที่ฉันสังเกตเห็นในบันทึกเหตุการณ์ Windows (แอปพลิเคชันบันทึก): The log for database 'dbname' is not available. Check event log for related messages. บังเอิญฉันไม่พบข้อความที่เกี่ยวข้อง แต่แก้ไขด้วยรอบออฟไลน์ / ออนไลน์ สิ่งเดียวที่ฉันคิดได้ก็คือแอปพลิเคชันนี้รวบรวมข้อมูลทุก ๆ 1 มิลลิวินาที แต่ข้อมูลทั้งหมดนี้ไม่ได้ถูกแทรกลงในฐานข้อมูล เป็นเซิร์ฟเวอร์ dev มันถูกกำหนดค่าเพื่อให้บันทึกและข้อมูลอยู่ในไดรฟ์เดียวกัน ด้วยข้อมูลสองส่วนนี้ฉันจึงเชื่อว่านี่เป็นปัญหา IO และเซิร์ฟเวอร์พยายามกู้คืนจากการขาดการเชื่อมต่อกับที่เก็บข้อมูล (SAN) แต่ถึงอย่างนี้ก็ไม่สมเหตุสมผลสำหรับฉันเพราะมันไม่ได้สูญเสีย …

3
มันจะถือว่าเป็นแนวปฏิบัติที่ไม่ดีที่จะมี FK แบบ nullable หลายรายการบนตารางใน SQL Server หรือไม่
ในโครงสร้างฐานข้อมูลของฉันใน SQL Server ฉันมีผลิตภัณฑ์ 3 ประเภทที่ต้องการข้อมูลที่แตกต่างกันเกี่ยวกับการสั่งซื้อ ดังนั้นฉันสร้างหนึ่งของตารางและสามตารางการสั่งซื้อที่แตกต่างกัน:Customers , , ตารางคำสั่งซื้อทั้งหมดมีความสัมพันธ์แบบหนึ่งต่อหลายบนโต๊ะOrdersForProductAsOrdersForProductBsOrdersForProductCsCustomers ฉันยังมีตารางอื่นที่Paymentsจะเก็บรายละเอียดการชำระเงินไว้ข้างใน แต่ฉันมีข้อสงสัยเกี่ยวกับวิธีการจัดโครงสร้างที่นี่ เนื่องจากฉันมีผลิตภัณฑ์หลายประเภทและลูกค้าอาจมีคำสั่งซื้อหลายผลิตภัณฑ์ในเวลาเดียวกันฉันจึงต้องเชื่อมโยงตารางคำสั่งซื้อทั้งสามนั้นเข้ากับPaymentsตาราง ปัญหาอื่นคือลูกค้าอาจมีคำสั่งซื้อผลิตภัณฑ์เพียงประเภทเดียว ดังนั้นคอลัมน์ FK ในตารางจะต้องมีการPaymentsnullable คำถามของฉันคือว่าnullableคอลัมน์ FK เหล่านั้นจะปวดหัวสำหรับฉันในระยะยาวหรือไม่? โดยทั่วไปแล้วจะถือว่าเป็นการปฏิบัติที่ไม่ดีที่จะมีคอลัมน์ FK ที่ไม่มีค่าว่างบนตารางหรือไม่

5
SQL Server 2008 ดัชนีข้อความแบบเต็มไม่เคยดูเหมือนจะเสร็จสมบูรณ์
เว็บไซต์ของเรามีฐานข้อมูล SQL Server 2008 R2 Express Edition พร้อมการจัดทำดัชนีข้อความแบบเต็มสำหรับการค้นหาเว็บไซต์ของเรา ทุกครั้งที่มีการเพิ่มหรืออัปเดตระเบียนใหม่ในหนึ่งในตารางที่จัดทำดัชนีกระบวนการจัดทำดัชนีจะไม่เสร็จ ฉันได้รับการตรวจสอบสถานะในช่วงหลายสัปดาห์ที่ผ่านมาโดยใช้ข้อความค้นหาเดียวกันบนเว็บไซต์นี้: http://www.sqlmonster.com/Uwe/Forum.aspx/sql-server-search/2155/Why-is-this -population สละให้ยาว นี่คือสิ่งที่ฉันเห็นเมื่อฉันเรียกใช้แบบสอบถาม (คลิกเพื่อดูขนาดเต็ม): ระเบียนใหม่ล่าสุดในตารางที่จัดทำดัชนีไม่สมบูรณ์และไม่สามารถค้นหาได้ แม้ว่าจะมีข้อมูลไม่มากในตารางฉันรอวันเพื่อดูว่าการจัดทำดัชนีเสร็จสมบูรณ์ แต่ไม่มีอะไรเปลี่ยนแปลง วิธีเดียวที่ฉันสามารถทำให้การทำดัชนีเสร็จสมบูรณ์ได้คือการสร้างแคตตาล็อกใหม่หรือเพื่อดรอปและสร้างดัชนีทั้งหมดอีกครั้ง ทุกครั้งที่ฉันทำสิ่งนั้นปัญหาเดียวกันจะกลับมาอีกครั้งทันทีที่มีการเพิ่มสถิติใหม่ครั้งแรก นี่คือสถานะเซิร์ฟเวอร์ในกรณี: Quad-Core AMD Opteron 2.34GHz 4GB RAM Windows Server 2008 R2 Enterprise SP1 x64 SQL Server 2008 R2 Express Edition พร้อมบริการขั้นสูง x64

3
กลุ่มโฆษณาใดเข้าสู่ระบบผู้ใช้ของฉันเป็นของ?
ฉันไม่แน่ใจว่าฉันเลือกชื่อที่ถูกต้องสำหรับคำถามนี้หรือไม่ สิ่งที่ฉันเป็นจริงหลังจากได้รับผู้ใช้โฆษณา windows แต่ละฉันต้องการค้นหารายชื่อกลุ่มโฆษณา windows (เข้าสู่ระบบ) ที่มีการเข้าถึงฐานข้อมูลเฉพาะในเซิร์ฟเวอร์นี้ เมื่อฉันเรียกใช้แบบสอบถามต่อไปนี้ select name, principal_id, type, type_desc, default_schema_name, create_date, modify_date, owning_principal_id, sid, is_fixed_role from sys.database_principals ในเซิร์ฟเวอร์ของฉัน Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 17 มิถุนายน 2011 00:54:03 ลิขสิทธิ์ (c) Microsoft Corporation Standard Edition (64 บิต) บน Windows NT 6.1 (รุ่น 7601: Service …

11
วิธีค้นหาความแตกต่างของเนื้อหาระหว่าง 2 ตาราง SQL และสร้างข้อมูลให้ตรงกัน SQL
ฉันจะค้นหาความแตกต่างของข้อมูลระหว่างสองตารางที่มี schema ที่แน่นอนได้อย่างไรและจะสร้าง SQL การซิงโครไนซ์เพื่อให้ได้ผลลัพธ์สหภาพ (โดยไม่ซ้ำกัน) ได้อย่างไร นี่คือ 2 ตาราง: SOURCE01.dbo.Customers (31,022 rows) TARGET01.dbo.Customers (29,300 rows) สคีมาของแต่ละตารางคือ: [CustomerId] : nvarchar(255) [CustomerSerializedProfile]: nvarchar(max) [CreatedDatetime] : DateTime

4
วิธีที่รวดเร็วในการตรวจสอบสองตารางกับแต่ละอื่น ๆ
เรากำลังทำกระบวนการ ETL เมื่อทุกคนพูดและทำมีกลุ่มของตารางที่ควรจะเหมือนกัน เป็นวิธีที่เร็วที่สุดในการตรวจสอบว่าตารางเหล่านั้น (บนเซิร์ฟเวอร์ที่แตกต่างกันสอง) เป็นจริงเหมือนกัน ฉันกำลังพูดถึงสคีมาและข้อมูล ฉันสามารถแฮชบนโต๊ะเป็นตัวของตัวเองเหมือนที่ฉันจะสามารถใช้กับไฟล์แต่ละไฟล์หรือกลุ่มไฟล์ - เพื่อเปรียบเทียบไฟล์หนึ่งกับอีกไฟล์หนึ่ง เรามีการเปรียบเทียบข้อมูล Red-Gate แต่เนื่องจากตารางที่เป็นปัญหานั้นมีแถวนับล้านแถวฉันจึงต้องการบางสิ่งที่มีประสิทธิภาพมากกว่า วิธีการหนึ่งที่ชั่วช้าฉันนี้ใช้ความคิดสร้างสรรค์ของคำสั่งสหภาพ แต่ฉันต้องการสำรวจแนวคิดแฮชอีกเล็กน้อยหากเป็นไปได้ โพสต์คำตอบปรับปรุง สำหรับผู้เล่นในอนาคต ... นี่คือแนวทางที่แน่นอนที่ฉันได้รับ มันทำงานได้ดีเรากำลังทำทุกตารางในแต่ละฐานข้อมูล ขอบคุณคำตอบด้านล่างสำหรับชี้ฉันในทิศทางที่ถูกต้อง CREATE PROCEDURE [dbo].[usp_DatabaseValidation] @TableName varchar(50) AS BEGIN SET NOCOUNT ON; -- parameter = if no table name was passed do them all, otherwise just check the one -- create …

5
บันทึกผลลัพธ์เป็น CSV * ด้วย * ส่วนหัวใน SSMS
ด้วย SQL Server 2008 R2 เมื่อฉันบันทึกผลลัพธ์เป็น CSV ไม่มีส่วนหัว ฉันสามารถแก้ไขได้โดยการคัดลอกและวางกับ "คัดลอกด้วยส่วนหัว" หรือเพียงแค่คว้าส่วนหัวแล้ววางลงใน CSV ฯลฯ แต่มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่

5
การเติมข้อมูลที่หายไปตามค่าสิ้นเดือนก่อนหน้า
รับข้อมูลต่อไปนี้: create table #histories ( username varchar(10), account varchar(10), assigned date ); insert into #histories values ('PHIL','ACCOUNT1','2017-01-04'), ('PETER','ACCOUNT1','2017-01-15'), ('DAVE','ACCOUNT1','2017-03-04'), ('ANDY','ACCOUNT1','2017-05-06'), ('DAVE','ACCOUNT1','2017-05-07'), ('FRED','ACCOUNT1','2017-05-08'), ('JAMES','ACCOUNT1','2017-08-05'), ('DAVE','ACCOUNT2','2017-01-02'), ('PHIL','ACCOUNT2','2017-01-18'), ('JOSH','ACCOUNT2','2017-04-08'), ('JAMES','ACCOUNT2','2017-04-09'), ('DAVE','ACCOUNT2','2017-05-06'), ('PHIL','ACCOUNT2','2017-05-07') ; ... ซึ่งแสดงถึงเมื่อผู้ใช้ที่ได้รับมอบหมายให้กับบัญชี ฉันกำลังมองหาผู้ที่เป็นเจ้าของบัญชีที่กำหนดในวันสุดท้ายของแต่ละเดือน (วันที่ได้รับมอบหมายคือวันที่บัญชีโอนการเป็นเจ้าของ) โดยมีการสิ้นเดือนที่ขาดหายไป (อาจสร้างจากdatesตารางที่มีประโยชน์ที่ฉันมีอยู่) มีคอลัมน์ที่มีประโยชน์DateKey, DateและLastDayOfMonth[มารยาทของ @AaronBertrand]) 1 ผลลัพธ์ที่ต้องการคือ: PETER, ACCOUNT1, 2017-01-31 PETER, ACCOUNT1, 2017-02-28 DAVE, ACCOUNT1, 2017-03-31 …

3
ใช้ฟังก์ชั่น“ LEN” ในข้อ“ WHERE” ใน“ CREATE UNIQUE INDEX”
ฉันมีตารางนี้: CREATE TABLE Table01 (column01 nvarchar(100)); และฉันต้องการสร้างดัชนีที่ไม่ซ้ำในคอลัมน์ 01ด้วยเงื่อนไขนี้LEN (คอลัมน์ 01)> = 5 ฉันเหนื่อย: CREATE UNIQUE INDEX UIX_01 ON Table01(column01) WHERE LEN(column01) >= 5; ฉันได้: ส่วนคำสั่ง WHERE ของดัชนีที่กรองไม่ถูกต้อง 'UIX_01' บนโต๊ะ 'Table01' และ: ALTER TABLE Table01 ADD column01_length AS (LEN(column01)); CREATE UNIQUE INDEX UIX_01 ON Table01(column01) WHERE column01_length >= 5; ผลิต: ไม่สามารถสร้างดัชนีที่กรอง …

1
CREATE TABLE SomeSchema # TempTableName มีข้อบกพร่องหรือไม่
ทดสอบเตียงง่าย ๆ : USE tempdb; GO /* This DROP TABLE should not be necessary, since the DROP SCHEMA should drop the table if it is contained within the schema, as I'd expect it to be. */ IF COALESCE(OBJECT_ID('tempdb..#MyTempTable'), 0) <> 0 DROP TABLE #MyTempTable; IF EXISTS (SELECT 1 FROM sys.schemas …

4
คำนวณจำนวนการเข้าชมทั้งหมด
ฉันกำลังพยายามเขียนแบบสอบถามที่ฉันต้องคำนวณจำนวนการเข้าชมสำหรับลูกค้าโดยดูแลวันที่ทับซ้อนกัน สมมติว่าสำหรับวันที่เริ่มต้น itemID 2009 คือ 23 และวันที่สิ้นสุดคือ 26 ดังนั้นรายการ 20010 อยู่ระหว่างวันเหล่านี้เราจะไม่เพิ่มวันที่ซื้อนี้ไปยังจำนวนรวมของเรา ตัวอย่างสถานการณ์: Item ID Start Date End Date Number of days Number of days Candidate for visit count 20009 2015-01-23 2015-01-26 4 4 20010 2015-01-24 2015-01-24 1 0 20011 2015-01-23 2015-01-26 4 0 20012 2015-01-23 2015-01-27 5 1 20013 2015-01-23 …

1
ปัญหาในการสร้างธุรกรรมในแพ็คเกจ SSIS
ฉันกำลังทำงานกับแพ็คเกจที่ต้องใช้ธุรกรรม แต่ขณะนี้ฉันได้รับข้อผิดพลาดต่อไปนี้: SSIS package "CATS-Package.dtsx" starting. Information: 0x4004300A at Data Flow Task, SSIS.Pipeline: Validation phase is beginning. Information: 0x4001100A at CATS-Package: Starting distributed transaction for this container. Error: 0xC001401A at CATS-Package: The SSIS Runtime has failed to start the distributed transaction due to error 0x8004D01B "The Transaction Manager is not …

4
การรวบรวมข้อมูลจากตารางที่แตกต่างกันเป็นแบบฝึกหัดหรือไม่
พื้นหลัง ฉันเขียนรายงานขนาดใหญ่จำนวนมากและโดยทั่วไปแล้วรักษาฐานข้อมูลสุขภาพขนาดใหญ่ (เขียน SP, ฟังก์ชั่น, งาน, ฯลฯ ) สคีมาดั้งเดิมและซอฟต์แวร์ที่ใช้นั้นมาจากผู้จำหน่ายรายอื่นดังนั้นฉันจึงไม่สามารถเปลี่ยนแปลงโครงสร้างได้มากนัก มีบันทึกมากมายที่ต้องมีการติดตามเช่นห้องปฏิบัติการขั้นตอนวัคซีน ฯลฯ และพวกมันกระจัดกระจายไปทั่วโต๊ะหลายสิบแห่งซึ่งหลายแห่งถูกป่องและจัดทำดัชนีไม่ดี (ฉันสามารถแก้ไขปัญหานี้ได้บ้าง) ปัญหา ปัญหาคือเนื่องจากเรามีการควบคุม DB น้อยและเนื่องจากสามารถเปลี่ยนแปลงได้จากการอัพเดทหรือแพทช์ใด ๆ ทำให้การเขียนและการบำรุงรักษารายงานเหล่านี้ยากและน่าเบื่อโดยเฉพาะอย่างยิ่งเมื่อมีการทับซ้อนกันจำนวนมาก สิ่งที่ต้องทำคือแพทช์เดียวและฉันติดเขียนส่วนใหญ่ของรายงานโหล นอกจากนี้เคียวรีกลายเป็นสับสนและช้าลงเมื่อการรวมซ้อนเลือกและซ้อนกัน "ทางออก" ของฉัน แผนของฉันคือการเขียนระเบียนทั้งหมดเหล่านี้ลงในตาราง "catch-all" หนึ่งตารางและเขียนทริกเกอร์บนตารางดั้งเดิมเพื่อรักษาระเบียนในตารางรวมนี้ แน่นอนฉันต้องมั่นใจว่าตัวกระตุ้นของฉันยังคงอยู่หลังจากการอัพเดต แต่จะง่ายกว่ามากจากมุมมองการบำรุงรักษาและเพียงแค่อ้างอิงข้อมูล ตารางจะบางและยาวเก็บเฉพาะข้อมูลที่ต้องการเช่นนี้: CREATE TABLE dbo.HCM_Event_Log ( id INT IDENTITY, type_id INT NULL, orig_id VARCHAR(36) NULL, patient_id UNIQUEIDENTIFIER NOT NULL, visit_id UNIQUEIDENTIFIER NULL, lookup_id …

2
ช่วยด้วยแบบสอบถาม PIVOT
ฉันมีตารางที่มีโครงสร้างด้านล่าง: CREATE TABLE [dbo].[AUDIT_SCHEMA_VERSION]( [SCHEMA_VER_MAJOR] [int] NOT NULL, [SCHEMA_VER_MINOR] [int] NOT NULL, [SCHEMA_VER_SUB] [int] NOT NULL, [SCHEMA_VER_DATE] [datetime] NOT NULL, [SCHEMA_VER_REMARK] [varchar](250) NULL ); ข้อมูลตัวอย่างบางส่วน (ดูเหมือนจะมีปัญหากับ sqlfiddle .. ดังนั้นควรใส่ข้อมูลตัวอย่างบางส่วน): INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build') INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK]) …

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) ดูเหมือนว่าแบบสอบถามจะโหลดวัตถุสถิติที่แตกต่างกันทั้งหมด …

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