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

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

1
สร้างคีย์หลักอัตโนมัติใน CREATE TABLE … AS SELECT
CREATE TABLE ... AS SELECT...ฉันสร้างตารางโดยใช้ความซับซ้อนแบบสอบถามเลือกผ่าน ฉันจะเพิ่มคีย์หลักการสร้างอัตโนมัติในแบบสอบถามนี้ได้อย่างไร ตัวอย่างเช่น: create table `user_mv` select `user`.`firstname` as `firstname`, `user`.`lastname` as `lastname`, `user`.`lang` as `lang`, `user`.`name` as `user_name`, `group`.`name` as `group_name` from `user` inner join `user_groups` on (`user`.`user_id`=`user_groups`.`user_id`) left join `group` on (`group`.`group_id`=`user_groups`.`group_id`) where `user`.`lang`=`group`.`lang` แบบสอบถามนี้จะสร้างตารางที่มีfirstname, lastname, lang, username, group_nameคอลัมน์ ฉันต้องการให้มีidคอลัมน์ที่เป็นคีย์หลักของการสร้างอัตโนมัติ มีวิธีใดในการทำเช่นนี้โดยเปลี่ยนคิวรีนี้ ฉันรู้ว่าฉันสามารถทำได้โดยการเปลี่ยนตารางหลังจากดำเนินการแบบสอบถามนี้ แต่ถ้ามีวิธีใดที่จะทำสิ่งนี้โดยตรงในcreate tableคำสั่งฉันต้องการทราบวิธีการทำเช่นนั้น

2
มีเครื่องมือของบุคคลที่สามที่สามารถอ่านและ / หรือวิเคราะห์ไฟล์ SQL Profiler trace (.trc) [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันมีไฟล์. trc จากการติดตามที่ DBA ทำกับหนึ่งในฐานข้อมูลของฉัน ฉันไม่มีเครื่องมือตัวสร้างโปรไฟล์ SQL ติดตั้งอยู่บนพีซีดังนั้นฉันจึงไม่สามารถดูเนื้อหาและวิเคราะห์บันทึกการติดตามได้ ฉันจะอ่านไฟล์นี้โดยไม่ติดตั้งตัวสร้างโปรไฟล์ SQL บนพีซีของฉันได้อย่างไร
12 sql-server  trace 

2
MERGE ใช้ tempdb หรือไม่
พิจารณาคำถามต่อไปนี้: MERGE [Parameter] with (rowlock) AS target USING (SELECT @AreaId, @ParameterTypeId, @Value) AS source (AreaId, ParameterTypeId, Value) ON (target.AreaId = source.AreaId AND target.ParameterTypeId = source.ParameterTypeId) WHEN MATCHED THEN UPDATE SET target.Value = source.Value, @UpdatedId = target.Id WHEN NOT MATCHED THEN INSERT ([AreaId], [ParameterTypeId], [Value]) VALUES (source.AreaId, source.ParameterTypeId, source.Value); สถิติ I …
12 sql-server  t-sql 

2
SSIS 2012 สร้างตัวแปรสภาพแวดล้อมล้มเหลว
ฉันกำลังทำงานสคริปต์เพื่อพอร์ตสภาพแวดล้อมจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น ฉันพบปัญหาในการโทรติดต่อcatalog.create_environment_variableเพื่อรับข้อผิดพลาด "ประเภทข้อมูลของค่าอินพุตไม่เข้ากันกับประเภทข้อมูลของ 'String' ออกมาจาก proc "check_data_type_value" สิ่งที่แปลกคือถ้าฉันปล่อยให้สคริปต์ GUI ออกตัวแปรแบบสอบถามนั้นจะใช้ได้ DECLARE @var sql_variant = N'\\myserver\ssisdata' EXEC [catalog].[create_environment_variable] @variable_name = N'FolderBase' , @sensitive = False , @description = N'' , @environment_name = N'Development' , @folder_name = N'POC' , @value = @var , @data_type = N'String' GO อย่างไรก็ตามการใช้วิธีการสคริปต์นี้ไม่ทำงาน legwork ที่ฉันทำบ่งชี้ว่าข้อความแสดงข้อผิดพลาดนี้มักแก้ไขโดยใช้ชนิดข้อมูล nvarchar แทน …


1
วิธีการแก้ไขปัญหาข้อขัดแย้งเท็จการจำลองแบบผสานอย่างถูกต้อง
เรามีการตั้งค่าการจำลองแบบผสาน SQL Server 2008 R2 เมื่อเร็ว ๆ นี้ฉันเริ่มได้รับความขัดแย้งสำหรับบางตารางและเมื่อฉันตรวจสอบตัวแสดงข้อขัดแย้งฉันจะเห็นว่าค่าของผู้ชนะ & ค่าคอลัมน์ผู้แพ้เหมือนกัน! ฉันแน่ใจว่าข้อมูลเหล่านี้ถูกป้อนโดยผู้สมัครสมาชิกเพียงคนเดียว ฉันใช้sp_showrowreplicainfoเพื่อรับรายละเอียดเพิ่มเติมเกี่ยวกับแถวที่ขัดแย้งกันและฉันได้ 2 แถว: แถวหนึ่งสำหรับผู้เผยแพร่และแถวสำหรับสมาชิกที่มีทั้งสองแถวมี "เวอร์ชัน" เป็น 1 ฉันใช้วิธีของแบรนดอนด้วย: การตรวจสอบการเปลี่ยนแปลงในการจำลองแบบผสานแต่มันแสดงให้เห็นว่ามีการแทรกแบบปกติเท่านั้น! คุณช่วยบอกวิธีเริ่มต้นการแก้ไขข้อขัดแย้งประเภทนี้ได้ไหม

3
การอัปเดตตารางที่มีการบันทึกนับล้านรายการมันใช้เวลา 4 วัน
ขณะนี้ฉันกำลังอัปเดตตารางที่มีเรคคอร์ดนับล้านระเบียนอยู่ในช่วง 4 วันและคิวรียังดำเนินการอยู่ ฉันตรวจสอบกิจกรรมการตรวจสอบแสดงว่าแบบสอบถามกำลังทำงานอยู่ ในบันทึกเหตุการณ์ไม่มีข้อผิดพลาดเลย ประสิทธิภาพที่ชาญฉลาด: Tempdb ในดิสก์ A (พื้นที่ว่าง 850 gb) ไฟล์ฐานข้อมูลในดิสก์ B (พื้นที่ว่าง 750 gb) RAM 16 GB กรุณาแนะนำฉันฉันควรทำอย่างไร? แบบสอบถาม UPDATE dbo.table1 SET costPercentage = ISNULL(t2.PaymentIndex, 1.0), t2.TopUp_Amt = (ISNULL(t2.PaymentIndex, 1.0) - 1.0) * ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00), Total_Tariff_Inc_t2 = ISNULL(t2.PaymentIndex, 1.0) * ISNULL(dbo.table1.Initial_Tariff_Amt, 0.00) FROM dbo.table2 t2 WHERE LEFT(dbo.test1.procodet, …

2
ฉันควรคาดหวังปริมาณงานใดกับ MPIO
Dell PowerEdge 2950 พร้อมสอง 1 Gbps NIC จะไปที่พอร์ต 1 Gbps สองพอร์ตบนสวิตช์ซึ่งจะไปยัง NetApp ด้วย NIC สี่ 1 Gbps ที่มีอยู่เป็นหนึ่งอินเทอร์เฟซเสมือน 24 ไดรฟ์, 7200k SATA, NetApp RAID-DP ฉันได้แมป NIC โฮสต์แต่ละรายการกับ NetApp โดยใช้ MPIO ใน Microsoft iSCSI initiator การทดสอบกับ SQLIO ผลงานการเขียนของฉันนั้นสมเหตุสมผลประมาณ 200 MBs แต่การอ่านของฉันใกล้ถึง 100 MB การอ่านของฉันไม่ควรอยู่ใกล้กับ 200 MB เหมือนกับการเขียนของฉันหรือไม่ นี่เป็นปัญหาการกำหนดค่าหรือมีปัญหาการเก็บข้อมูลพื้นฐานที่ฉันไม่เข้าใจหรือไม่? อัปเดต: นี่คือ IOPS …
12 sql-server 

3
อัปเดตตารางตามตารางเดียวกัน
ฉันมีตารางมีรายละเอียดสินค้าและรายละเอียดของสินค้าแต่ละคนมีและproduct_id language_idสิ่งที่ฉันต้องการจะทำคือการปรับปรุงเขตข้อมูลทั้งหมดที่มีlanguage_idของ2ให้เท่ากับเดียวกันproduct_idที่เป็นlanguage_id1 จนถึงตอนนี้ฉันได้ลองใช้แบบสอบถามต่อไปนี้ แต่ฉันได้รับข้อผิดพลาดที่ระบุว่า MySQL ไม่ต้องการอัปเดตตารางที่มีการใช้ตารางในแบบสอบถามย่อยด้วย UPDATE products_description AS pd SET pd.products_seo = ( SELECT pd2.products_seo FROM products_description AS pd2 WHERE pd2.language_id = 1 AND pd2.products_id = pd.products_id ) WHERE pd.language_id <> 1 มีวิธี "ง่าย" รอบข้อ จำกัด นี้ใน MySQL? หรือ "ลูกเล่น"? ฉันแปลกใจเล็กน้อยที่แบบสอบถามของฉันไม่ทำงานตามที่คิด
12 mysql  update 

2
วิธีออกแบบฐานข้อมูลนี้เพื่อหลีกเลี่ยงการพึ่งพาแบบวนซ้ำ?
มีสองตาราง: ผู้ใช้งาน ที่อยู่ ผู้ใช้มีการอ้างอิงถึงที่อยู่ ที่อยู่มีคอลัมน์ CreatedBy และ ModifiedBy ซึ่งอ้างอิงถึงผู้ใช้ ฉันจะออกแบบฐานข้อมูลนี้เพื่อหลีกเลี่ยงการพึ่งพาแบบวนซ้ำได้อย่างไร

2
เครื่องมือในการส่งออกข้อมูลด้วยข้อมูลเชิงสัมพันธ์ทั้งหมดหรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน5 ปีที่ผ่านมา มีเครื่องมือในการส่งออกข้อมูลจากแถวที่เลือกในตารางที่มีข้อมูลทั้งหมดที่เก็บไว้ในตารางอื่นในตารางอื่น ๆ ที่เชื่อมโยงโดยการออกแบบเชิงสัมพันธ์หรือไม่? วัตถุประสงค์คือเพื่อลดความยุ่งยากในการย้ายข้อมูลบิตระหว่างเซิร์ฟเวอร์สำหรับการย้ายข้อมูลแบบเฉพาะกิจ ฉันกำลังมองหาเครื่องมือสำหรับ MySQL InnoDB โดยเฉพาะกับคีย์ต่างประเทศที่กำหนดไว้

1
การสำรองข้อมูลธุรกรรม SQL Server เทียบกับบันทึก
ฉันได้รับฐานข้อมูล SQL Server 2008 ที่มีความสำคัญทางธุรกิจในระดับปานกลางและกำลังพยายามวางแผนการสำรองข้อมูล (ฉันเป็นนักพัฒนาไม่ใช่ DBA) วิธีการตั้งค่าระบบของเราในขณะนี้มีระบบสำรองข้อมูลสองระบบ: การสำรองข้อมูลเต็มรูปแบบรายสัปดาห์ ( .bak) และการทำธุรกรรมบันทึกรายชั่วโมง ( .trn) การสำรองข้อมูล เราเก็บสำรองข้อมูลเหล่านี้หลายชุดและจัดส่งนอกสถานที่เป็นประจำ บันทึก SQL Server ( .ldf) Fullที่มีรูปแบบการกู้คืนการตั้งค่า ไฟล์นี้อยู่ในไดรฟ์แยกต่างหากจาก.mdfไฟล์หลักแต่ไม่ได้สำรองไว้ ในกรณีที่มีการกู้คืนฉุกเฉิน (หรือเมื่อกู้คืนการสำรองข้อมูลไปยังเครื่อง dev) ขั้นตอนของฉันคือการใช้.bakไฟล์แล้วใช้ไฟล์. trn เรามีสคริปต์ที่ทำให้ขั้นตอนนี้ค่อนข้างตรงไปตรงมา คำถามของฉัน: เป็นไปได้หรือไม่ที่จะกู้คืนฐานข้อมูลจาก.ldfไฟล์? มันคืออะไรสำหรับ มันซ้ำซ้อนโดยไม่จำเป็นหรือไม่ที่จะต้องมีบันทึกธุรกรรมทั้งสองนี้? การสำรอง.ldfไฟล์เป็นสิ่งสำคัญหรือไม่

4
จำเป็นต้องมี REINDEX หรือไม่หลังจาก CLUSTER
ฉันกำลังพิจารณาใช้ CLUSTER เพื่อเรียงลำดับตารางใหม่โดยดัชนี ฉันเข้าใจว่าการพักผ่อนหย่อนใจของข้อมูลตารางนี้ทำให้ดัชนีที่มีอยู่ทั้งหมดขยายตัวหรือไร้ประโยชน์ ฉันเห็นสิ่งบ่งชี้ว่าต้องมี REINDEX หลังจากกลุ่มข้อมูล ฉันพบการอ้างอิงอื่นที่บ่งชี้ว่า CLUSTER ทำ REINDEX เอกสารอย่างเป็นทางการกล่าวว่าไม่มีอะไรที่เกี่ยวกับดัชนีการเป็นส่วนหนึ่งของคลัสเตอร์หรือต้องการ (แม้ว่าจะไม่แนะนำให้ทำงานหลังจากวิเคราะห์คลัสเตอร์) ทุกคนสามารถแตกต่างกัน (เช่นกับการอ้างอิงบางส่วนไปยังเอกสารอย่างเป็นทางการ) สามารถพูดว่าต้องการ REINDEX หลังจาก CLUSTER หรือไม่
12 postgresql 

5
ฉันจะลบแผนการดำเนินการที่ไม่ดีออกจากฐานข้อมูล Azure SQL ได้อย่างไร
DBCC FREEPROCCACHEไม่ทำงานใน Azure SQL DB ฉันจะบังคับให้มีแผนอื่นเพื่อปลดปล่อยตัวเองออกจากแคชในลักษณะที่จะไม่ทำให้ระบบการผลิตเสียหาย (เช่นฉันไม่สามารถไปเปลี่ยนตารางที่จำใจได้) นี่เป็นเฉพาะสำหรับ SQL ที่สร้างโดย Entity Framework ดังนั้นจึงไม่ใช่ procs ที่จัดเก็บด้วยตนเองซึ่งมันคือไดนามิก SQL ที่มีประสิทธิภาพ (แหล่งที่มาคือดัชนีที่ไม่ดี -> สถิติที่ไม่ดี ฯลฯ นั่นคือทั้งหมดที่ได้รับการแก้ไข แต่แผนไม่ดีจะไม่หายไป) อัปเดต: ฉันเลือกโซลูชันของ @ mrdenny เมื่อเขาไปถึงที่นั่นก่อน อย่างไรก็ตามฉันใช้สคริปต์ของ @Aaron Bertrand สำเร็จในการทำงาน ขอบคุณทุกคนสำหรับความช่วยเหลือ !!

3
การต่อข้อมูลทางกายภาพ: รับประกันการดำเนินการตามคำสั่งหรือไม่?
ใน SQL มาตรฐานผลลัพธ์ของ a union allไม่ได้รับประกันว่าจะอยู่ในลำดับใด ๆ ดังนั้นสิ่งที่ชอบ: select 'A' as c union all select 'B' สามารถส่งคืนสองแถวในลำดับใดก็ได้ (แม้ว่าในทางปฏิบัติในฐานข้อมูลใด ๆ ที่ฉันรู้ว่า 'A' จะมาก่อน 'B') ใน SQL Server สิ่งนี้จะเปลี่ยนเป็นแผนการดำเนินการโดยใช้การดำเนินการทางกายภาพ "การต่อข้อมูล" ฉันนึกภาพออกได้ง่ายว่าการดำเนินการเรียงต่อกันจะสแกนอินพุตของมันคืนสิ่งที่อินพุตมีบันทึกไว้ อย่างไรก็ตามฉันพบข้อความต่อไปนี้บนเว็บ ( ที่นี่ ): ตัวประมวลผลข้อความค้นหาจะดำเนินการตามแผนนี้ตามลำดับที่ผู้ให้บริการปรากฏในแผนข้อแรกคืออันดับแรกและรายการสุดท้ายคือรายการสุดท้าย คำถาม: จริงหรือไม่ในทางปฏิบัติ สิ่งนี้รับประกันได้ว่าเป็นจริงหรือไม่? ฉันไม่พบการอ้างอิงใด ๆ ในเอกสารประกอบของ Microsoft ที่อินพุตถูกสแกนตามลำดับตั้งแต่ครั้งแรกถึงครั้งสุดท้าย ในทางกลับกันเมื่อใดก็ตามที่ฉันพยายามเรียกใช้ผลลัพธ์แนะนำว่าอินพุตนั้นถูกประมวลผลตามลำดับ มีวิธีที่จะทำให้กระบวนการของเครื่องยนต์มากกว่าหนึ่งอินพุตในแต่ละครั้งหรือไม่? การทดสอบของฉัน (โดยใช้นิพจน์ที่ซับซ้อนกว่าค่าคงที่) อยู่ในเครื่อง 8-core ที่เปิดใช้งานแบบขนานและการสืบค้นส่วนใหญ่จะใช้ประโยชน์จากความขนาน

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