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

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

3
การเปรียบเทียบคอลัมน์ที่มี NULLS - มีวิธีที่สวยงามกว่านี้ไหม
ฉันรู้ว่าคุณไม่สามารถเปรียบเทียบค่ากับ NULL และคาดหวังผลลัพธ์โดยไม่ต้องเพิ่มบางอย่างในรหัสต่อไปนี้ ... SELECT * FROM A INNER JOIN B ON A.ID = B.ID WHERE A.STRING <> B.STRING OR (A.STRING IS NULL AND B.STRING IS NOT NULL) OR (A.STRING IS NOT NULL AND B.STRING IS NULL) OR A.DT <> B.DT OR (A.DT IS NULL AND B.DT IS NOT NULL) …
16 sql-server  null 

2
ตารางไม่ถูกสร้างภายใต้ dbo schema
เมื่อสร้างตารางใน SSMS ฉันรู้ว่าถ้าคุณรันคำสั่งต่อไปนี้: CREATE TABLE [tableName]; ตารางจะถูกสร้างภายใต้สคีมาของคุณเอง (ไม่ใช่ dbo) ดังนั้นเพื่อสร้างมันภายใต้สคี dbo คุณจะต้องพูดอย่างชัดเจนเช่นนี้: CREATE TABLE [dbo].[tableName]; ไม่มีใครรู้วิธี (เช่นการตั้งค่าทั้งเซิร์ฟเวอร์) เพื่อให้เมื่อมีการสร้างตารางส่วน [dbo] ไม่จำเป็นต้องระบุ

4
มีวิธีย่อ 'Auto_Fix' ผู้ใช้กำพร้าทั้งหมดในฐานข้อมูล SQL Server 2008 R2 หรือไม่
ตรงไปตรงมาเพื่อแก้ไขผู้ใช้ SQL กำพร้าคนเดียวเพื่อเข้าสู่ระบบโดยใช้: EXEC sp_change_users_login 'Auto_Fix', 'ผู้ใช้' ฉันสามารถเขียนสคริปต์นี้ได้ แต่มีกระบวนการจัดเก็บที่มีอยู่ซึ่งพยายามแก้ไขผู้ใช้ที่ไม่ได้ใช้งานทุกคนในฐานข้อมูลที่กำหนดโดยอัตโนมัติหรือไม่

2
มีวิธีง่ายๆใน PL / pgSQL เพื่อตรวจสอบว่าแบบสอบถามไม่ส่งคืนผลลัพธ์หรือไม่?
ฉันกำลังทดลองกับ PL / pgSQL เล็กน้อยและต้องการทราบว่ามีวิธีที่สง่างามกว่านี้ในการทำสิ่งนี้หรือไม่: select c.data into data from doc c where c.doc_id = id and c.group_cur > group_cur order by c.id desc limit 1; EXCEPTION WHEN NO_DATA_FOUND THEN select c.data into data from doc c where c.doc_id = id and c.global_cur > global_cur order by c.id desc limit …

5
ไม่สามารถวางข้อ จำกัด ที่ไม่มีอยู่และไม่สามารถสร้างได้
ในขณะที่ทดสอบสคริปต์การย้ายข้อมูลบางส่วนด้วยสำเนาข้อมูลการผลิต (สคริปต์ทำงานได้ดีกับข้อมูลการพัฒนา) ฉันพบสถานการณ์ที่น่าสงสัย ข้อ จำกัด มีการเปลี่ยนแปลงดังนั้นฉันจึงออกคำสั่ง DROP + เพิ่ม: ALTER TABLE A_DUP_CALLE DROP CONSTRAINT A_DUP_CALLE_UK1; ALTER TABLE A_DUP_CALLE ADD CONSTRAINT A_DUP_CALLE_UK1 UNIQUE ( CONTROL_ID, CALLE_AYTO_DUPL ) ENABLE; คำสั่ง DROP ทำงานได้ดี แต่ ADD ล้มเหลว ตอนนี้ฉันเข้าสู่วงจรอุบาทว์ ฉันไม่สามารถวางข้อ จำกัด ได้เนื่องจากไม่มีอยู่ (การดรอปเริ่มต้นทำงานตามที่คาดไว้): ORA-02443: ไม่สามารถวางข้อ จำกัด - ข้อ จำกัด ที่ไม่มีอยู่ และฉันไม่สามารถสร้างได้เพราะมีชื่ออยู่แล้ว: ORA-00955: ชื่อนี้ถูกใช้โดยวัตถุที่มีอยู่แล้ว ฉันพิมพ์A_DUP_CALLE_UK1ลงในช่องค้นหาของนักพัฒนา SQL …

2
โอเพ่นซอร์สระบบธุรกิจอัจฉริยะ / โซลูชั่น DWH [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Exchange Administrators Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันสงสัยว่าคำถามนี้ยังไม่ได้ถาม Google มีผลลัพธ์น้อยมากสำหรับฉันที่ไม่แสดงเครื่องมือคุณภาพสูง มีโอเพ่นซอร์สอะไรบ้าง (แถมฟรีก็โอเค) สำหรับคลังข้อมูลและเครื่องมือระบบธุรกิจอัจฉริยะโดยเฉพาะ? คุณมีประสบการณ์อย่างไรกับพวกเขา ฉันมีหลักสูตรในโปรแกรมหลักของฉันและเราทำงานกับ MS Business Intelligence และ MSSQL เป็นที่เก็บข้อมูลใน Data Warehouse ตอนนี้ฉันต้องการได้รับเพิ่มเติมในหัวข้อนี้ด้วยเครื่องมือที่ "เปิด" มีเครื่องมือใดที่สามารถเปรียบเทียบได้สำหรับ Business Intelligence (ส่วนใหญ่เป็นฐานข้อมูลที่เป็นอิสระ) และคุณมีประสบการณ์ใด ๆ หรือไม่ แก้ไขด้วยความเห็นของ Marian ต่อคำตอบของ Stephanie ฉันเห็นว่าฉันได้ตั้งคำถามผิด ฉันทราบว่า DWH เป็นเพียงฐานข้อมูล "การเพิ่มประสิทธิภาพการรายงาน" คำอธิบายของสเตฟานีชัดเจนมาก ฉันถูกรบกวนมากขึ้นว่าจะรับข้อมูลในรูปแบบที่ได้รับการปรับปรุงด้วยซอฟต์แวร์ BI / เครื่องมือ …

2
MySQL - ความแตกต่างระหว่างการใช้ count (*) และ information_schema.tables สำหรับการนับแถว
ฉันต้องการวิธีที่รวดเร็วในการนับจำนวนแถวในตารางของฉันที่มีหลายล้านแถว ฉันพบโพสต์ " MySQL: วิธีที่เร็วที่สุดในการนับจำนวนแถว " ใน Stack Overflow ซึ่งดูเหมือนว่าจะช่วยแก้ปัญหาของฉันได้ Bayuahให้คำตอบนี้: SELECT table_rows "Rows Count" FROM information_schema.tables WHERE table_name="Table_Name" AND table_schema="Database_Name"; ซึ่งฉันชอบเพราะมันดูเหมือนการค้นหาแทนที่จะสแกนดังนั้นมันควรจะเร็ว แต่ฉันตัดสินใจทดสอบกับมัน SELECT COUNT(*) FROM table เพื่อดูว่ามีความแตกต่างด้านประสิทธิภาพมากน้อยเพียงใด น่าเสียดายที่ฉันได้รับคำตอบต่าง ๆดังที่แสดงด้านล่าง: คำถาม ทำไมคำตอบต่างกันประมาณ 2 ล้านแถว? ฉันเดาว่าการค้นหาที่ดำเนินการสแกนเต็มตารางนั้นเป็นจำนวนที่แม่นยำกว่า แต่มีวิธีที่ฉันสามารถรับหมายเลขที่ถูกต้องได้โดยไม่ต้องเรียกใช้แบบสอบถามที่ช้านี้หรือไม่ ฉันวิ่งANALYZE TABLE data_302ซึ่งเสร็จสมบูรณ์ภายใน 0.05 วินาที เมื่อฉันเรียกใช้แบบสอบถามอีกครั้งตอนนี้ฉันได้รับผลลัพธ์ที่ใกล้เคียงกับ 34384599 แถว แต่ก็ยังไม่เหมือนกันselect count(*)กับ 34906061 แถว วิเคราะห์ตารางที่ส่งคืนทันทีและดำเนินการในพื้นหลังหรือไม่ ฉันรู้สึกว่ามันคุ้มค่าที่จะกล่าวถึงนี่คือฐานข้อมูลทดสอบและไม่ได้ถูกเขียนถึงในขณะนี้ …
16 mysql  mysql-5.6  count 

2
วิธีที่ดีที่สุดในการออกแบบฐานข้อมูลและตารางเพื่อเก็บบันทึกการเปลี่ยนแปลง?
ฉันต้องตั้งค่าคุณลักษณะประวัติในโครงการเพื่อติดตามการเปลี่ยนแปลงก่อนหน้านี้ สมมติว่าฉันมีสองตารางตอนนี้: NOTES TABLE (id, userid, submissionid, message) SUBMISSIONS TABLE (id, name, userid, filepath) ตัวอย่าง:ฉันมีแถวในบันทึกย่อและผู้ใช้ต้องการเปลี่ยนข้อความ ฉันต้องการติดตามสถานะก่อนการเปลี่ยนแปลงและหลังการเปลี่ยนแปลง อะไรจะเป็นวิธีที่ดีที่สุดในการตั้งค่าคอลัมน์ในแต่ละตารางเหล่านี้ซึ่งจะบอกว่ารายการนั้นเป็นรายการ "เก่า" 0 ถ้าใช้งานอยู่หรือ 1 ถ้าถูกลบ / มองไม่เห็น ฉันยังต้องการสร้างAUDIT TRAILตารางhistory ( ) ซึ่งเก็บidสถานะก่อนหน้าidของสถานะใหม่ซึ่งตารางนี้ id เหล่านั้นเกี่ยวข้องกับอะไร

4
การซิงค์สองฐานข้อมูลใน SQL Server
ฉันมีฐานข้อมูล SQL Server สองฐาน หนึ่งคือไคลเอนต์ (โปรแกรมประยุกต์ของ Windows) และที่สองอยู่บนเซิร์ฟเวอร์ ฉันต้องการซิงค์ฐานข้อมูลทั้งสองนี้บ่อยๆ (เช่นทุก 2 นาที!) ฉันได้อ่านเกี่ยวกับวิธีการซิงค์ที่แตกต่างกันเช่นการจำลอง, การประทับเวลา, ตารางบันทึกการใช้ทริกเกอร์, Microsoft Sync Framework และอื่น ๆ ที่จริงฉันไม่ชอบใช้วิธีการซิงค์ซึ่งอาจเป็นกล่องดำ (เช่นการจำลองแบบ) เพราะฉันไม่ต้องการให้ตารางเฉพาะของ SQL Server ถูกบล็อกในขณะที่ฉันกำลังอัปเดตและซิงค์กับเซิร์ฟเวอร์ วิธีใดที่คุณคิดว่าฉันควรใช้ในกรณีเช่นนี้? โปรดจำไว้ว่าทุก ๆ นาทีฉันต้องส่งการเปลี่ยนแปลงตารางหลายครั้งจากไคลเอนต์ไปยังเซิร์ฟเวอร์และดึงข้อมูลการเปลี่ยนแปลงสองตารางจากเซิร์ฟเวอร์ ฉันได้พบวิธีการที่แปลก แต่ใหม่ เป็นไปได้หรือไม่ที่ฉันจะบันทึกขั้นตอนการดำเนินการที่จัดเก็บไว้ทั้งหมด (สำหรับที่ต้องการ) ในไคลเอนต์และส่งพารามิเตอร์ที่มีใน.sqlไฟล์ไปยังเซิร์ฟเวอร์และดำเนินการที่นั่น? จะเกิดขึ้นบนเซิร์ฟเวอร์และส่งไปยังลูกค้า คุณคิดว่านี่เป็นวิธีที่ง่าย แต่มีประโยชน์หรือไม่? โปรดแนะนำวิธีการที่มีประโยชน์หากคุณทำได้ ขอบคุณมาก. แก้ไข: โปรดจำไว้ว่านี่เป็นการซิงโครไนซ์แบบเรียลไทม์และทำให้มันพิเศษ หมายความว่าเมื่อผู้ใช้ไคลเอ็นต์กำลังใช้ตารางกระบวนการซิงโครไนซ์กับเซิร์ฟเวอร์จะต้องเกิดขึ้นทุก ๆ นาทีดังนั้นจึงไม่มีการล็อกตารางใด ๆ

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

2
รับเอาต์พุตโดยละเอียดของงาน SQL Agent
เรามีงานตัวแทนของเซิร์ฟเวอร์ SQL ที่รันแผนการบำรุงรักษาเพื่อทำดัชนีฐานข้อมูลทั้งหมดบนเซิร์ฟเวอร์อีกครั้ง เมื่อเร็ว ๆ นี้สิ่งนี้ล้มเหลว แต่ประวัติงานไม่ได้ให้ข้อมูลเพียงพอที่จะวินิจฉัยปัญหา ในประวัติงานมันระบุงานล้มเหลว ผู้ใช้งานถูกเรียกใช้โดย foo \ bar ขั้นตอนสุดท้ายในการรันคือขั้นตอนที่ 1 (สร้างดัชนีใหม่) ในหน้าต่างรายละเอียดมีหลายข้อความในแบบฟอร์มต่อไปนี้: Executing query "ALTER INDEX [something] ON [a...".: 0% complete End Progress Progress: 2015-03-15 22:51:23.67 Source: Rebuild Index Task คำสั่ง SQL ที่กำลังทำงานถูกตัดทอนและฉันจะสมมติว่าผลลัพธ์ของคำสั่งนั้นถูกตัดทอนด้วยทำให้ฉันไม่สามารถระบุได้ว่าคำสั่งใดที่ล้มเหลวและเพราะเหตุใด มีวิธีใดที่จะแยกข้อความทั้งหมดของข้อความเหล่านี้ออกหรือไม่

2
mysqldump: มีข้อผิดพลาด: 1044: การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'ชื่อผู้ใช้' @ 'localhost' ไปยังฐานข้อมูล 'databasename' เมื่อใช้ LOCK TABLES
mysqldump: มีข้อผิดพลาด: 1044: การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'ชื่อผู้ใช้' @ 'localhost' ไปยังฐานข้อมูล 'databasename' เมื่อใช้ LOCK TABLES ฉันสามารถเข้าสู่ระบบได้อย่างถูกต้องและสามารถสำรองข้อมูลเต็มรูปแบบจากเครื่องมือ SQLyog แต่เมื่อฉันพยายามที่จะสำรองข้อมูลจาก MySQL Enterprise Workbencg จากนั้นได้รับข้อความแสดงข้อผิดพลาด mysqldump: มีข้อผิดพลาด: 1044: การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'myuserid' @ '%' ไปยังฐานข้อมูล 'mydatabasename' เมื่อทำ LOCK TABLES การดำเนินการล้มเหลวด้วย exitcode 2 และสถานะการเชื่อมต่อ MySQL ก็โอเค สถานะ mysql>; mysql.exe Ver 14.14 Distrib 5.6.19 สำหรับ Win32 (x86) รหัสการเชื่อมต่อ: 23921 ฐานข้อมูลปัจจุบัน: …
16 mysqldump 

3
ทำไม pg_restore ไม่สนใจ - สร้าง? ข้อผิดพลาด: ล้มเหลว: FATAL: ฐานข้อมูล“ new_db” ไม่มีอยู่
ฉันพยายามเรียกใช้คำสั่งต่อไปนี้: sshpass -p "pass" ssh x@1.2.3.4 "pg_dump -Fc -U foo some_db" | pg_restore --create --dbname=new_db ฉันเข้าใจ: failed: FATAL: database "new_db" does not exist

4
วิธีทำ pg_dump ข้ามส่วนขยาย
นี่คือ 9.3 แต่ฉันสามารถจำสิ่งที่ simillar เกิดขึ้นตั้งแต่ 7.x ดังนั้นฉันสร้างฐานข้อมูลและติดตั้งส่วนขยาย plpgsql ลงไป ต่อมาฉันสร้าง pg_dump และก่อนที่จะกู้คืนเป็น databse ฉันแน่ใจว่ามันมีส่วนขยาย plpgsql ด้วย จากนั้นเมื่อการกู้คืนข้อมูลนี้เกิดขึ้น: pg_restore: creating EXTENSION plpgsql pg_restore: creating COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] Error while PROCESSING TOC: pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] could …

2
psql: FATAL: ขออภัยมีลูกค้ามากเกินไปแล้ว
ฉันพบข้อผิดพลาดนี้เมื่อพยายามเข้าถึงเว็บไซต์ที่ใช้ฐานข้อมูล postgresql หรือแม้กระทั่งเมื่อใช้ยูทิลิตี psql หรือ pgadmin3 ฐานข้อมูลของฉันถูกตั้งค่าให้จัดการ 150 การเชื่อมต่อสูงสุด: # SHOW max_connections; max_connections ----------------- 150 (1 row) หลังจากรีบูตเซิร์ฟเวอร์ ubuntu ที่เว็บไซต์ของฉันเปิดอยู่ (ซึ่งเป็นสิ่งเดียวที่ใช้การเชื่อมต่อ) ฉันเห็นจำนวนการเชื่อมต่อปัจจุบันคือ 140: # select count(*) from pg_stat_activity; count ------- 140 (1 row) ฉันไม่เข้าใจว่าการเชื่อมต่อจำนวนมากอย่างกระทันหันหลังจากรีบูตเซิร์ฟเวอร์ของฉัน ดังนั้นฉันจะตรวจสอบกิจกรรม postgresql: # SELECT * FROM pg_stat_activity; และฉันเห็นคอลัมน์มากกว่า 100 คอลัมน์ที่มีข้อความค้นหาที่เหมือนกันซึ่งมีลักษณะดังนี้: SELECT "reports".* FROM "reports" WHERE (("reports"."time" …

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