ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

1
นายหน้าบริการได้รับการสำรองข้อมูลตอนนี้ได้รับแล้ว แต่ดูเหมือนว่าจะไม่ได้รับการประมวลผล
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 4 ปีที่แล้ว มีปัญหากับการแจ้งเตือนกิจกรรม บนเครื่อง / ไดรฟ์ / ฐานข้อมูลที่ข้อความถูกส่งไปยัง (ตัวรับสัญญาณ) หมายถึงไดรฟ์เต็มเมื่อไม่มีใครค้นหาดังนั้นจึงถูกสำรองตลอดทั้งวัน ตอนนี้เราเพิ่มพื้นที่ว่างในไดรฟ์ก็ยอมรับข้อความในคิว แต่ดูเหมือนว่าจะไม่ประมวลผล - ไม่มีระเบียนใหม่แทรกแม้ว่าคิวจะมี 22 ล้านข้อความและเพิ่มขึ้น (!) เปิดใช้งานคิว IS: is_activation_enabled = 1 is_receive_enabled = 1 is_enqueue_enabled = 1 ฉันเห็น SP ที่เปิดใช้งานอยู่activation_procedureแต่เมื่อฉันดูSP_WHOISACTIVEฉันไม่เห็นผู้อ่านที่ใช้งานอยู่ ก่อนที่ฉันจะระเบิดออกอีกครั้งฉันทำอะไรผิด ฉันจะนำไปดำเนินการหรือล้างข้อความได้อย่างไร ขอบคุณล่วงหน้า. ปรับปรุง One thought - ตั้งแต่ฉันมีis_enqueue_enabledบางทีมันเก็บข้อความทั้งหมดจนกว่ามันจะสามารถประมวลผลได้ทั้งหมด? ถ้าเป็นเช่นนั้นฉันสามารถปิดเครื่องได้อย่างปลอดภัยหรือไม่ CREATE …

3
เหตุใดจึงใช้เวลาสูงสุด 30 วินาทีในการสร้างกลุ่มแถว CCI แบบง่าย
ฉันกำลังทำงานเกี่ยวกับการสาธิต CCIs เมื่อฉันสังเกตเห็นว่าเม็ดมีดบางรุ่นของฉันใช้เวลานานกว่าที่คาดหมาย คำจำกัดความของตารางที่จะทำซ้ำ: DROP TABLE IF EXISTS dbo.STG_1048576; CREATE TABLE dbo.STG_1048576 (ID BIGINT NOT NULL); INSERT INTO dbo.STG_1048576 SELECT TOP (1048576) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN FROM master..spt_values t1 CROSS JOIN master..spt_values t2; DROP TABLE IF EXISTS dbo.CCI_BIGINT; CREATE TABLE dbo.CCI_BIGINT (ID BIGINT NOT NULL, INDEX CCI …

1
กู้คืนฐานข้อมูลโดยใช้ GUI - ไฟล์ผิดเพื่อกู้คืน
ฉันแค่ล้อเล่นกับอินเทอร์เฟซกราฟิก SSMS และศึกษาตัวเลือกของงาน "กู้คืน" สิ่งหนึ่งที่ฉันสังเกตเห็นคือเมื่อฉันคลิกที่ "สร้างสคริปต์" บรรทัดแรกของแบบสอบถามคือ: RESTORE DATABASE [MyDatabase] FROM DISK = N'Server_Patch\Database_name_LOGSHIPPING.BKP' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5 ( and a lot of log backups for point in time ) ตกลงไม่มีปัญหา แต่ฉันกำลังสำรองข้อมูลรายวันของฐานข้อมูลนี้ นี่Database_name_LOGSHIPPING.BKPคือชื่อของไฟล์ที่ฉันสร้างไว้สำหรับบันทึกการจัดส่งเมื่อหนึ่งเดือนที่แล้ว ทำไมเมื่อฉันพยายามใช้อินเทอร์เฟซกราฟิก SSMS เพื่อคืนค่าการสำรองข้อมูลชี้ไปที่แฟ้มสำรองนี้ ฉันไม่ได้มีไฟล์นี้อีกต่อไป ด้วยแบบสอบถามนี้จาก MSSQLTIPS ฉันสามารถดูการสำรองข้อมูลทั้งหมดจากฐานข้อมูลนี้: SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, …

3
ข้อมูลขนาดใหญ่และประสิทธิภาพใน SQL Server
ฉันเขียนแอปพลิเคชันด้วยแบ็กเอนด์ SQL Server ที่รวบรวมและจัดเก็บและบันทึกจำนวนมาก ฉันได้คำนวณว่าที่จุดสูงสุดปริมาณการบันทึกโดยเฉลี่ยอยู่ที่ประมาณ 3-4 พันล้านต่อวัน (การดำเนินการ 20 ชั่วโมง) โซลูชันดั้งเดิมของฉัน (ก่อนที่ฉันจะทำการคำนวณข้อมูลจริง) เพื่อให้แอปพลิเคชันของฉันแทรกระเบียนลงในตารางเดียวกันที่ลูกค้าของฉันสอบถาม นั่นขัดข้องและถูกเผาอย่างรวดเร็วค่อนข้างชัดเจนเพราะเป็นไปไม่ได้ที่จะสืบค้นตารางที่มีการแทรกเรคคอร์ดจำนวนมาก โซลูชันที่สองของฉันคือการใช้ฐานข้อมูล 2 ฐานข้อมูลหนึ่งสำหรับข้อมูลที่ได้รับจากแอปพลิเคชันและอีกหนึ่งฐานข้อมูลสำหรับไคลเอ็นต์ที่พร้อมใช้งาน แอปพลิเคชันของฉันจะรับข้อมูลและแบ่งเป็นชุด ~ 100k เรคคอร์ดและแทรกจำนวนมากในตารางการจัดเตรียม หลังจาก ~ 100k บันทึกแอปพลิเคชันทันทีสร้างตารางการแสดงละครอีกด้วยสคีมาเหมือนก่อนหน้าและเริ่มแทรกลงในตารางนั้น มันจะสร้างเรกคอร์ดในตารางงานที่มีชื่อของตารางที่มีเรกคอร์ด 100k และกระบวนงานที่เก็บไว้ในฝั่ง SQL Server จะย้ายข้อมูลจากตาราง staging ไปยังตารางการผลิตที่ไคลเอ็นต์พร้อมแล้วปล่อย ตารางตารางชั่วคราวที่สร้างโดยแอปพลิเคชันของฉัน ฐานข้อมูลทั้งสองมีชุดตาราง 5 ชุดที่มีสคีมาเดียวกันยกเว้นฐานข้อมูลที่มีตารางงาน ฐานข้อมูลการจัดเตรียมไม่มีข้อ จำกัด ด้านความสมบูรณ์, คีย์, ดัชนี ฯลฯ ... บนตารางที่มีระเบียนจำนวนมากที่จะอยู่ SignalValues_stagingดังต่อไปนี้ชื่อตารางเป็น เป้าหมายคือเพื่อให้แอปพลิเคชันของฉันกระแทกข้อมูลลงใน SQL Server โดยเร็วที่สุด …

6
ประสิทธิภาพของ a = 0 และ b = 0 และ… z = 0 vs a + b + c + d = 0
นี่เป็นคำถามง่าย ๆ ที่ฉันไม่สามารถหาคำตอบได้ ในแง่ของประสิทธิภาพถ้าฉันมีWHEREประโยคเช่นa=0 and b=0 and ... z=0ฉันจะได้รับประสิทธิภาพใด ๆ หรือไม่ถ้าฉันเปลี่ยนเงื่อนไขนั้นด้วยa+b+...+z=0? กล่าวอีกนัยหนึ่งมีการเพิ่มประสิทธิภาพใด ๆ โดยการแทนที่ต่อไปนี้ Select * From MyTable Where A=0 and B=0 and C=0 and D=0... กับ Select * From MyTable Where A+B+C+D=0... ฉันรู้ว่ามันสามารถขึ้นอยู่กับดัชนีได้ แต่สำหรับจุดประสงค์นี้สมมุติว่าไม่มีดัชนีอยู่ ตัวดำเนินการทางคณิตศาสตร์ (+) ทำงานได้ดีกว่าตัวดำเนินการทางตรรกะ "OR" หรือ "AND" หรือไม่? ฉันอยู่ภายใต้การแสดงผลว่าการเพิ่มประสิทธิภาพนั้นดีกว่าหลายเงื่อนไขด้วย ANDs หรือ OR ผลการทดสอบ บนตาราง 4.2 ล้านแถว …

3
การใช้ชนิดย่อยของชนิดย่อยในรูปแบบการออกแบบชนิด / ชนิดย่อยที่มีคลาสย่อยเฉพาะซึ่งกันและกัน
บทนำ เพื่อให้คำถามนี้มีประโยชน์สำหรับผู้อ่านในอนาคตฉันจะใช้ตัวแบบข้อมูลทั่วไปเพื่อแสดงปัญหาที่ฉันเผชิญ รูปแบบข้อมูลของเราประกอบด้วย 3 หน่วยงานซึ่งจะต้องได้รับการระบุว่าเป็นA, และB Cเพื่อให้ทุกอย่างง่ายขึ้นคุณลักษณะทั้งหมดของพวกเขาจะเป็นintประเภท Entity Aมีแอตทริบิวต์ต่อไปนี้: D, EและX; Entity Bมีแอตทริบิวต์ต่อไปนี้: D, EและY; เอนทิตีCมีคุณสมบัติดังต่อไปนี้: DและZ; เนื่องจากเอนทิตีทั้งหมดใช้แอตทริบิวต์ร่วมกันDฉันจึงตัดสินใจใช้การออกแบบชนิด / ชนิดย่อย ข้อสำคัญ: เอนทิตีเป็นเอกสิทธิ์เฉพาะบุคคล! หมายความว่าเอนทิตีนั้นเป็น A หรือ B หรือ C ปัญหา: หน่วยงานAและBมีอีกแอตทริบิวต์ทั่วไปแต่แอตทริบิวต์นี้ไม่ได้อยู่ในกิจการEC คำถาม: ฉันต้องการใช้คุณลักษณะที่อธิบายข้างต้นเพื่อเพิ่มประสิทธิภาพการออกแบบของฉันถ้าเป็นไปได้ ความจริงแล้วฉันไม่รู้ว่าจะทำอย่างไรและจะเริ่มต้นอย่างไรจึงจะโพสต์นี้

1
ผลรวมกลิ้ง / นับ / เฉลี่ยในช่วงวันที่
ในฐานข้อมูลของธุรกรรมที่ครอบคลุม 1,000 กิจการในระยะเวลา 18 เดือนฉันต้องการเรียกใช้แบบสอบถามเพื่อจัดกลุ่มทุกช่วงเวลา 30 วันที่เป็นไปได้โดยentity_idใช้ SUM ของจำนวนธุรกรรมและ COUNT ของธุรกรรมในช่วง 30 วันนั้นและ คืนค่าข้อมูลในวิธีที่ฉันสามารถสอบถามได้ หลังจากการทดสอบจำนวนมากรหัสนี้บรรลุสิ่งที่ฉันต้องการ: SELECT id, trans_ref_no, amount, trans_date, entity_id, SUM(amount) OVER(PARTITION BY entity_id, date_trunc('month',trans_date) ORDER BY entity_id, trans_date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS trans_total, COUNT(id) OVER(PARTITION BY entity_id, date_trunc('month',trans_date) ORDER BY entity_id, trans_date ROWS BETWEEN …

2
เหตุใดอักขระเหล่านี้จึงเท่าเทียมกันใน SQL Server
ฉันแค่ไม่เข้าใจ ดูแบบสอบถาม SQL นี้: select nchar(65217) -- ﻁ select nchar(65218) -- ﻂ select nchar(65219) -- ﻃ select nchar(65220) -- ﻄ if nchar(65217) = nchar(65218) print 'equal' if nchar(65217) = nchar(65219) print 'equal' if nchar(65217) = nchar(65220) print 'equal' ขึ้นอยู่กับความสัมพันธ์สกรรมกริยามันหมายความว่า SQL Server ถือว่าพวกเขาทั้งหมดจะเป็นตัวละครเดียวกัน อย่างไรก็ตามในสภาพแวดล้อมอื่นพูดเช่น C # พวกเขาไม่เหมือนกัน สิ่งที่ฉันสับสนคือ: การเปรียบเทียบสตริงทำงานใน SQL Server …

3
เปลี่ยนคอลัมน์คีย์หลักจาก INT ถึง BIGINT ในการผลิต (MySQL 5.6.19a)
ตาราง INNODB บางส่วนในฐานข้อมูลการผลิตของเรากำลังจะถึงขีด จำกัด INT AUTO_INCREMENT ที่ 2147483647 และเราจำเป็นต้องเปลี่ยนเป็น BIGINT มิฉะนั้นการเขียนจะเริ่มล้มเหลว ตารางอยู่ในฐานข้อมูล MySQL 5.6.19a ที่ใช้งานจริงบน Amazon RDS เราจะแก้ไขเช่นนี้ได้อย่างไรโดยไม่กระทบกับการอ่านและการแทรกที่เกิดขึ้นตลอดเวลา? เปลี่ยนตารางMYTABLEเปลี่ยนid idBIGINT ไม่ใช่ NULL AUTO_INCREMENT นี่คือ DDL สำหรับตาราง: CREATE TABLE `MYTABLE` ( `id` int(11) NOT NULL AUTO_INCREMENT, `siteId` int(11) NOT NULL, `filter` varchar(10) NOT NULL DEFAULT 'ALL', `date` varchar(10) NOT NULL, `cards` …
20 mysql  innodb 

4
อะไรคือความแตกต่างระหว่างคีย์หลักและซุปเปอร์คีย์ใน DBMS
ฉันใหม่สำหรับ DBMS และฉันยังคงเรียนรู้ทฤษฎี ฉันสับสนกับธุรกิจหลักนี้และหลังจาก googling ฉันได้ จำกัด ให้เหลือเพียง 2 ปุ่มเท่านั้นฉันไม่ได้รับ (หลักและกุญแจหลัก) ฉันมีคำถามสองสามข้อเกี่ยวกับ DBMS ฉันจะขอบคุณถ้าคุณสามารถตอบพวกเขาสำหรับฉัน 1) อะไรคือความแตกต่างระหว่างคีย์หลักและซุปเปอร์คีย์ใน DBMS? ขอขอบคุณอย่างสูงหากคุณสามารถใช้ตัวอย่างที่ครอบคลุมเพื่ออธิบายอย่างถูกต้อง 2) คีย์หลักและ Super key ทั้งสองสามารถรวมกันหลายคอลัมน์เพื่อสร้างคีย์หลักและซุปเปอร์คีย์ได้หรือไม่ 3) คีย์หลักเป็นชุดย่อยของ Super key หรือในทางกลับกัน

4
การรวมช่วงแยกเป็นช่วงที่ใหญ่ที่สุดที่เป็นไปได้
ฉันกำลังพยายามรวมช่วงวันที่หลายช่วง (การโหลดของฉันมีค่าสูงสุด 500 กรณีส่วนใหญ่ 10) ที่อาจหรือไม่ทับซ้อนกับช่วงวันที่ต่อเนื่องที่ใหญ่ที่สุดที่เป็นไปได้ ตัวอย่างเช่น: ข้อมูล: CREATE TABLE test ( id SERIAL PRIMARY KEY NOT NULL, range DATERANGE ); INSERT INTO test (range) VALUES (DATERANGE('2015-01-01', '2015-01-05')), (DATERANGE('2015-01-01', '2015-01-03')), (DATERANGE('2015-01-03', '2015-01-06')), (DATERANGE('2015-01-07', '2015-01-09')), (DATERANGE('2015-01-08', '2015-01-09')), (DATERANGE('2015-01-12', NULL)), (DATERANGE('2015-01-10', '2015-01-12')), (DATERANGE('2015-01-10', '2015-01-12')); ตารางดูเหมือนว่า: id | range ----+------------------------- 1 | [2015-01-01,2015-01-05) …

4
คุณจะค้นหารุ่น / รุ่นของ SQL Server โดยไม่ติดตั้ง SSMS ได้อย่างไร
จะทราบได้อย่างไรว่าติดตั้งรุ่นใดโดยไม่ต้องติดตั้ง Studio จัดการ? ฉันมีเซิร์ฟเวอร์ที่ทำหน้าที่เป็นผู้จัดการใบอนุญาตสำหรับซอฟต์แวร์อื่น เมื่อตรวจสอบการแจ้งเตือนการใช้ RAM สูงฉันพบว่ากระบวนการsqlservr.exeใช้เวลา RAM เกือบ 2 GB ฉันดูในเมนูโปรแกรมและพบว่าตัวจัดการการกำหนดค่าได้รับการติดตั้งมิฉะนั้นมันเป็นกระดูกที่เปลือยเปล่า ฉันคลิกที่คุณสมบัติของไฟล์ EXE และพบ 10.50.1600.1 แต่ไม่มีที่ไหนที่ฉันพบว่าระบุว่าเป็น Express, Dev, STN, ENT ฯลฯ ถ้าฉันต้องเดานี่เป็นฉบับด่วน แต่ฉันอยากรู้ว่ามีสัญลักษณ์บอกเรื่องชัดเจนหรือไม่ อัปเดต: @Bob - ไฟล์บอกฉันว่าฉันรู้ไม่ใช่ฉบับ @valo - ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันเรียกใช้คำสั่งนั้นและฉันได้ตรวจสอบว่ามีการเปิดใช้งานชื่อ pipes: HResult 0x35, ระดับ 16, สถานะ 1 ผู้ให้บริการไปป์ที่มีชื่อ: ไม่สามารถเปิดการเชื่อมต่อกับ SQL Server [53] Sqlcmd: ข้อผิดพลาด: Microsoft SQL Server Native Client …
20 sql-server 

2
มีรายการการดำเนินงานออนไลน์ที่สมบูรณ์สำหรับ SQL Server แต่ละเวอร์ชันหรือไม่
ในขณะที่เรากำลังจะเปลี่ยนตารางขนาดใหญ่บางส่วนในฐานข้อมูล 5TB ของเราฉันพบว่าตัวเองต้องการรายชื่อของการดำเนินการที่สามารถดำเนินการออนไลน์และที่ต้องล็อคเต็มรูปแบบที่จะจัดขึ้นในขณะที่พวกเขาทำงาน ในอุดมคติแล้วรายการนี้จะมีข้อมูลเกี่ยวกับคำสั่งที่ต้องการล็อค SCH-M เพื่อกระทำในตอนท้าย ในขณะที่ฉันรู้ว่าส่วนใหญ่ของพวกเขาจากเวลาของฉันใน Microsoft ฉันรู้สึกประหลาดใจที่ฉันไม่สามารถหารายชื่อของการดำเนินงานออนไลน์ที่เปิดเผยต่อสาธารณชนเนื่องจากพวกเขาวิวัฒนาการมาจาก SQL Server 2005 และตลอดจนถึง 2014 CTP ใครบ้างมีรายการดังกล่าวพร้อมใช้งาน? ถ้าไม่ฉันอาจตัดสินใจสร้างมันขึ้นมา

1
อินสแตนซ์แปลกของ SQL Server ขัดข้องเมื่อแคสต์เป็นตัวเลข
ในขณะที่ทำงานกับ C # Entity Framework ฉันสังเกตเห็นความผิดพลาดของอินสแตนซ์ SQL Server ของฉัน ฉันสามารถติดตามข้อความนี้ได้: SELECT * FROM dbo.[TestTable] where mpnr in (1099059904, 1038139906, 1048119902, 1045119902, 1002109903, 1117109910, 1111149902, 1063149902, 1117159902, 1116109904, 1105079905, 1012079906, 1129129904, 1103059905, 1065059905, 1091059906, 1110149904, 1129149903, 1083029905, 1080139904, 1076109903, 1010019902, 1058019902, 1060019903, 1053019902, 1030089902, 1018149902, 1077149902, 1010109901, 1011109901, 1000119902, 1023049903, 1107119909, …

2
เลือกระเบียนทั้งหมดเข้าร่วมกับตาราง A หากมีอยู่แล้วเข้าร่วมตาราง B ถ้าไม่ใช่
ดังนั้นนี่คือสถานการณ์ของฉัน: ฉันทำงาน Localization สำหรับโครงการของฉันและโดยทั่วไปฉันจะทำเช่นนี้ในรหัส C # แต่ฉันต้องการทำเช่นนี้ใน SQL อีกเล็กน้อยตั้งแต่ฉันพยายามควัก SQL เล็กน้อย สภาพแวดล้อม: มาตรฐาน SQL Server 2014, C # (.NET 4.5.1) หมายเหตุ: ภาษาการเขียนโปรแกรมควรไม่เกี่ยวข้องฉันเพียง แต่รวมไว้เพื่อความสมบูรณ์เท่านั้น ดังนั้นฉันจึงประสบความสำเร็จในสิ่งที่ฉันต้องการ แต่ไม่เท่าที่ฉันต้องการ จะได้รับในขณะที่ (อย่างน้อยปี) ตั้งแต่ผมได้กระทำใด ๆ SQL JOINs JOINยกเว้นคนพื้นฐานและนี้ค่อนข้างซับซ้อน นี่คือ diagramme ของตารางที่เกี่ยวข้องของฐานข้อมูล (มีอีกมากมาย แต่ไม่จำเป็นสำหรับส่วนนี้) ความสัมพันธ์ทั้งหมดที่อธิบายในภาพเสร็จสมบูรณ์ในฐานข้อมูล - PKและFKข้อ จำกัด คือการตั้งค่าและการใช้งานทั้งหมด ไม่มีคอลัมน์ใดที่อธิบายnullได้ dboตารางทั้งหมดมีแบบแผน ตอนนี้ฉันมีคำถามที่เกือบจะทำสิ่งที่ฉันต้องการ: นั่นคือให้ใด ๆจากรหัสSupportCategoriesและรหัสใด ๆของLanguagesมันก็จะกลับมาอย่างใดอย่างหนึ่ง: หากมีการแปลขวาที่เหมาะสมสำหรับภาษานั้นสำหรับสตริงที่ (IE …

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