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

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

2
เครื่องมือข้อมูล SQL Server และฟังก์ชั่นพาร์ติชัน
ฉันกำลังสร้างสถานการณ์การโหลดหน้าต่างบานเลื่อนและฟังก์ชันพาร์ติชันจะเปลี่ยนขอบเขตตลอดเวลา ฉันได้สร้างฟังก์ชั่นพาร์ติชั่นบางตัวในโครงการฐานข้อมูล SQL Server Data Tools (SSDT) ​​ที่มีขอบเขตเริ่มต้นบางอย่างฮาร์ดโค้ดไว้ อย่างไรก็ตามเมื่อเวลาผ่านไปและการเปลี่ยนแปลงขอบเขตของฟังก์ชั่นพาร์ติชั่นฐานข้อมูล SSDT ในอนาคตจะเผยแพร่กลับไปเป็นขอบเขตดั้งเดิม มีวิธีการจัดการสถานการณ์นี้อย่างสง่างามอาจปิดการใช้งานการเผยแพร่ฟังก์ชั่นพาร์ทิชันหรือไม่ ฉันได้ลองเปลี่ยนคุณสมบัติBuild Actionของฟังก์ชั่นพาร์ติชันใน SSDT จากค่าเริ่มต้นBuildเป็นNoneแต่แล้วโครงการล้มเหลวในการสร้างเนื่องจากการอ้างอิงที่ขาดหายไปในวัตถุที่ขึ้นกับ
16 sql-server 

6
การทำให้ฐานข้อมูลเป็นปกติอยู่หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันได้รับการเลี้ยงดูโรงเรียนเก่า - ที่เราเรียนรู้การออกแบบสคีมาฐานข้อมูลก่อนที่ชั้นธุรกิจของแอปพลิเคชัน (หรือใช้ OOAD สำหรับทุกอย่างอื่น) ฉันค่อนข้างดีกับการออกแบบ schemas (IMHO :) และปรับให้เป็นมาตรฐานเท่านั้นเพื่อลบความซ้ำซ้อนที่ไม่จำเป็นออกไป แต่ส่วนใหญ่มันไม่ใช่ ด้วยการถือกำเนิดของกรอบ ORM บางอย่างเช่น Ruby ActiveRecord หรือ ActiveJDBC (และอีกไม่กี่ฉันจำไม่ได้ แต่ฉันแน่ใจว่ามีมากมาย) ดูเหมือนว่าพวกเขาชอบที่จะมีคีย์ตัวแทนสำหรับทุกตารางแม้ว่าบางคนมีคีย์หลักเช่น 'email' - ทำลาย 2NF เอาล่ะ โอเคฉันเข้าใจไม่มากเกินไป แต่มันก็เกิดขึ้นในประสาทของฉัน (เกือบ) เมื่อ ORM เหล่านี้ (หรือโปรแกรมเมอร์) บางคนไม่ยอมรับ 1-1 หรือ 1-0 | 1 (เช่น 1 ถึง …


4
PostgreSQL 9.1 Hot Backup Error: ระบบฐานข้อมูลเริ่มต้นขึ้น
ฉันได้ทำงานกับการสำรองข้อมูลที่ร้อนแรงสำหรับ Postgres 9.1 มานานแล้วและพบปัญหาที่สอดคล้องกัน หลังจากรีสตาร์ท Postgres บนเซิร์ฟเวอร์ทาสไฟล์บันทึก pgstartup และไฟล์บันทึกประจำวันภายใต้ไดเร็กทอรี pg_log จะอ่านโดยไม่มีข้อผิดพลาด อย่างไรก็ตามเมื่อฉันพยายามเข้าสู่ฐานข้อมูลโดยใช้คำสั่ง psql ฉันได้รับข้อผิดพลาด: FATAL: ระบบฐานข้อมูลเริ่มต้นขึ้นแล้ว ไฟล์ recovery.conf จะไม่หันไปใช้ recovery.done ฉันค้นคว้าข้อผิดพลาดนี้อย่างครอบคลุมและพบคำตอบเดียวกัน: ฐานข้อมูลยังไม่ได้ปิดอย่างสมบูรณ์ก่อนที่ฉันจะพยายามเริ่ม Postgres ใหม่ วิธีเดียวที่ฉันรีสตาร์ท Postgres คือผ่านservice postgresql-9.1 restartหรือ/etc/init.d/postgresql-9.1 restartคำสั่ง หลังจากฉันได้รับข้อผิดพลาดนี้ฉันจะฆ่ากระบวนการทั้งหมดและลองรีสตาร์ทฐานข้อมูลอีกครั้งและยังคงได้รับข้อผิดพลาดเดิมอีกครั้ง ฉันกำลังสูญเสียที่จะไปจากที่นี่และวิธีการแก้ไขปัญหานี้ ด้านล่างเป็นกระบวนการที่แน่นอนที่ฉันได้ทำเพื่อให้การสำรองข้อมูลเสร็จสมบูรณ์ การกำหนดค่าเซิร์ฟเวอร์หลัก: pg_hba.conf เพิ่มบรรทัด: การจำลองแบบโฮสต์ postgres เชื่อถือ IPAddressOfSlaveServer postgresql.conf: wal_level = hot_standby max_wal_senders = 5 Listen_address = '*' …
16 postgresql 

3
ทำซ้ำ RDS-MySQL ไปยังโฮสต์ที่ไม่ใช่อเมซอนหรือไม่
ฉันมีฐานข้อมูล MySQL ขนาดใหญ่พอสมควร (5.1) ที่ทำงานใน Amazon เป็นอินสแตนซ์ของ RDS ฉันกำลังทำงานเพื่อย้ายมันออกจากอเมซอน ในการทำเช่นนั้นได้อย่างราบรื่นฉันต้องการตั้งค่าฮาร์ดแวร์ใหม่เป็นแบบจำลอง RDS แบบอ่านอย่างเดียว ฉันรู้ว่า RDS รองรับการจำลองแบบภายใน RDS มีวิธีการกำหนดค่าให้ทำซ้ำไปยังโฮสต์ที่ไม่ได้อยู่ใน RDS หรือไม่?

2
ดัชนีในคีย์หลักไม่ได้ใช้ในการเข้าร่วมง่าย
ฉันมีคำนิยามตารางและดัชนีต่อไปนี้: CREATE TABLE munkalap ( munkalap_id serial PRIMARY KEY, ... ); CREATE TABLE munkalap_lepes ( munkalap_lepes_id serial PRIMARY KEY, munkalap_id integer REFERENCES munkalap (munkalap_id), ... ); CREATE INDEX idx_munkalap_lepes_munkalap_id ON munkalap_lepes (munkalap_id); ทำไมไม่มีดัชนีใน munkalap_id ที่ใช้ในการสืบค้นต่อไปนี้? EXPLAIN ANALYZE SELECT ml.* FROM munkalap m JOIN munkalap_lepes ml USING (munkalap_id); QUERY PLAN Hash …

1
ความแตกต่างของอนุสาวรีย์ในเวลาดำเนินการระหว่างแบบสอบถามเมื่อใช้คำใบ้แบบสอบถาม RECOMPILE
ฉันมีแบบสอบถามที่เหมือนกันเกือบสองรายการที่ทำงานบนอินสแตนซ์ SQL Server 2005 เดียวกัน: อันแรกคือSELECTเคียวรีดั้งเดิมตามที่สร้างโดย LINQ (ฉันรู้ว่าฉันรู้ ... ฉันไม่ใช่นักพัฒนาแอปพลิเคชันเพียง DBA :) คนที่สองเหมือนกันกับคนแรกที่เพิ่มOPTION (RECOMPILE)ในตอนท้าย ไม่มีอะไรเปลี่ยนแปลง คนแรกใช้เวลา 55 วินาทีทุกครั้งที่วิ่ง คนที่สองใช้เวลา 2 วินาที ชุดผลลัพธ์ทั้งคู่เหมือนกัน ทำไมคำใบ้นี้ทำให้เกิดประสิทธิภาพที่เพิ่มขึ้นอย่างมาก? รายการหนังสือออนไลน์บนRECOMPILEไม่มีคำอธิบายโดยละเอียดมาก: สั่งให้โปรแกรมฐานข้อมูลเซิร์ฟเวอร์ SQL เพื่อยกเลิกแผนที่สร้างขึ้นสำหรับแบบสอบถามหลังจากที่ดำเนินการบังคับให้เครื่องมือเพิ่มประสิทธิภาพแบบสอบถามเพื่อรวบรวมแผนแบบสอบถามอีกครั้งในครั้งถัดไปที่ดำเนินการแบบสอบถามเดียวกัน โดยไม่ต้องระบุ RECOMPILE เครื่องมือฐานข้อมูลจะเก็บแผนแบบสอบถามและนำมาใช้ใหม่ เมื่อรวบรวมแผนแบบสอบถามคำแนะนำแบบสอบถาม RECOMPILE ใช้ค่าปัจจุบันของตัวแปรท้องถิ่นใด ๆ ในแบบสอบถามและหากแบบสอบถามอยู่ภายในกระบวนงานที่เก็บไว้ค่าปัจจุบันจะถูกส่งไปยังพารามิเตอร์ใด ๆ RECOMPILE เป็นทางเลือกที่มีประโยชน์ในการสร้างโพรซีเดอร์ที่เก็บไว้ซึ่งใช้ส่วนคำสั่ง WITH RECOMPILE เมื่อมีคิวรีย่อยของเคียวรีภายในโพรซีเดอร์ที่เก็บไว้เท่านั้นแทนที่จะต้องคอมไพล์ที่เก็บไว้ทั้งหมด สำหรับข้อมูลเพิ่มเติมโปรดดูการคอมไพล์ใหม่ของกระบวนงานที่เก็บไว้ RECOMPILE ยังมีประโยชน์เมื่อคุณสร้างแผนที่นำทาง สำหรับข้อมูลเพิ่มเติมดูการปรับการค้นหาในแอปพลิเคชันที่ปรับใช้โดยใช้คำแนะนำแผน เนื่องจากแบบสอบถามของฉันมีตัวแปรในเครื่องจำนวนมากฉันเดาว่า SQL Server สามารถปรับให้เหมาะสม (อย่างจริงจัง) …

5
ทดสอบว่าคอลัมน์ใด ๆ เป็น NULL
ฉันพยายามที่จะคิดออกแบบสอบถามง่าย ๆ ที่ฉันสามารถทำได้เพื่อทดสอบว่าตารางขนาดใหญ่มีรายการของรายการที่มีค่าว่างอย่างน้อยหนึ่ง (NULL / เปล่า) ในคอลัมน์ใด ๆ ฉันต้องการบางสิ่งบางอย่าง SELECT * FROM table AS t WHERE ANY(t.* IS NULL) ฉันไม่ต้องการที่จะทำ SELECT * FROM table AS t WHERE t.c1 = NULL OR t.c2 = NULL OR t.c3 = NULL นี่จะเป็นข้อความค้นหาขนาดใหญ่

2
สร้างมุมมองในฐานข้อมูลที่ระบุด้วย SQL แบบไดนามิก?
ฉันกำลังเขียน sql แบบไดนามิกเพื่อวางและสร้างมุมมองในฐานข้อมูลอื่น ดังนั้นฉันจึงเขียนว่า: set @CreateViewStatement = ' USE ['+ @DB +']; CREATE VIEW [dbo].[MyTable] AS SELECT ........something exec (@CreateViewStatement) มันทำให้ฉันมีข้อผิดพลาด: 'สร้างมุมมอง' ต้องเป็นคำสั่งแรกในชุดการสืบค้น ถ้าฉันลบคำสั่ง USE DATABASE มันใช้งานได้ดี แต่ฐานข้อมูลไม่ได้ระบุอีกต่อไป .... ฉันจะแก้ปัญหานี้ได้อย่างไร

1
ฐานข้อมูลเก็บค่าคีย์ดัชนี (บนดิสก์) สำหรับฟิลด์ความยาวผันแปรได้อย่างไร
บริบท คำถามนี้เกี่ยวข้องกับรายละเอียดการใช้งานระดับต่ำของดัชนีในระบบฐานข้อมูล SQL และ NoSQL โครงสร้างที่แท้จริงของดัชนี (B + tree, hash, SSTable และอื่น ๆ ) นั้นไม่เกี่ยวข้องเนื่องจากคำถามนั้นเกี่ยวข้องกับคีย์ที่เก็บอยู่ในโหนดเดียวของการใช้งานเหล่านั้น พื้นหลัง ใน SQL (เช่น MySQL) และ NoSQL (CouchDB, MongoDB, ฯลฯ ) ฐานข้อมูลเมื่อคุณสร้างดัชนีในคอลัมน์หรือสาขาเอกสาร JSON ของข้อมูลสิ่งที่คุณกำลังจริงทำให้เกิดฐานข้อมูลในการทำคือการสร้างหลักรายการที่เรียงลำดับทั้งหมด ค่าเหล่านั้นพร้อมกับไฟล์ออฟเซ็ตลงในไฟล์ข้อมูลหลักที่บันทึกที่เกี่ยวข้องกับค่านั้นอยู่ (เพราะความเรียบง่ายฉันอาจโบกมือให้รายละเอียดที่ลึกลับอื่น ๆ ของความหมายเฉพาะ) ตัวอย่าง SQL แบบง่าย ๆ พิจารณาตาราง SQL มาตรฐานที่มีคีย์หลักแบบง่าย 32 บิตที่เราสร้างดัชนีในเราจะจบลงด้วยดัชนีบนดิสก์ของคีย์จำนวนเต็มเรียงและเชื่อมโยงกับออฟเซต 64 บิตลงในไฟล์ข้อมูลที่ บันทึกชีวิตเช่น: id | offset -------------- 1 …
16 mongodb  index  nosql  couchdb 

3
PostgreSQL 9.1 Streaming Replication ไม่ล่าช้าโดยไม่มีการเก็บถาวร WAL หรือไม่
บริบท: สมมติว่าขณะใช้ Streaming Replication / Hot Standby บนคลัสเตอร์ Postgres 9.1 โหนดสแตนด์บายจะหยุดทำงาน มันค้างอยู่หนึ่งวันในช่วงเวลานั้น DML จำนวนมากจะเกิดขึ้นกับต้นแบบ recovery.conf ของสแตนด์บายไม่มีรายการ 'restore_command' (สำหรับการกู้คืนจากไฟล์เจอร์นัล WAL) แต่ไม่มีสตริง 'primary_conninfo' (สำหรับการสตรีมมิ่งการจำลองแบบ) คำถาม: ถ้าฉันเริ่มต้นสแตนด์บายอีกครั้งหลังจากวันของการเปลี่ยนแปลงต้นแบบ มันจะ "ทัน" (ในที่สุดจะเข้าสู่สถานะที่สะท้อนต้นแบบ) โดยใช้การจำลองแบบการสตรีมเท่านั้นหรือไม่ หรือฉันต้องเปิดใช้งานการเก็บถาวรไฟล์ WAL และปล่อยให้มันใช้ไฟล์ที่เก็บถาวรในช่วงที่ไฟดับเพื่อให้แน่ใจว่าสกุลเงิน? ฉันได้ตรวจสอบเอกสารการจำลองแบบ WAL การเก็บถาวร / การสตรีมมิงที่นี่แล้วและมันบอกว่าคุณไม่ต้องเปิดใช้งานทั้งการเก็บถาวร WAL และการจำลองแบบสตรีมมิ่ง แต่ก็ไม่มีความชัดเจนว่าจะเกิดขึ้นหรือไม่ ขอบคุณ!

1
MySQL คืนค่าผลลัพธ์จากกระบวนงานที่เก็บไว้อย่างไร
ฉันพยายามทำให้ขั้นตอนการจัดเก็บเพื่อใช้ในเว็บแอปพลิเคชัน สำหรับผมแล้วดูเหมือนว่าคำสั่งสุดท้ายที่อยู่ในขั้นตอนการจัดเก็บของ MySQL จะเป็นสิ่งที่ได้รับการปฏิบัติตามชุดผลลัพธ์ของขั้นตอนนั้น น่าเสียดายที่ดูเหมือนว่ามีการอ้างอิงในเอกสาร MySQL ที่กล่าวว่ากระบวนการสามารถส่งคืนชุดผลลัพธ์ได้หลายชุด พฤติกรรมนี้ทำงานอย่างไร ฉันจะบอกเซิร์ฟเวอร์ MySQL ได้อย่างไรว่าฉันต้องการส่งคืนชุดผลลัพธ์เดียวเท่านั้น? (ตัวอย่างเช่นฉันมีข้อความค้นหาที่เลือกและแทรกไม่กี่ฉันไม่ต้องการบอกลูกค้าเกี่ยวกับส่วนแทรก แต่ฉันต้องการให้ลูกค้าได้รับชุดผลลัพธ์ของ SELECT .... )

2
วิธีที่มีประสิทธิภาพมากที่สุดในการรับช่วงวันที่
วิธีที่มีประสิทธิภาพมากที่สุดในการดึงข้อมูลช่วงวันที่ด้วยโครงสร้างตารางเป็นอย่างไร create table SomeDateTable ( id int identity(1, 1) not null, StartDate datetime not null, EndDate datetime not null ) go สมมติว่าคุณต้องการช่วงสำหรับทั้งสองและStartDate EndDateดังนั้นในคำอื่น ๆ ถ้าStartDateตกอยู่ในระหว่าง@StartDateBeginและ@StartDateEndและEndDateตกอยู่ในระหว่าง@EndDateBeginและ@EndDateEndแล้วทำบางสิ่งบางอย่าง ฉันรู้ว่ามีสองสามวิธีที่จะไปเกี่ยวกับเรื่องนี้ แต่สิ่งที่แนะนำมากที่สุดคืออะไร?

4
SQL Server 2005/2008 UTF-8 Collation / Charset
ฉันไม่สามารถค้นหาตัวเลือกโดยตรงเพื่อตั้งค่าการUTF-8รวมCollations/Charsetsใน SQL Server 2005/2008 เช่นเดียวกับที่เป็นไปได้ในการตั้งค่าในเอ็นจิน SQL อื่น แต่ใน SQL Server 2005/2008 มีการเปรียบเทียบละตินและ SQL เท่านั้น มีตัวเลือกในการบังคับ / ติดตั้ง collations / charsets เหล่านี้ในเอ็นจิน SQL Server (สำหรับทั้งสองเวอร์ชัน) 2005/2008 บน Win2008 OS

3
มีวิธีใดที่ดีกว่าในการบันทึก MySQL InnoDB ในอนาคต?
ฉันมีข้อผิดพลาด InnoDB นี้ใน MySQL 5.0 Mysqld หยุดทำงานหมดจด แต่ฉันจัดการที่จะสูญเสีย ib_logfile0 & ib_logfile1 หลังจากนั้น หลังจากการเริ่มต้นใหม่ทั้งหมด InnoDB ได้ทำ "การกู้คืนความผิดพลาด" แล้ว ฉันผ่านธุรกิจ innodb_force_recovery = 4 ซ่อมแซมตาราง MyISAM ที่แขวนและตอนนี้การจำลองแบบก็พร้อมใช้งานนอกเหนือไปจากนี้ คำมั่นสัญญาใหญ่: 111116 15:49:36 InnoDB: Error: page 393457 log sequence number 111 561,760,232 InnoDB: is in the future! Current system log sequence number 70 3,946,969,851. InnoDB: Your …
16 mysql  innodb 

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