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

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

3
ฉันจะหาฐานข้อมูลตัวอย่างสำหรับ MySQL, SQL Server และ Oracle ได้จากที่ใด
ฉันต้องการทดลองกับระบบการจัดการฐานข้อมูลขนาดใหญ่ 3 ระบบ เพื่อจุดประสงค์นี้มันจะเจ๋งที่มีฐานข้อมูลเดียวกัน (ตารางเดียวกันและอื่น ๆ ) สำหรับแต่ละฐานข้อมูล ฉันจะหาสคริปต์ sql ที่สร้างฐานข้อมูลทดสอบที่เหมือนกันสำหรับ MySQL, MSSQL และ Oracle ได้อย่างไร

2
มีวิธีใดที่จะบังคับให้มีการแก้ไขชื่อรอการตัดบัญชีแม้ว่าตารางจะมีอยู่เมื่อสร้างกระบวนงานที่เก็บไว้?
เมื่อสร้างโพรซีเดอร์ที่เก็บไว้ใน SQL Server คุณจะได้รับอนุญาตให้อ้างถึงตารางที่ไม่มีอยู่ แต่ถ้าตารางนั้นมีอยู่คอลัมน์ใด ๆ ที่คุณอ้างถึงในขั้นตอนต้องมีอยู่ในตารางนั้น ( การแก้ปัญหาชื่อที่เลื่อนออกไป ) เป็นไปได้หรือไม่ที่จะสั่งให้ SQL Server เลื่อนการจำแนกชื่อของตารางทั้งหมดที่อ้างอิงในกระบวนการโดยไม่คำนึงว่ามีอยู่จริงหรือไม่? ฉันต้องการเก็บการตรวจสอบไวยากรณ์ทั่วไปดังนั้นแม้ว่าจะเป็นไปได้แฮ็คการนิยามโพรซีเดอร์ที่เก็บไว้ในตารางระบบไม่ใช่ตัวเลือก ฉันคาดหวังว่าการขอทำสิ่งนี้อาจจะดูแปลก ๆดังนั้นนี่คือพื้นหลัง: ฉันสร้างคำจำกัดความของตารางโดยอัตโนมัติและขั้นตอนการจัดเก็บจากแอปพลิเคชันที่เขียนใน C # และมันยากมากสำหรับฉันที่จะเปลี่ยนรหัส พวกเขา รหัสของฉัน "รับประกัน" ว่าสคีมานั้นสอดคล้องกันในการทำธุรกรรม แต่ในปัจจุบันฉันไม่สามารถรับประกันได้ว่าจะมีการกำหนดคอลัมน์ตารางก่อนที่ฉันจะกำหนดขั้นตอนการจัดเก็บซึ่งอ้างอิงพวกเขา ด้านล่างเป็นตัวอย่างที่ยอมรับได้ของ SQL ที่สร้างขึ้นโดย C # ซึ่ง "อธิบาย" ปัญหาที่ฉันพยายามแก้ไข --Say this table already exists. CREATE TABLE myTable ( a NVARCHAR(MAX) ) GO --My C# code …

3
การรักษาตัวอักษรอาหรับบางตัวเหมือนกัน
ในภาษาอาหรับเรามีอักขระเช่นا (alef) และأ (alef with hamza) ผู้ใช้เขียนพวกเขาแทนกันและเราต้องการค้นหาพวกเขาสลับกันได้ SQL Server ถือว่าเป็นอักขระแยกต่างหาก ฉันจะทำให้ SQL ปฏิบัติต่อพวกเขาในลักษณะเดียวกันได้อย่างไร? ฉันคิดว่าจะแทนที่أ (alef กับ hamza) ด้วยا (alef) ที่ใส่เข้าไป แต่เรามีทางเลือกมากมายในภาษาอาหรับไม่ใช่แค่แค่ا (alef) และأ (alef กับ hamza) ฉันพยายามArabic_CI_ASแล้วArabic_CI_AIแต่นั่นก็ไม่ได้แก้ปัญหา นี่คือสคริปต์ในการสร้างปัญหาใหม่: CREATE TABLE [dbo].[TestTable] ( [ArabicChars] [nvarchar](50) NOT NULL, CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED ( [ArabicChars] ASC ) ) ON [PRIMARY]; INSERT INTO …

2
ฟังก์ชั่นหน้าต่างทำให้เกิดแผนการดำเนินการที่น่ากลัวเมื่อถูกเรียกจากมุมมองที่มี parametrized ภายนอกโดยที่ 'clause
ฉันมีปัญหานี้มานานแล้วฉันพบวิธีแก้ปัญหาที่เหมาะกับฉันและลืมมันไป แต่ตอนนี้มีคำถามนั้นดังนั้นฉันยินดีที่จะทำให้ปัญหานี้เกิดขึ้น มีมุมมองที่รวมตารางบางอย่างในทางตรงไปตรงมามาก (คำสั่ง + คำสั่งซื้อ) เมื่อถูกสอบถามโดยไม่มีwhereประโยคมุมมองจะส่งกลับหลายล้านบรรทัด อย่างไรก็ตามไม่มีใครเคยเรียกมันว่าอย่างนั้น แบบสอบถามปกติคือ select * from that_nasty_view where order_number = 123456; สิ่งนี้จะส่งกลับประมาณ 10 ระเบียนจาก 5m สิ่งสำคัญ: มุมมองมีฟังก์ชั่นหน้าต่างrank()ซึ่งแบ่งพาร์ติชันตามฟิลด์โดยใช้มุมมองที่ถูกสอบถามเสมอ: rank() over (partition by order_number order by detail_line_number) ตอนนี้ถ้ามุมมองนี้ถูกสอบถามด้วยพารามิเตอร์ที่แท้จริงในสตริงแบบสอบถามตรงตามที่แสดงข้างต้นก็จะส่งกลับแถวทันที แผนการดำเนินการเป็นเรื่องปกติ: ดัชนีค้นหาทั้งสองตารางโดยใช้ดัชนีบนorder_number(ส่งคืน 10 แถว) การคำนวณหน้าต่างเหนือผลลัพธ์เล็ก ๆ ที่ส่งคืน การเลือก อย่างไรก็ตามเมื่อมีการเรียกใช้มุมมองในแบบที่กำหนดสิ่งต่าง ๆ น่ารังเกียจ: Index scanบนตารางทั้งหมดที่ละเว้นดัชนี ส่งคืนแถว 5 ม. เข้าร่วมมาก การคำนวณหน้าต่างทั้งหมดpartitions …

4
SQL Server 2008 R2: ปัญหาหลังจากเปลี่ยนชื่อคอมพิวเตอร์
ฉันมีปัญหาสับสนหลังจากเปลี่ยนชื่อคอมพิวเตอร์ของเซิร์ฟเวอร์ระยะไกลที่โฮสต์อินสแตนซ์ SQL Server ในพื้นที่ โดยพื้นฐานแล้วรีโมตเซิร์ฟเวอร์ถูกย้ายจากไซต์หนึ่งไปยังอีกไซต์หนึ่ง เพื่ออำนวยความสะดวกในเรื่องนี้ฉันสำรองและกู้คืนฐานข้อมูลเก่าเป็นชื่อฐานข้อมูลใหม่ล้างข้อมูลเพื่อให้สามารถใช้เป็นฐานข้อมูลใหม่สำหรับซอฟต์แวร์ไคลเอ็นต์ ฉันยังเปลี่ยนชื่อคอมพิวเตอร์เนื่องจากเรามักจะทำเพื่อระบุแต่ละเซิร์ฟเวอร์ด้วยหมายเลขไซต์ ฐานข้อมูลสามารถเชื่อมต่อโดยซอฟต์แวร์ไคลเอนต์ได้ดีและฉันสามารถเข้าสู่ระบบโดยตรงไปยัง SQL Server ได้ดี อย่างไรก็ตามหนึ่งในงานตัวแทนการเซิร์ฟเวอร์ SQL ของฉันล้มเหลวโดยมีข้อผิดพลาดในบันทึกเหตุการณ์: SQL Server ที่กำหนดเวลางาน 'รีเซ็ตทุกคืน' (0x4F76FDFFF6DFFE4EA0DE4A70252AD3BD) - สถานะ: ล้มเหลว - เรียกใช้เมื่อ: 2012-02-07 08:10:05 - ข้อความ: งานล้มเหลว ไม่สามารถระบุได้ว่าเจ้าของ (ไซต์ -19 \ Admin) ของงานคืนใหม่มีการเข้าถึงเซิร์ฟเวอร์หรือไม่ (เหตุผล: ไม่สามารถรับข้อมูลเกี่ยวกับกลุ่ม Windows NT / ผู้ใช้ 'ไซต์ -19 \ Admin' รหัสข้อผิดพลาด 0x534 [SQLSTATE 42000] ( …

3
การจัดเก็บเวลาด้วยมิลลิวินาทีในฐานข้อมูล
เพียงคำถามสั้น ๆ เกี่ยวกับการจัดเก็บ "เวลา" ในฐานข้อมูล ฉันบันทึกเวลาที่ผู้ใช้ทำงานซึ่งอยู่ในรูปแบบ 00: 00: 00: 00 (ชั่วโมง, นาที, วินาที, มิลลิวินาที) เดิมทีฉันจะเก็บมันไว้TIMEแต่แล้วฉันก็รู้ว่า MySQL ไม่รองรับมิลลิวินาทีในประเภทนี้ ฉันจะจัดเก็บเวลาจริงที่ถ่ายจากนาฬิกาจับเวลาของผู้ใช้ไม่ใช่เวลาที่พวกเขาวิ่งและสิ้นสุด (นี่จะถูกคำนวณก่อนที่จะถูกแทรก) ประเภทเขตข้อมูลที่ดีที่สุดที่จะใช้คืออะไร ผมคิดว่าอย่างใดอย่างหนึ่งdoubleหรือfloatแต่ผมไม่แน่ใจว่าจะทำงานอย่างไร

2
PostgreSQL สามารถสร้างฐานข้อมูลได้หรือไม่
ฉันกำลังย้ายโค้ดจาก Sybase ไปยัง PostgreSQL บางเวอร์ชัน นี่เป็นแอปพลิเคชั่น C ที่ใช้ไลบรารีไคลเอ็นต์ Sybase แนวทางของฉันคือการเขียนเลเยอร์การแปลที่แปลการโทรไปdbsqlexec()ที่PQexec()(ตัวอย่าง) ส่วนนั้นทำงานได้เป็นส่วนใหญ่ ปรากฏว่ามีการตั้งค่าฐานข้อมูล Sybase ในลักษณะที่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (เกี่ยวกับชื่อวัตถุฐานข้อมูล) ตัวอย่างเช่นมีทั้งWIDGETตารางและwidgetตาราง ดูเหมือนว่าการประชุมในแอพพลิเคชั่นนี้นั้นชื่อ all-uppercase จะระบุตารางข้อมูลจริงในขณะที่ชื่อตัวพิมพ์เล็กจะถูกใช้เป็นตารางชั่วคราวเมื่อทำการประมวลผล ตามโครงสร้างคำศัพท์ 4.1 " คำสำคัญและตัวระบุที่ไม่มีเครื่องหมายเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่" ฉันรู้ว่าฉันสามารถอ้างตัวระบุสองครั้งเพื่อปิดการใช้งานการพับอัตโนมัติเป็นตัวพิมพ์เล็ก แต่ฉันไม่ต้องการทำด้วยตนเอง ของรหัสที่ใช้ฐานข้อมูลนี้ มีวิธีการตั้งค่า PostgreSQL เพื่อปิดใช้งานตัวพิมพ์เล็กอัตโนมัตินี้สำหรับตัวระบุวัตถุฐานข้อมูลหรือไม่? ทางเลือกของฉันคือการเขียนโค้ดที่ตรวจสอบคำสั่ง SQL แต่ละคำสั่งและใส่เครื่องหมายอัญประกาศคู่รอบตัวระบุทุกตัว (นั่นไม่ใช่คำหลัก)

3
การรวมด้านซ้ายของ Oracle และตำแหน่งข้อผิดพลาด
CREATE TABLE "ATABLE1" ( "COLUMN1" VARCHAR2(20 BYTE), "COLUMN2" VARCHAR2(20 BYTE) ); CREATE TABLE "ATABLE2" ( "COLUMN1" VARCHAR2(20 BYTE), "COLUMN2" VARCHAR2(20 BYTE) ); Insert into ATABLE1 (COLUMN1,COLUMN2) values ('A','1'); Insert into ATABLE1 (COLUMN1,COLUMN2) values ('B','2'); Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A',null); Insert into ATABLE2 (COLUMN1,COLUMN2) values ('A','1'); Insert into ATABLE2 (COLUMN1,COLUMN2) …
10 oracle  join 

1
กู้คืนฐานข้อมูล mysql เดียวบนระบบที่ถูกจำลองแบบ master-slave ที่ไม่ว่าง
กำลังมองหากลยุทธ์หรือเครื่องมือในการจัดการกับการกู้คืนฐานข้อมูลเดียวไปยังจุดในเวลาในระบบจำลองแบบไม่ว่าง ฉันมี 12 ฐานข้อมูลที่ทำงานบนเซิร์ฟเวอร์ MySQL 5.0.77 2 ตัวในการกำหนดค่าแบบจำลองต้นแบบทาส การถ่ายโอนข้อมูลเต็มรูปแบบถูกนำมาใช้เป็นทาสแบบอ่านอย่างเดียวทุกวันและมีการทิ้ง SQL ที่เพิ่มขึ้นพร้อมกับการสำรองข้อมูลเหล่านี้นอกสถานที่และตรวจสอบสถานะการจำลองแบบ แก้ไข: ตารางเป็นส่วนผสมของ InnoDB และ myISAM ดังนั้นจึงไม่มีโซลูชันเฉพาะเครื่องยนต์ เมื่อได้รับความล้มเหลวอย่างสมบูรณ์ของเซิร์ฟเวอร์หลักฉันสามารถทำลายการจำลองแบบและส่งเสริมเซิร์ฟเวอร์ทาสฉันยังมีตัวเลือกในการสร้างเซิร์ฟเวอร์ใหม่และกำหนดค่าจากการสำรองข้อมูล FULL ล้ำหน้าแล้วใช้ส่วนต่างที่เกิดขึ้นจากทาสทุกชั่วโมง อย่างไรก็ตามฉันกังวลว่าจะจัดการกับความล้มเหลวบางส่วนหรือความล้มเหลวของฐานข้อมูลเดียวได้อย่างไร ฉันคิดว่า 2 สถานการณ์ที่ค่อนข้างน่าจะเป็น ฐานข้อมูล 7 (ตัวอย่าง) เกิดความเสียหายยังคงให้บริการคำขอบางอย่างจนกว่าจะมีคนสังเกตว่ามันเสียหรือการแจ้งเตือนจากไฟล์บันทึก ... แบบสอบถามบางอย่างเช่นฐานข้อมูลแบบหล่นตารางวาง "อัปเดตที่ ... " พิมพ์แบบสอบถามแบบบอร์กเป็นฐานข้อมูลเดียวหรือบางส่วนในนั้น ในขณะนี้ฉันมีไฟล์ดัมทั้งหมดเป็นไฟล์ FULL- $ DATE-all-database.sql.gz และดิฟเฟอเรนเชียลที่สามารถนำไปใช้กับการถ่ายโอนข้อมูล FULL ได้เช่น DIFF- $ DATE-all-database.sql.gz ในการกู้คืนฐานข้อมูล 7 ไปยังจุดเวลาจะต้องมี grep ผ่านไฟล์ FULL …

6
เชื่อมต่อเซิร์ฟเวอร์มิเรอร์ SQL Server 2008 R2 อีกครั้ง
เซิร์ฟเวอร์ failover มีสถานะ (Mirror, Disconnected, In recovery) และเซิร์ฟเวอร์หลักมีสถานะ (Principal, Disconnected) กระบวนการเชื่อมต่อเซิร์ฟเวอร์เหล่านี้ใหม่เป็นอย่างไร

5
ความสำคัญของแผนภาพ ER
ฉันเป็นนักเรียนและฉันกำลังพัฒนาหลายโครงการในฐานะส่วนหนึ่งของสถาบันการศึกษาของฉัน ในขณะที่พัฒนาฐานข้อมูลสำหรับหนึ่งในโครงการเราเจอสถานการณ์ที่เราคิดว่า ERD จำเป็นหรือไม่ ตอนนี้ไม่ใช่ว่าเราทุกคนจะเห็นด้วยกับการพัฒนา ERD ก่อนแล้วจึงพัฒนาฐานข้อมูลจากนั้น คนส่วนใหญ่ชอบที่จะพัฒนาฐานข้อมูลแบบบินด้วยวาจาตามความต้องการของระบบบนกระดาษโดยตรง ตอนนี้ฉันเป็นผู้ติดตามหลักการของฐานข้อมูลอย่างเข้มงวด ฉันคิดว่าฐานข้อมูลควรพัฒนาจาก ERD เท่านั้น ดังนั้นฉันต้องการรู้ดังต่อไปนี้: อุตสาหกรรมปฏิบัติตามหลักการเหล่านี้หรือไม่? ฉันเพิ่งเสียเวลาในการพัฒนา ERD หรือไม่? การพัฒนา ERD มีประโยชน์อย่างไร?

2
SQL Server กำหนดลำดับการล็อคในขณะที่เลือกตารางได้อย่างไร
ฉันมีสองโพรซีเดอร์ที่เก็บไว้ซึ่งหยุดชะงักเมื่อระบบอยู่ระหว่างการโหลด Proc A กำลังเลือกจากตารางในขณะที่ Proc B กำลังแทรกลงในตารางเดียวกัน กราฟล็อคแสดงว่า Proc A มีการล็อกหน้าโหมด S ที่ Proc B ต้องการล็อคโหมด IX สำหรับ Proc A อย่างไรก็ตามกำลังรอการล็อกหน้าโหมด S สำหรับหน้าอื่นที่ Proc B มีการล็อกหน้าโหมด IX แล้ว . เห็นได้ชัดว่าสามารถแยกออกได้ด้วยการทำให้แน่ใจว่าทั้งคิวรีล็อคหน้าในตารางในลำดับเดียวกัน แต่ฉันไม่สามารถหาวิธีที่จะทำ คำถามของฉันคือSQL Server จะกำหนดลำดับที่จะล็อคหน้าในขณะที่ทำ INSERTs และ SELECT และวิธีที่คุณสามารถปรับเปลี่ยนพฤติกรรมนี้ได้อย่างไร

1
ไม่สามารถสแกนด้วย NOLOCK ต่อเนื่องจากการเคลื่อนไหวของข้อมูล
เราเรียกใช้ SQL Server 2000 และเราได้รับข้อผิดพลาดเล็กน้อยทุกคืน Could not continue scan with NOLOCK due to data movement แบบสอบถามที่ส่งข้อผิดพลาดนี้เป็นแบบสอบถามที่ซับซ้อนขนาดใหญ่ที่รวมอยู่เหนือตารางโหล ข้อมูลพื้นฐานของเราสามารถอัปเดตบ่อยครั้ง 'การปฏิบัติที่ดีที่สุด' ทางวัฒนธรรมคือในอดีตการแนะนำของNOLOCKคำแนะนำที่เพิ่มประสิทธิภาพและการปรับปรุงพร้อมกัน แบบสอบถามนี้ไม่จำเป็นต้องมีความแม่นยำ 100% เช่นเราจะทนต่อการอ่านที่สกปรก ฯลฯ อย่างไรก็ตามเราพยายามที่จะเข้าใจว่าเหตุใดฐานข้อมูลจึงโยนข้อผิดพลาดนี้ถึงแม้ว่าเราจะมีคำแนะนำการล็อคเหล่านี้ทั้งหมด ทุกคนสามารถให้ความกระจ่างเกี่ยวกับเรื่องนี้ - อ่อนโยนฉันเป็นโปรแกรมเมอร์ไม่ใช่ DBA :) PS: เราได้ใช้การแก้ไขที่กล่าวถึงด้านล่างก่อนหน้านี้: http://support.microsoft.com/kb/815008

2
Shared Lock ออกเมื่อ IsolationLevel.ReadUncommitted
ฉันอ่านว่าถ้าฉันใช้ IsolationLevel.ReadUncommitted แบบสอบถามไม่ควรออกล็อคใด ๆ อย่างไรก็ตามเมื่อฉันทดสอบสิ่งนี้ฉันเห็นล็อคต่อไปนี้: Resource_Type: HOBT Request_Mode: S (แชร์แล้ว) ล็อค HOBT คืออะไร มีอะไรเกี่ยวข้องกับ HBT (ฮีปหรือล็อคแบบทรีไบนารี) ทำไมฉันยังคงได้ล็อค S ฉันจะหลีกเลี่ยงการล็อคที่ใช้ร่วมกันได้อย่างไรเมื่อทำการสอบถามโดยไม่เปิดตัวเลือกสแนปชอตระดับการแยก ฉันกำลังทดสอบสิ่งนี้ใน SQLServer 2008 และตัวเลือกสแนปชอตตั้งเป็นปิด แบบสอบถามจะทำการเลือกเท่านั้น ฉันเห็นว่าจำเป็นต้องใช้ Sch-S แม้ว่า SQL Server จะไม่แสดงในแบบสอบถามที่ล็อคอยู่ ทำไมมันถึงยังมีการล็อคที่ใช้ร่วมกันอยู่? ตาม: ระดับการแยกธุรกรรม SET (Transact-SQL) ธุรกรรมที่รันที่READ UNCOMMITTEDระดับจะไม่ออกการล็อกที่ใช้ร่วมกันเพื่อป้องกันไม่ให้ธุรกรรมอื่นแก้ไขข้อมูลที่อ่านโดยธุรกรรมปัจจุบัน ดังนั้นฉันสับสนเล็กน้อย

1
ทำไม mysql 5.5 ช้ากว่า 5.1 (linux โดยใช้ mysqlslap)
my.cnf (5.5 และ 5.1 เหมือนกัน): back_log=200 max_connections=512 max_connect_errors=999999 key_buffer=512M max_allowed_packet=8M table_cache=512 sort_buffer=8M read_buffer_size=8M thread_cache=8 thread_concurrency=4 myisam_sort_buffer_size=128M interactive_timeout=28800 wait_timeout=7200 MySQL 5.5: ..mysql5.5/bin/mysqlslap -a --concurrency=10 --number-of-queries 5000 --iterations=5 -S /tmp/mysql_5.5.sock --engine=innodb Benchmark Running for engine innodb Average number of seconds to run all queries: 15.156 seconds Minimum number of seconds to run …

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