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

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

3
sqlpackage.exe ไม่สนใจ BlockOnPossibleDataLoss
ฉันมี dacpac ที่ตั้งค่า BlockOnPossibleDataLoss ตั้งค่าเป็นเท็จอย่างไรก็ตามการปรับใช้ถูกบล็อกเมื่อฉันเรียกใช้ sqlpackage.exe โดยบอกฉันว่า "คอลัมน์ [a] กำลังถูกทิ้งข้อมูลอาจสูญหายได้" อย่างไรก็ตามเมื่อฉันใช้โพรไฟล์การปรับใช้เดียวกันที่แน่นอนและเผยแพร่จาก Visual Studio 2012 มันจะผ่าน

2
วิธีที่เร็วที่สุดในการเปลี่ยนประเภทข้อมูลคีย์ดัชนีที่จัดทำตาราง 600GB จาก INT เป็น BIGINT
ฉันต้องการเปลี่ยนประเภทข้อมูลจาก INT เป็น BIGINT ในตาราง MySQL 600GB คอลัมน์มีดัชนีที่ไม่ซ้ำกัน ฉันอาจจะดีกับ INT ที่ไม่ได้ลงนาม แต่ฉันคิดว่าการเปลี่ยนแปลงนั้นมิฉะนั้น BIGINT จะเจ็บปวดเหมือนกัน เอ็นจิ้นของตารางคือ InnoDB อะไรจะง่ายขึ้น: แก้ไขตาราง โครงสร้างการคัดลอกและ INSERT INTO (SELECT *) ตารางการดัมพ์และการเปลี่ยนนิยามตารางไฟล์ดัมพ์ มีอะไรอีกไหม ปรับปรุง: ตามที่ร้องขอ MySQL เวอร์ชั่น 5.5.15 ไม่มีคีย์ต่างประเทศและสร้างตาราง: CREATE TABLE `tbl` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `created_at` datetime NOT NULL, `tid` bigint(20) …

3
การจัดทำดัชนี PK GUID ใน SQL Server 2012
นักพัฒนาของฉันได้ติดตั้งแอปพลิเคชันของพวกเขาเพื่อใช้ GUID เป็น PK สำหรับตารางทั้งหมดของพวกเขาและโดยค่าเริ่มต้น SQL Server ได้ตั้งค่าดัชนีคลัสเตอร์บน PK เหล่านี้ ระบบนี้ค่อนข้างใหม่และตารางที่ใหญ่ที่สุดของเรามีมากกว่าหนึ่งล้านแถว แต่เรากำลังดูการจัดทำดัชนีของเราและต้องการให้สามารถปรับขนาดได้อย่างรวดเร็วเนื่องจากอาจมีความจำเป็นในอนาคตอันใกล้ ดังนั้นความโน้มเอียงแรกของฉันคือการย้ายดัชนีคลัสเตอร์ไปยังเขตข้อมูลที่สร้างขึ้นซึ่งเป็นตัวแทนขนาดใหญ่ของ DateTime อย่างไรก็ตามวิธีเดียวที่ฉันสามารถสร้าง CX ที่ไม่เหมือนใครคือการรวมคอลัมน์ GUID ใน CX นี้ แต่เรียงลำดับโดยสร้างขึ้นก่อน นี่จะทำให้คีย์การทำคลัสเตอร์กว้างเกินไปและจะเพิ่มประสิทธิภาพสำหรับการเขียนหรือไม่ การอ่านมีความสำคัญเช่นกัน แต่การเขียนอาจเป็นปัญหาที่ใหญ่กว่าในตอนนี้

1
คำสั่ง MySQL ทำการสืบค้นฐานข้อมูล MyISAM ทั้งหมด
ฉันจะขอบคุณถ้าใครสามารถช่วยฉันในสิ่งที่เป็นคำสั่งที่เหมาะสมใน MySQL เพื่อค้นหาฐานข้อมูลทั้งหมดที่มีเครื่องมือ "MyISAM" ฉันต้องแปลง DB & ทุกตารางจาก MyISAM เป็น InnoDB
13 mysql  innodb  myisam 

2
pg_upgrade พารามิเตอร์การกำหนดค่าที่ไม่รู้จัก“ unix_socket_directory”
ฉันพยายามอัพเกรด Postgresql จาก 9.2 เป็น 9.3 ใน Fedora 18 โดยใช้คำสั่งนี้เป็นผู้ใช้ postgres $ pg_upgrade -b /bin -B /usr/pgsql-9.3/bin -d /var/lib/pgsql/data -D /var/lib/pgsql/9.3/data/ -j 2 -u postgres ข้อผิดพลาดในบันทึก คำสั่ง: "/ bin / pg_ctl" -w -l "pg_upgrade_server.log" -D "/ var / lib / pgsql / data" -o "-p 50432 -b -c Listen_addresses = …

3
การตัดการเชื่อมต่อเครือข่ายหยุดการสืบค้นหรือไม่
ฉันเพิ่งดำเนินการแบบสอบถามแบบใช้ปรับปรุงข้อมูลกับระเบียน 100,000 รายการ ฉันรู้ว่าฉันทำผิดพลาดในขณะที่แบบสอบถามกำลังทำงานและถอดสายเคเบิลเครือข่ายอย่างรวดเร็ว ทำแบบสอบถามการปรับปรุงหรือไม่ หยุดการประมวลผลและย้อนกลับอย่างสมบูรณ์หรือไม่ ดำเนินการต่อไปจนแล้วเสร็จและส่งมอบหรือไม่ หยุดการประมวลผลและออกจากแถวเป้าหมายเพียงบางส่วนเท่านั้นหรือไม่

6
วิธีเพิ่มคอลัมน์ในตารางขนาดใหญ่ใน MySQL
ฉันเป็นนักพัฒนา PHP ดังนั้นอย่าเข้มงวด ฉันมีตารางขนาดใหญ่ ~ 5.5gb dump PM ของเราตัดสินใจที่จะสร้างคอลัมน์ใหม่เพื่อดำเนินการคุณสมบัติใหม่ ตารางคือ InnoDB ดังนั้นสิ่งที่ฉันลอง: เปลี่ยนตารางในหน้าจอพร้อมล็อคตาราง เอา ~ 30 ชั่วโมงและไม่มีอะไร ดังนั้นฉันแค่หยุดมัน ครั้งแรกที่ฉันทำผิดเพราะฉันไม่ได้จบการทำธุรกรรมทั้งหมด แต่ครั้งที่ 2 ไม่มีมัลติเลค copy to tmp tableสถานะเป็น เนื่องจากฉันต้องใช้การแบ่งพาร์ติชันสำหรับตารางนี้เราจึงตัดสินใจทำการดัมพ์เปลี่ยนชื่อและสร้างตารางด้วยชื่อเดียวกันและโครงสร้างใหม่ แต่การถ่ายโอนข้อมูลกำลังทำสำเนาอย่างเข้มงวด (อย่างน้อยฉันก็ไม่พบสิ่งอื่นใด) ดังนั้นฉันจึงเพิ่มการถ่ายโอนข้อมูลคอลัมน์ใหม่ด้วยsedและสอบถาม แต่มีข้อผิดพลาดแปลก ๆ เกิดขึ้น ฉันเชื่อว่ามันเกิดจากชุดอักขระ ตารางในไฟล์ UTF-8 และกลายเป็น ASCII sedสหรัฐอเมริกาหลังจากที่ ดังนั้นฉันจึงได้รับข้อผิดพลาด (ไม่ทราบคำสั่ง '\' ') จากข้อมูล 30% ดังนั้นนี่เป็นวิธีที่ไม่ดี ตัวเลือกอื่น ๆ ในการทำสิ่งนี้ให้สำเร็จและเพิ่มประสิทธิภาพความเร็ว (ฉันสามารถทำได้ด้วยสคริปต์ …
13 mysql  innodb 

3
วิธีดูสิ่งที่แคชในหน่วยความจำใน SQL Server 2008
มีวิธีหาแคชใน SQL Server 2008 R2 หรือไม่? ฉันได้พบบทความที่ดีต่อไปนี้: http://blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache อย่างไรก็ตามฉันต้องการทราบจำนวนข้อมูล (เช่นเป็นเปอร์เซ็นต์และ KB) ของแต่ละตารางและดัชนี มีวิธีง่ายๆในการรับข้อมูลดังกล่าวหรือไม่?

1
วิธีการย้ายโฟลเดอร์ของอินสแตนซ์ของ SQL Server LocalDB จากตำแหน่งเริ่มต้น
ฉันได้รับข้อผิดพลาดหลายที่มีLocalDB( ข้อผิดพลาดในการเริ่มต้น , ไม่สามารถสร้างฐานข้อมูลจาก SQL Server Studio จัดการและหลาย ปัญหาเมื่อพยายามที่จะเรียกคืนการสำรอง) และไม่มีการแก้ไขผมพบว่าจะช่วยอะไร สำหรับฉันดูเหมือนว่าข้อผิดพลาดทั้งหมดมีรากในการอนุญาตไม่ได้ตั้งค่าอย่างถูกต้อง ตอนนี้สคริปต์การสร้างตาราง DDL ง่าย ๆ ทำงานได้ดีจาก SQL Server Management Studio และสร้างฐานข้อมูลในรูทของโฟลเดอร์บัญชีผู้ใช้ของฉัน ( ดังอธิบายไว้ที่นี่ ) อย่างไรก็ตามโฟลเดอร์อินสแตนซ์ (อยู่ที่D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instancesแม้เมื่อติดตั้งSQL Server Express ด้วยบริการขั้นสูงฉันระบุโฟลเดอร์ DATA ในตำแหน่งอื่น - ที่.mdfเก็บไฟล์SQL Server Express มาตรฐานเท่านั้นแต่ไม่ใช่LocalDBอินสแตนซ์) ดูเหมือนว่ามีปัญหาเกี่ยวกับการอนุญาต (ตรงกันข้ามกับบัญชี รูท) และเพื่อให้มีไฟล์ฐานข้อมูลอยู่ในตำแหน่งหนึ่งในโครงการของฉันฉันต้องการย้ายโฟลเดอร์อินสแตนซ์ไปที่อื่น เป็นไปได้ไหม ฉันไม่พบแม้แต่รายการรีจิสทรีที่เกี่ยวข้อง ฉันใช้ SQL Server …

1
ข้อความค้นหาช้าไม่ได้บันทึก
ฉันพยายามเปิดใช้งานการบันทึกแบบสอบถามช้าบนเซิร์ฟเวอร์ของเราเพื่อระบุแบบสอบถามใด ๆ ที่สามารถใช้การเพิ่มประสิทธิภาพ ฟังดูง่ายพอ แต่ไฟล์ของฉันไม่ได้ถูกเขียนลงไป ฉันไม่ได้รับข้อผิดพลาดหรืออะไรทำนองนั้นมันก็ดูเหมือนจะไม่ได้เข้าสู่การสืบค้นช้า ฉันจำได้ว่าต้องรีสตาร์ท mysql หลังจากเปลี่ยนแปลงการกำหนดค่าของฉัน ฉันใช้ MySQL Ver 5.1.61 นี่คือสิ่งที่ฉันมีใน my.cnf: slow-query-log=1 slow-query-log-file=/var/logs/my.slow.log long_query_time=1 ไฟล์ /var/logs/my.slow.log มี mysql ในฐานะเจ้าของ, นอกจากนี้เพื่อประโยชน์ในการดีบั๊กฉันให้อ่าน / เขียนทั้งหมดบนล็อกไฟล์ ฉันมี long_query_time ตั้งค่าเป็น 1 ในด้านบนเพราะฉันแค่ต้องการดูว่ามันทำงาน ฉันลองตั้งค่าให้ต่ำลง (เช่น 0.3) แต่ฉันยังไม่ได้บันทึกอะไรเลย ฉันรู้ว่าข้อความค้นหาที่แอปของฉันทำงานนั้นใช้เวลานานกว่า 1 วินาทีและฉันได้เรียกใช้ข้อความค้นหาโดยเจตนา ( SELECT sleep(10);) ในเทอร์มินัลเพื่อทำการทดสอบและบันทึกยังว่างเปล่า ฉันได้ดูเอกสารจากสิ่งที่ฉันเห็นว่ามันควรจะทำงานได้ ใครมีข้อเสนอแนะเกี่ยวกับสิ่งที่ฉันทำผิด? คำแนะนำใด ๆ ที่จะได้รับการชื่นชมขอบคุณมาก! แก้ไข: ตามที่ถามในความคิดเห็นที่ฉันวิ่งแบบสอบถาม: `SELECT …

4
มันจะเป็นการดีกว่าหรือที่จะแยกเคียวรีใหญ่ออกเป็นเคียวรีเล็ก ๆ หลายรายการ?
มีสถานการณ์ที่ต้องมีแบบสอบถามที่ใหญ่มากเข้าร่วมหลายตารางพร้อมกับคำสั่งย่อยเลือกในพวกเขาเพื่อสร้างผลลัพธ์ที่ต้องการ คำถามของฉันคือเราควรพิจารณาใช้การสืบค้นที่เล็กกว่าหลายข้อและนำการดำเนินการทางตรรกะไปสู่ชั้นแอปพลิเคชันโดยการสอบถาม DB ในการโทรมากกว่าหนึ่งครั้ง ตัวอย่างเช่นพิจารณาแบบสอบถามต่อไปนี้: SELECT * FROM `users` WHERE `user_id` IN (SELECT f2.`friend_user_id` FROM `friends` AS f1 INNER JOIN `friends` AS f2 ON f1.`friend_user_id` = f2.`user_id` WHERE f2.`is_page` = 0 AND f1.`user_id` = "%1$d" AND f2.`friend_user_id` != "%1$d" AND f2.`friend_user_id` NOT IN (SELECT `friend_user_id` FROM `friends` WHERE `user_id` = …

2
การรีเซ็ตลำดับของ SQL Server 2012
ฉันกำลังอยู่ระหว่างการทดสอบและสร้างตารางเฉพาะที่ใช้ประโยชน์จากSEQUENCEวัตถุ ในกระบวนการนี้ฉันกำลังทดสอบการเติมตารางด้วยจำนวนบรรทัดการแทรกนับหมื่น (เนื่องจากฉันไม่คุ้นเคยกับวิธีการตั้งโปรแกรมนี้) ปัญหาที่ฉันเห็นด้วยตารางนี้คือเมื่อฉันเริ่มการทดสอบประชากรอื่นการSEQUENCEตั้งค่าไม่ได้กลับไปเป็นหมายเลขแรกที่ฉันต้องการ (ซึ่งคือ 1) เมื่อฉันต้องการเรียกใช้การทดสอบใหม่อีกครั้งฉันจะลบตารางที่เป็นปัญหาแล้วจึงเรียกใช้สิ่งต่อไปนี้: DROP SEQUENCE foo.fee; GO DROP SCHEMA foo; GO เมื่อฉันต้องการเรียกใช้การทดสอบอีกครั้งฉันใช้คำสั่งSCHEMA& SEQUENCEคำสั่งต่อไปนี้ซึ่งเรียกใช้ตามลำดับด้านล่าง: CREATE SCHEMA foo; GO CREATE SEQUENCE foo.fee START WITH 1 INCREMENT BY 1 NO CYCLE NO CACHE; GO ฉันสร้างตารางแล้ว: CREATE TABLE foo.sample_table_with_data (order_number bigint PRIMARY KEY NOT NULL, sample_column_one nvarchar(max) NULL, sample_column_two nvarchar(max) …

4
วิธีที่รวดเร็วในการตรวจสอบสองตารางกับแต่ละอื่น ๆ
เรากำลังทำกระบวนการ ETL เมื่อทุกคนพูดและทำมีกลุ่มของตารางที่ควรจะเหมือนกัน เป็นวิธีที่เร็วที่สุดในการตรวจสอบว่าตารางเหล่านั้น (บนเซิร์ฟเวอร์ที่แตกต่างกันสอง) เป็นจริงเหมือนกัน ฉันกำลังพูดถึงสคีมาและข้อมูล ฉันสามารถแฮชบนโต๊ะเป็นตัวของตัวเองเหมือนที่ฉันจะสามารถใช้กับไฟล์แต่ละไฟล์หรือกลุ่มไฟล์ - เพื่อเปรียบเทียบไฟล์หนึ่งกับอีกไฟล์หนึ่ง เรามีการเปรียบเทียบข้อมูล Red-Gate แต่เนื่องจากตารางที่เป็นปัญหานั้นมีแถวนับล้านแถวฉันจึงต้องการบางสิ่งที่มีประสิทธิภาพมากกว่า วิธีการหนึ่งที่ชั่วช้าฉันนี้ใช้ความคิดสร้างสรรค์ของคำสั่งสหภาพ แต่ฉันต้องการสำรวจแนวคิดแฮชอีกเล็กน้อยหากเป็นไปได้ โพสต์คำตอบปรับปรุง สำหรับผู้เล่นในอนาคต ... นี่คือแนวทางที่แน่นอนที่ฉันได้รับ มันทำงานได้ดีเรากำลังทำทุกตารางในแต่ละฐานข้อมูล ขอบคุณคำตอบด้านล่างสำหรับชี้ฉันในทิศทางที่ถูกต้อง CREATE PROCEDURE [dbo].[usp_DatabaseValidation] @TableName varchar(50) AS BEGIN SET NOCOUNT ON; -- parameter = if no table name was passed do them all, otherwise just check the one -- create …

4
การเข้าสู่ระบบไม่ได้ซิงค์กับกลุ่มความพร้อมใช้งาน
เรามี 2 เซิร์ฟเวอร์ในกลุ่ม AlwaysOn ในขณะที่บัญชีผู้ใช้ภายในแต่ละฐานข้อมูลที่ซิงโครไนซ์มีอยู่บนทั้งสองเซิร์ฟเวอร์ แต่อินสแตนซ์ระดับฐานข้อมูลจะมีอยู่ในหนึ่งในเซิร์ฟเวอร์เท่านั้น เช่น DBINSTANCE-> Security-> การเข้าสู่ระบบจะหายไปในเซิร์ฟเวอร์เดียว ดังนั้นเมื่อมีความล้มเหลวฉันได้รับความล้มเหลวในการเข้าสู่ระบบบนเซิร์ฟเวอร์ที่สอง (ซึ่งไม่มีการเข้าสู่ระบบในระดับอินสแตนซ์ที่เกี่ยวข้อง) ฉันจะเอาชนะปัญหานี้ได้อย่างไร ฉันควรจะตั้งค่าบัญชีผู้ใช้ด้วยวิธีพิเศษหรือไม่?

2
รับค่าคงที่สำหรับการเลือก
ฉันจำเป็นต้องทำSELECTแบบสอบถามที่ฉันได้รับค่าของฟิลด์ "เงิน" ฟิลด์นี้ไม่มีอยู่จริงในฐานข้อมูล ฉันต้องการคิวรีเพื่อส่งคืนฟิลด์นี้ด้วยค่าคงที่ ในกรณีนี้ค่าเป็น USD ฉันจะคืนค่าคงที่ในSELECTคำสั่งได้อย่างไร
13 mysql 

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