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

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

1
ฟีเจอร์ Plan Query Store Force ไม่ทำงาน
คุณลักษณะแผนของ Query Store Force ไม่ได้บังคับใช้แผน ฉันรู้ร้านแบบสอบถาม - บังคับไม่ได้หมายความว่าบังคับ ; อย่างไรก็ตามแผนของฉันอาจไม่เปลี่ยนแปลงอย่างมีนัยสำคัญ แต่เครื่องมือเพิ่มประสิทธิภาพการสืบค้นอาจเลือกดัชนีที่ไม่ถูกต้องตัวเลือกการวนซ้ำเป็นต้น โดยพื้นฐาน: มันไม่เป็นไปตามแผนบังคับของฉัน ผมเคยบังคับแผนจำนวนมากและมันก็ไม่ได้ทำงาน มีอยู่ 0 sys.query_store_plan force_failure_countข้อหาล้มเหลวหรือเหตุผลคือเมื่อฉันมองไปที่ เหตุการณ์ที่ขยายquery_store_plan_forcing_failedไม่ได้ให้ผลใด ๆ 0 เหตุการณ์ ตัวอย่างเช่นแผนซึ่งบังคับใช้เมื่อ 20.09 มีเพียงการรวบรวม 1 ครั้งเท่านั้นที่ใช้แผนการบังคับ แผนแตกต่างกันอย่างมากแผนการหนึ่งที่ใช้การจับคู่แฮชเข้าร่วมกับ INDEX 1 และอีกแผนการใช้การเข้าร่วมแบบวนรอบกับ INDEX 2 รุ่น: Microsoft SQL Server 2016 (SP1-GDR) (KB3210089) - 13.0.4202.2 (X64) ฉันหายไปนี่อะไร

4
เป็นไปได้หรือไม่ว่าคำสั่งนั้นจะไม่รับประกันสำหรับตารางที่ซ้ำซ้อนนี้
ฉัน stumbled เมื่อคำถามนี้ในการสนทนา Twitter กับ Lukas เอ๊ด แม้ว่าพฤติกรรมที่ถูกต้องจะใช้คำสั่งย่อย ORDER BY กับการสืบค้นนอกสุดเนื่องจากที่นี่เราไม่ได้ใช้ DISTINCT, GROUP BY, JOIN หรือส่วนคำสั่ง WHERE ใด ๆ ในการค้นหานอกสุดทำไม RDBMS ถึงไม่ผ่าน ข้อมูลที่เข้ามาในขณะที่มันถูกจัดเรียงตามแบบสอบถามภายใน? SELECT * FROM ( SELECT * FROM table ORDER BY time DESC ) AS t เมื่อเรียกใช้ตัวอย่างนี้บน PostgreSQL อย่างน้อยคุณจะได้รับแผนการดำเนินการเดียวกันสำหรับทั้งแบบสอบถามภายในและตัวอย่างตารางที่ได้รับนี้รวมถึงชุดผลลัพธ์เดียวกัน ดังนั้นฉันจะสมมติว่าผู้วางแผนจะยกเลิกการสืบค้นนอกสุดเพียงเพราะซ้ำซ้อนหรือเพียงแค่ส่งผ่านผลลัพธ์จากตารางด้านใน ไม่มีใครคิดว่านี่อาจเป็นกรณีหรือไม่

1
ฉันจะลบ SQL Server 2017 ทั้งหมดบน Ubuntu ได้อย่างไร
เอกสารมีคำแนะนำเกี่ยวกับวิธีการลบ SQL Server อย่างไรก็ตามสิ่งนี้ทำให้บางแพ็กเกจอยู่ด้านหลัง ฉันจะลบการติดตามทั้งหมดและถอนการติดตั้ง SQL Server 2017 ได้อย่างไร

1
ตัวเลือก SSMS คือ "ดำเนินการทางลัดกระบวนงานที่เก็บไว้โดยไม่มีตัวเลือกการดำเนินการเพิ่มเติม"
นี่คือตัวเลือกที่พูดมาก ไม่มีเอกสารประกอบและการค้นเว็บไม่มีความช่วยเหลือ เมื่อฉันเรียกใช้คิวรีฉันไม่พบความแตกต่างกับตัวเลือกที่เลือกหรือไม่ได้ตรวจสอบ การตั้งค่านี้ควบคุมอะไร

3
มีวิธีการตรวจสอบว่างในตัวแปรในส่วนคำสั่ง WHERE ที่เกิดขึ้นเพียงครั้งเดียวหรือไม่?
ฉันมีแบบสอบถามในตารางขนาดใหญ่ที่มีลักษณะเช่นนี้: declare @myIdParam int = 1 select * from myTable where (@myIdParam is null or myTable.Id = @myIdParam) มีเงื่อนไขที่คล้ายกันหลายประการเช่นนี้ในส่วนคำสั่งและยังมีการรวมจำนวนมาก แต่นี่เป็นบทสรุป อย่างมีประสิทธิภาพหาก @myIdParam เป็นโมฆะเราไม่ต้องการ จำกัด ผลลัพธ์โดยใช้พารามิเตอร์นี้ ฉันไม่ใช่มืออาชีพ DB แต่จากการทดสอบของฉันดูเหมือนว่าการตรวจสอบ NULL นี้ทำสำหรับทุกเร็กคอร์ดและไม่ได้ปรับให้เหมาะสม แต่อย่างใด ถ้าฉันลบการตรวจสอบโมฆะและสมมติว่าพารามิเตอร์นั้นไม่เป็นโมฆะแบบสอบถามจะส่งคืนทันที มิฉะนั้นจะใช้เวลาสูงสุดสิบวินาที มีวิธีการเพิ่มประสิทธิภาพนี้เพื่อตรวจสอบจะทำเพียงครั้งเดียวที่รันไทม์?
12 sql-server  null 

3
ชื่อผู้ใช้และรหัสผ่านเริ่มต้นของเครื่องเสมือนที่สร้างไว้ล่วงหน้าของ oracle คืออะไร
ฉันดาวน์โหลดDeveloperDaysVM2016-06-02_13.ovaจากhttp://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.htmlและโหลดลงในกล่องเสมือนสำเร็จ ฉันเข้าสู่ระบบในฐานะผู้ใช้ "oracle" และฉันเห็นเดสก์ท็อป จากภายในเครื่องเสมือนฉันเปิด Firefox และไปที่: http: // localhost: 8080 / ords / hrrest / พนักงาน /และได้รับรายชื่อพนักงานในรูปแบบ JSON สำเร็จ ดังนั้นฉันรู้ว่าฐานข้อมูลขึ้นและทำงาน ปัญหาเดียวของฉันคือฉันไม่สามารถเข้าสู่ฐานข้อมูล ฉันเหนื่อย: [oracle@vbgeneric oracle]$ sqlplus oracle SQL*Plus: Release 12.1.0.2.0 Production on Tue Jul 5 17:32:22 2016 Copyright (c) 1982, 2014, Oracle. All rights reserved. Enter password: oracle ERROR: ORA-01017: …

2
การทำธุรกรรมในขั้นตอนการจัดเก็บ
ฉันต้องการดำเนินการ UPDATE และ INSERT ในธุรกรรมเดียว รหัสนั้นทำงานได้ดีในตัวของมันเอง แต่ฉันต้องการที่จะสามารถเรียกมันได้อย่างง่ายดายและผ่านพารามิเตอร์ที่ต้องการ เมื่อฉันพยายามทำธุรกรรมนี้ในขั้นตอนการจัดเก็บฉันพบข้อผิดพลาดทางไวยากรณ์มากมาย ฉันจะแค็ปซูลโค้ดต่อไปนี้เพื่อให้สามารถเรียกได้อย่างง่ายดาย? BEGIN TRANSACTION AssignUserToTicket GO DECLARE @updateAuthor varchar(100) DECLARE @assignedUser varchar(100) DECLARE @ticketID bigint SET @updateAuthor = 'user1' SET @assignedUser = 'user2' SET @ticketID = 123456 UPDATE tblTicket SET ticketAssignedUserSamAccountName = @assignedUser WHERE (ticketID = @ticketID); INSERT INTO [dbo].[tblTicketUpdate] ([ticketID] ,[updateDetail] ,[updateDateTime] …

3
ฐานข้อมูลกลุ่มความพร้อมใช้งานติดอยู่ในโหมดไม่ซิงโครไนซ์ / กู้คืนค้างอยู่
ในขณะที่อัปเกรดที่เก็บข้อมูลในอินสแตนซ์ของ SQL Server 2014 SP1 (12.0.4422.0) เราพบปัญหาที่ฐานข้อมูลสองแห่งจะไม่เริ่มทำงานบนฐานรองหลังจากรีสตาร์ท SQL Server เซิร์ฟเวอร์ออฟไลน์ไม่กี่ชั่วโมงในขณะที่เราติดตั้ง SSD ใหม่ (ใหญ่กว่า) และคัดลอกไฟล์ข้อมูลไปยังโวลุ่มใหม่ เมื่อเรารีสตาร์ท SQL Server ทั้งหมด แต่สองฐานข้อมูลเริ่มซิงโครไนซ์อีกครั้ง อีกสองคนที่ถูกแสดงใน SSMS เป็นไม่ตรงกัน / กู้คืนรอดำเนินการ ไม่พบปัญหาการซิงโครไนซ์ / การกู้คืนที่คล้ายกันมาก่อนฉันตรวจสอบสถานะภายใต้กลุ่มความพร้อมใช้งาน -> ฐานข้อมูลความพร้อมใช้งาน แต่พวกเขาแสดง X สีแดง: และแม้แต่พยายามระงับการเคลื่อนย้ายข้อมูลสร้างข้อความแสดงข้อผิดพลาด: ไม่สามารถระงับการเคลื่อนย้ายข้อมูลในฐานข้อมูล 'StackExchange.Bycycles.Meta' ซึ่งอยู่ในแบบจำลองความพร้อมใช้งาน 'ny-sql03' ในกลุ่มความพร้อมใช้งาน 'SENetwork_AG' (Microsoft.SqlServer.Smo) ข้อมูลเพิ่มเติม: เกิดข้อยกเว้นขณะดำเนินการคำสั่งหรือชุดงาน transact-SQL (Microsoft.SqlServer.ConnectionInfo) ฐานข้อมูล 'StackExchange.Bycycles.Meta' ไม่สามารถเปิดได้เนื่องจากไฟล์ที่ไม่สามารถเข้าถึงหรือหน่วยความจำไม่เพียงพอหรือพื้นที่ดิสก์ไม่เพียงพอ ดูบันทึกข้อผิดพลาด SQL Server …

1
ฉันจะย้ายพื้นที่ตาราง PostgreSQL ได้อย่างไร
มีวิธีที่จะย้ายร่างกาย PostgreSQL 9.3 ตารางจาก/old/dirไป/new/dir? ฉันต้องการเพียงแค่mvไดเรกทอรีและบอกว่า PostgreSQL /new/dirตารางอยู่ในขณะนี้อยู่ที่ ดูเหมือนว่าALTER TABLESPACEให้คุณเปลี่ยนชื่อได้เท่านั้น ฉันต้องการหลีกเลี่ยงการสร้างพื้นที่ตารางใหม่และย้ายฐานข้อมูลไป ฉันคิดว่าจะเป็นกระบวนการคัดลอกช้าที่ต้องใช้เวลาและพื้นที่ดิสก์ ฉันยังต้องการที่จะหลีกเลี่ยง symlinking ไป/old/dir/new/dir

6
การสลับค่าในคอลัมน์ด้วยคำสั่ง update เดียว
คุณพบว่าข้อผิดพลาดในระบบได้รับการตั้งชื่อผู้ชาย (M) ไม่ถูกต้องในฐานะผู้หญิง (W) และในทางกลับกันในฐานข้อมูล คอลัมน์อนุญาตสำหรับอักขระหนึ่งตัวเท่านั้น โดยไม่ต้องใช้ตาราง temp ใด ๆ ให้เขียนหนึ่งคิวรีอัปเดตเพื่อแก้ไข คำถามนี้ถูกถามในการสัมภาษณ์เมื่อเร็ว ๆ นี้ที่ฉันมีและฉันจะไปสัมภาษณ์เพิ่มเติมที่อาจมีคำถามที่คล้ายกันดังนั้นฉันต้องการที่จะได้รับความคิดของวิธีการจัดการนี้
12 update 

2
InnoDB เก็บข้อมูลธุรกรรมไว้ก่อนที่จะส่งมอบที่ไหน
ฉันได้ทำการทดสอบบางอย่างโดยใช้READ_COMMITTEDและREAD_UNCOMMITTEDที่บ้านโดยใช้เทคโนโลยี JDBC ฉันเห็นว่าREAD_UNCOMMITTEDจริง ๆ แล้วสามารถอ่านข้อมูลที่ไม่มีข้อผูกมัดเช่นข้อมูลจากธุรกรรมบางรายการที่ยังไม่ได้รับการยืนยัน คำถาม ข้อมูลที่ไม่ได้รับการจัดเก็บอยู่ที่ไหนเช่นการREAD_UNCOMMITTEDทำธุรกรรมสามารถอ่านข้อมูลที่ปราศจากข้อผูกมัดจากการทำธุรกรรมอื่นได้หรือไม่ เหตุใดจึงเป็นไปไม่ได้ที่การREAD_COMMITTEDทำธุรกรรมในการอ่านข้อมูลที่ไม่มีข้อผูกมัดนั่นคือการ "อ่านสกปรก" กลไกอะไรบังคับใช้ข้อ จำกัด นี้

2
แคตตาล็อกข้อความแบบเต็มพร้อมการเปลี่ยนแปลงจะติดตาม: AUTO จะอัปเดตโดยอัตโนมัติหรือไม่หากการติดตามการเปลี่ยนแปลงสำหรับตารางนั้นไม่ได้เปิดใช้งานหรือไม่
ฉันมีตารางฐานข้อมูลนี้ที่ควรเก็บดัชนีข้อความแบบล่าสุด อย่างไรก็ตามฉันไม่เห็นว่าเกิดขึ้นเลย (ไม่มีข้อผิดพลาดในบันทึกเพราะบันทึกล่าสุดที่ฉันเห็นคือเมื่อฉันเรียกมันด้วยตนเอง) นี่คือสิ่งที่ฉันเห็น ... แต่บนโต๊ะตัวเอง ... นี่อาจเป็นสาเหตุที่ไม่เกิดขึ้นโดยอัตโนมัติหรือไม่

5
ไม่สามารถสร้างไฟล์ /var/lib/mysql/user.lower-test
ฐานข้อมูล MySQL มีปัญหาฟรีสองสามเดือน วันนี้เมื่อฉันตรวจสอบแพ็กเกจที่สามารถอัพเกรดได้โดยใช้ Synaptic Package Manager มันมาพร้อมกับส่วนประกอบ MySQL ต่างๆ (-common, -client, -server, etc) ฉันจึงตัดสินใจอัพเกรด (ฉันลืมที่จะทราบรุ่นที่ติดตั้ง แต่คิดว่ามันเป็น 5.6.21) เป็น 5.6.25-1-ubuntu2.0 หลังจากนั้นเมื่อฉันไปสอบถามฐานข้อมูลที่ฉันได้รับข้อความ: - Error occured: Can't connect to MySQL server on '127.0.0.1' (111) ฉันพบว่าเซิร์ฟเวอร์ไม่ทำงาน ในล็อกไฟล์ฉันชอบข้อความ: - Can't create file /var/lib/mysql/user.lower-test ฉันใช้เวลาหนึ่งชั่วโมงหรือมากกว่านั้นในการค้นหาข้อมูลและถึงแม้ว่าจะมีการรายงานปัญหาก่อนหน้านี้ แต่ฉันไม่ได้เห็นมันในบริบทของปัญหา 'โพสต์อัปเดต' ดังนั้นจึงไม่แน่ใจในขั้นตอนต่อไปของฉัน
12 mysql  linux 

4
หลีกเลี่ยงวิธีการดึงข้อมูล "แถวต่อแถว" เมื่อจัดการกับคอลัมน์ LOB ต้นทาง
ฉันมีแหล่งฐานข้อมูล PostgreSQL ดั้งเดิม (ODBC) ที่ฉันพยายามโยกย้ายไปยัง SQL Server schema ใหม่โดยใช้ SSIS ฉันได้รับคำเตือนว่า: มีการบังคับใช้วิธีการดึงข้อมูล 'Row by Row' เนื่องจากตารางมีคอลัมน์ LOB เนื้อหาคอลัมน์คือ LOB ไม่มีคอลัมน์ใดต้องเป็น LOB มีบางประเภทที่เป็นข้อความ แต่สามารถใส่ได้อย่างง่ายดายภายใน varchar (สูงสุด) แม้จะเป็นคนแปลกหน้า แต่ส่วนใหญ่แล้วเป็น varchars แต่ดูเหมือนว่ามีอะไรมากกว่า varchar (128) ที่กำลังได้รับการปฏิบัติเสมือนว่าเป็น LOB (เป็นคุณสมบัติล่วงหน้าประเภทของข้อมูลคือ DT_NTEXT) เหตุการณ์ฉันพยายามทำคำสั่ง SQL ด้วยตนเองซึ่งฉันได้ casted สตริงทุกประเภทให้เป็น varchar ที่มีความยาวที่เหมาะสมในคำสั่ง select และพวกเขายังคงถูกตั้งค่าเป็น DT_NTEXT ในแหล่ง ODBC ฉันไม่ใช่ DBA ดังนั้นจึงเป็นไปได้ทั้งหมดที่ฉันจะทำอะไรที่โง่จริงๆ …

5
ปรับปรุงความเร็วในการลบสำหรับ SQL Server
เรามีฐานข้อมูลการผลิตขนาดใหญ่มีขนาดประมาณ 300GB มีวิธีการใดในการปรับปรุงประสิทธิภาพของคิวรีการลบหรือไม่ ตอนนี้ความเร็วในการลบอยู่ระหว่าง 1-10k ต่อนาทีมันช้ามากสำหรับเรา

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