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

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

1
การเปิดใช้งาน“ log_queries_not_using_indexes” ปิดใช้งาน“ long_query_time” หรือไม่
ผมสังเกตเห็นว่าใน Mysql เมื่อเปิดใช้งานlog_queries_not_using_indexes, slow_query_logและไฟล์บันทึกแบบสอบถามสร้างช้าจะมีจำนวนมากของคำสั่งแม้ว่าเวลาแบบสอบถามน้อยกว่าlong_query_timelong_query_time ดูเหมือนว่าเมื่อlog_queries_not_using_indexesเปิดใช้งานแล้ว Mysql จะบันทึกการสืบค้นทั้งหมดที่ไม่ได้ใช้ดัชนีไม่ว่า "long_query_time" นั้นคืออะไร มีวิธีที่จะเอาชนะสิ่งนี้หรือไม่? ฉันหมายถึงมีวิธีบันทึกข้อความค้นหาทั้งหมดที่ใช้เวลานานกว่าlong_query_timeไม่ว่าจะใช้ดัชนีหรือไม่

1
เป็นไปได้หรือไม่ที่จะบันทึกค่าพารามิเตอร์ขาเข้าในการเรียกโพรซีเดอร์ขณะติดตามใน SQL Server Profiler?
ใช้ SQL Server Profiler (ฉันใช้ SQL Server 2012) ฉันพยายามสร้างการติดตามที่มีประโยชน์ที่แสดงค่าพารามิเตอร์ไม่ใช่เฉพาะ SQL ที่มีชื่อตัวแปร ขั้นตอนที่เก็บไว้จะนำข้อมูลคลังมารวมเพื่อสร้างผลลัพธ์ที่มีค่าอย่างยิ่งและฉันพยายามบันทึกพฤติกรรมที่มีอยู่แล้วดังนั้นฉันจึงสามารถทดสอบหน่วยกำหนดมันอย่างชัดเจนและกำหนดให้เป็นสิ่งที่มีสติ ฉันมีโพรซีเดอร์ที่เก็บไว้ซึ่งดำเนินการโพรซีเดอร์ย่อย 54 พารามิเตอร์ในลูปที่โพรซีเดอร์ที่เก็บสร้างเคอร์เซอร์จากนั้นก็ทำลูปสักครู่ นี่คือมุมมองที่เรียบง่าย: CREATE PROCEDURE [dbo].[OuterProcedure] ( @ProductCode varchar(8), -- 41 more parameters omitted ) AS SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SET NOCOUNT ON DECLARE @AboutFourHundredLocalvariables -- omit about 400 local variable declarations. -- OMIT ABOUT …

1
Workspace หน่วยความจำภายใน
ตามหนังสือการอ่านของฉันเกี่ยวกับ SQL Server 2008 Internals และการแก้ไขปัญหา (ยืมมาจากห้องสมุดท้องถิ่นในรัฐอิลลินอยส์) โดย Christian Bolton, Brent Ozar เป็นต้นฉันกำลังพยายามทำความเข้าใจและยืนยันบนเซิร์ฟเวอร์ SQL และการค้นหาบนเว็บฉันจะขอบคุณถ้ามีคน สามารถยืนยันหรือแก้ไขความเข้าใจของฉัน ทุกแบบสอบถามหรือการดำเนินการที่ต้องการให้หน่วยความจำแบบสอบถามจะต้องมีหน่วยความจำพื้นที่ทำงาน ในข้อความค้นหาทั่วไปที่ใช้การเรียงลำดับการจับคู่การแฮชการขนาน (ไม่แน่ใจเกี่ยวกับเรื่องนี้) การแทรกจำนวนมาก (ไม่แน่ใจ) การสร้างดัชนีใหม่เป็นต้นจะต้องใช้หน่วยความจำของพื้นที่ทำงานแบบสอบถาม หน่วยความจำพื้นที่ทำงานเป็นส่วนหนึ่งของพูลบัฟเฟอร์ของ SQL Server (ถูกจัดสรรเป็นส่วนหนึ่งของบัฟเฟอร์พูล) และหน่วยความจำสูงสุดของพื้นที่ทำงานคือ 75% ของหน่วยความจำที่จัดสรรให้กับบัฟเฟอร์พูล โดยค่าเริ่มต้นแบบสอบถามเดียวไม่สามารถรับหน่วยความจำเวิร์กสเปซเกินกว่า 25% (ใน SQL 2008 / SQL 2012 - ควบคุมโดยกลุ่มภาระงานเริ่มต้นของผู้ว่าการทรัพยากรออกจากกล่อง) ค้นหาการยืนยันความเข้าใจของฉัน 1) ระบบการพิจารณาที่มี 48 GB RAM และหน่วยความจำเซิร์ฟเวอร์สูงสุดที่กำหนดค่าเป็น 40 GB หมายความว่าหน่วยความจำสูงสุดของพื้นที่ทำงานถูก จำกัด …

2
การนำเข้าสกีมาไปยังพื้นที่ตารางใหม่หรือที่แตกต่างกัน
มีวิธีที่สะดวกในการนำเข้าสคีมาใน Oracle 11gR2 โดยใช้สเปซใหม่หรือที่แตกต่างจากที่มาของข้อมูลหรือไม่? ตัวอย่างเช่นฉันได้ส่งออก BLOG_DATA จาก OLDDB ซึ่งข้อมูลผู้ใช้ทั้งหมดถูกเก็บไว้ในพื้นที่ตาราง USERS บน NEWDB ฉันต้องการนำเข้า BLOG_DATA schema แต่เก็บวัตถุผู้ใช้ในพื้นที่ตาราง BLOG_DATA สร้างขึ้นเฉพาะสำหรับผู้ใช้นี้ ฉันสร้างผู้ใช้ BLOG_DATA สร้างพื้นที่ตาราง BLOG_DATA และตั้งเป็นพื้นที่เริ่มต้นสำหรับผู้ใช้นั้นและเพิ่มโควต้าไม่ จำกัด ที่เหมาะสม CREATE TABLESPACE blog_data DATAFILE SIZE 1G; CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data; GRANT connect,resource TO blog_data สคีมาถูกส่งออกจาก OLDDB …

2
ทำความเข้าใจกับการเข้ารหัสและสำรองข้อมูล MS SQL Server
ดังนั้นฉันจึงถามในการแชทเกี่ยวกับความปลอดภัยของไฟล์สำรองของ SQL Server ฉันบอกว่าหากผู้โจมตีสามารถเข้าถึงไฟล์. bak ที่ไม่ได้เข้ารหัสซึ่งพวกเขาสามารถเข้าถึงข้อมูลได้ ดังนั้นให้ดูที่สถานการณ์นี้: OPEN SYMMETRIC KEY MySymetricKey DECRYPTION BY CERTIFICATE MyCertificate สังเกตุ - ไม่มีรหัสผ่านที่นี่ แล้วเราเข้ารหัสตารางของเราโดย: UPDATE tbl1 SET namePAss = ENCRYPTBYKEY(KEY_GUID('MySymetricKey'),name) GO ตอนนี้สมมติว่าแฮ็กเกอร์ได้รับbakไฟล์ของฉัน สิ่งที่เขาต้องทำเพื่อดูข้อมูล (ในคอมพิวเตอร์ & เซิร์ฟเวอร์ของเขาเอง) คือ: SELECT convert( NVARCHAR(max), decryptbykey(namePAss)) FROM tbl1 เขาจะยังสามารถเข้าถึงข้อมูลได้หรือไม่

2
วิธีที่ง่ายที่สุดในการย้ายข้อมูลจาก Oracle ไปยัง SQL Server คืออะไร
หนึ่งในผลิตภัณฑ์ของเรารองรับทั้ง Oracle และ SQL Server เป็นแบ็กเอนด์ฐานข้อมูล เรามีลูกค้าที่ต้องการเปลี่ยนจากแบ็กเอนด์ Oracle เป็น Microsoft SQL Server ซึ่งไม่ใช่การเปลี่ยนแปลงตามปกติสำหรับเรา วิธีที่ง่ายที่สุดในการรับข้อมูลทั้งหมดจาก Oracle Schema ทั้งหมดไปยังฐานข้อมูล SQL Server คืออะไร สคีมามีเพียงตารางเก่าธรรมดาและไม่มีอะไรแฟนซี อาจมีหนึ่งหรือสองกระบวนงานที่เก็บไว้ซึ่งเราจะไม่มีปัญหาในการโยกย้ายด้วยมือ ฉันสามารถใช้ SQLDeveloper ของ Oracle เพื่อส่งออกข้อมูลตารางCREATEและINSERTคำสั่ง แต่สิ่งเหล่านี้จะไม่ตรงกับไวยากรณ์ที่ใช้บน SQL Server และฉันไม่ได้รอที่จะแก้ไขข้อผิดพลาดทางไวยากรณ์ด้วยตนเอง

3
ปฏิเสธการเข้าถึง schema ของข้อมูลใน SQL Server
ฉันกำลังมองหาวิธีที่ดีที่สุดในการปิดการเข้าถึงsys.tables/ Information Schemaสำหรับผู้ใช้ / กลุ่มใน SQL Server ฉันพบกระทู้นี้ตั้งแต่ปี 2008 มันแสดงวิธีการปฏิเสธการเข้าถึงโดย[sys].[something]ชอบ: DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole GO แต่ไม่มีวิธีการปิดการเข้าถึงบนInformation Schema: DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole ดูเหมือนว่าจะไม่ทำงาน ฉันจะปิดการใช้งานการเข้าถึง information_schema ได้อย่างไร …

2
รูปแบบการออกแบบ - หนึ่งในหลายตารางหลัก
ฉันเจอสถานการณ์ในฐานข้อมูลบ่อยครั้งที่ตารางที่กำหนดสามารถ FK กับหนึ่งในจำนวนของตารางผู้ปกครองที่แตกต่างกัน ฉันเห็นวิธีแก้ไขปัญหาสองข้อ แต่ก็ไม่เป็นที่พอใจ ฉันอยากรู้ว่าคุณเห็นรูปแบบอื่น ๆ ที่นั่นไหม? มีวิธีที่ดีกว่าที่จะทำหรือไม่ contrived ตัวอย่าง ของ Let Alertsบอกว่าระบบของฉันมี สามารถรับการแจ้งเตือนสำหรับวัตถุที่หลากหลาย - ลูกค้าข่าวสารและผลิตภัณฑ์ การแจ้งเตือนที่กำหนดสามารถเป็นแบบหนึ่งเดียวเท่านั้น ไม่ว่าจะด้วยเหตุผลใดก็ตามลูกค้าบทความและผลิตภัณฑ์กำลังเคลื่อนไหวอย่างรวดเร็ว (หรือแปลเป็นภาษาท้องถิ่น) ดังนั้นจึงไม่สามารถดึงข้อความ / ข้อมูลที่จำเป็นลงใน Alerts เมื่อสร้างการแจ้งเตือน ด้วยการตั้งค่านี้ฉันได้เห็นสองวิธี หมายเหตุ: ด้านล่าง DDL สำหรับ SQL Server แต่คำถามของฉันควรใช้กับ DBMS ใด ๆ โซลูชันที่ 1 - FKeys เป็นค่า Nullable หลายตัว ในโซลูชันนี้ตารางที่เชื่อมโยงไปยังตารางหนึ่งในหลายแห่งมีคอลัมน์ FK หลายแห่ง (เพื่อความกะทัดรัดสั้น DDL ด้านล่างจะไม่แสดงการสร้าง FK) …

2
การดำเนินการของ SQL Server เป็นปัญหา
EXECUTE ASฉันหายไปบางสิ่งบางอย่างในขณะที่พยายามที่จะทำให้การใช้งานขั้นตอนของฉันเก็บไว้ ขั้นตอนการจัดเก็บไว้อ่านข้อมูลจากมวลรวมและส่งผลให้ร้านค้าsource_dbtarget_db ตัว sp อยู่target_dbค่ะ ฉันมีการเข้าสู่ระบบโดยเฉพาะและแมปกับผู้ใช้ทั้งในsource_dbและtarget_dbสำหรับเจ้าของของ sp (ดังนั้นจึงมีผู้ใช้app_agentในsource_dbและในtarget_dbการเข้าสู่ระบบapp_agent) หากฉันเข้าสู่ระบบในฐานะapp_agentและดำเนินการ EXEC target_db.app_agent_schema.import_data ทุกอย่างทำงานได้ดี แต่ถ้าฉันเปลี่ยน ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`) และลองใช้งานมันมันจะพ่น เซิร์ฟเวอร์หลัก "app_agent" ไม่สามารถเข้าถึงฐานข้อมูล "source_db" ภายใต้บริบทความปลอดภัยปัจจุบัน ฉันใช้ SQL Server 2008 ใครช่วยชี้ให้เห็นข้อผิดพลาดของฉัน? ขอบคุณ อัปเดต หลังจากทำวิจัยบางอย่างฉันพบว่าการALTER DATABASE target_db SET TRUSTWORTHY ONแก้ปัญหา แต่ดูเหมือนจะไม่ใช่วิธีที่เหมาะสมสำหรับฉัน ...

1
การลบบันทึก bin ในสภาพแวดล้อมการจำลองแบบ
ฉันมีคำถามเกี่ยวกับการลบบันทึกแบบไบนารีในสภาพแวดล้อมการจำลองแบบ: เรามีสภาพแวดล้อมที่มี 1 master และ 2 slaves (กำลังเรียกใช้ mysql 5.5) บางครั้งเราพบปัญหาเกี่ยวกับพื้นที่ระหว่างการประมวลผลครั้งใหญ่โดยที่ bin log directory เต็ม บันทึกหมดอายุทุก 3 วัน ฉันสงสัยว่ามีเหตุผลหรือไม่ที่จะต้องเก็บบันทึกไว้เป็นเวลา 3 วันในกล่องทั้งหมด - ผู้เชี่ยวชาญและทาสทั้งสอง? ยกตัวอย่างเช่นการเก็บบันทึกเป็นเวลา 3 วันสำหรับต้นแบบ แต่สำหรับทาส 1 วัน วิธีที่ดีที่สุดที่จะไปเกี่ยวกับมันคืออะไร? ขอขอบคุณ!

3
ตั้งค่าเริ่มต้นของคอลัมน์เป็นการต่อค่าสองคอลัมน์อื่นหรือไม่
ฉันมีฐานข้อมูล Postgresql 8.1 first_nameในตารางหนึ่งมีสามคอลัมน์: last_name, display_name, มันเป็นไปได้ที่จะตั้งค่าเริ่มต้นของdisplay_nameการเป็นfirst_name + " " + last_name?
13 postgresql 

4
กำลังสร้างดัชนีใหม่ฐานข้อมูลขนาด 10 เท่า
ฉันมีฐานข้อมูล SQL Server (2008 R2 SP1) ประมาณ 15 กิ๊ก ปรากฎว่าการบำรุงรักษาไม่ได้ทำงานมาระยะหนึ่งดังนั้นฉันจึงสร้างแผนการบำรุงรักษาเพื่อสร้างดัชนีทั้งหมดขึ้นใหม่พวกเขามีการแยกส่วนมาก งานเสร็จสิ้นและการแตกแฟรกเมนต์หายไป แต่ตอนนี้ฐานข้อมูลมีมากกว่า 120 กิ๊ก! ฉันเข้าใจว่าจะใช้พื้นที่เพิ่มเติมเพื่อสร้างใหม่ทั้งหมด แต่ตอนนี้งานเสร็จแล้วฉันคิดว่าพื้นที่ทั้งหมดนั้นจะเป็นพื้นที่ว่าง แต่พื้นที่ว่างแสดงเพียง 3 กิ๊กดังนั้นจึงมีการใช้ 117 gigs แม้ว่างานสร้างดัชนีใหม่จะเสร็จสิ้น ฉันสับสนมากและสามารถใช้คำแนะนำบางอย่างฉันได้รับ db กลับไปเป็นขนาดที่เหมาะสมเราไม่มีพื้นที่ดิสก์สำหรับสิ่งนี้ ขอบคุณล่วงหน้า! นี่คือผลลัพธ์ของข้อความค้นหาทั้งสองที่โพสต์: log_reuse_wait_desc ไม่มีอะไร name TotalSpaceInMB UsedSpaceInMB FreeSpaceInMB LIVE_Data 152 123 28 LIVE_Log 18939 89 18849 LIVE_1_Data 114977 111289 3688 ไฟล์ที่สามเป็นไฟล์. ndf ซึ่งเป็นไฟล์ที่แสดงเพียง 3688 ในพื้นที่ที่ไม่ได้ใช้ …

6
การสำรองฐานข้อมูลทั้งหมดใน SQL Server
ฉันมีเซิร์ฟเวอร์ฐานข้อมูล Microsoft SQL Server 2005 ในเซิร์ฟเวอร์ DB ฉันมีฐานข้อมูลผู้ใช้ประมาณ 250 คน ฉันต้องสำรองฐานข้อมูลเหล่านี้ทั้งหมด เนื่องจากการสำรองข้อมูลด้วยตนเองใช้เวลานานฉันกำลังมองหาสคริปต์ชุดงานหรือสคริปต์ฐานข้อมูลซึ่งจะสำรองข้อมูลของฐานข้อมูล 250 ทั้งหมดโดยอัตโนมัติ มีใครช่วยได้บ้างไหม?

2
ทริกเกอร์เป็น UPDATE หลังจาก UPDATE หรือไม่
ฉันต้องการทริกเกอร์บันทึกเวลาของการอัปเดตใด ๆ เป็น: CREATE TRIGGER col_update AFTER UPDATE ON col FOR EACH ROW BEGIN UPDATE col SET updated=NOW() WHERE id=NEW.id; // or OLD.id END ปัญหาคือเมื่อทริกเกอร์นี้พยายามอัปเดตupdatedคอลัมน์มันก็เป็นอีกเหตุการณ์หนึ่งของการอัพเดทที่รันทริกเกอร์ สิ่งนี้จะสร้างการวนซ้ำไม่สิ้นสุดซึ่งไม่ทำงาน ฉันจะจัดเก็บเวลาอัปเดตในคอลัมน์ที่เกี่ยวข้องได้อย่างไร ฉันต้องการใช้ทริกเกอร์เนื่องจากมีหลายคอลัมน์ในตาราง หากฉันพยายามตั้งเวลาอัปเดตด้วยตนเองฉันจะต้องแก้ไขข้อความค้นหาจำนวนมาก

4
การแบ่งพาร์ติชันตารางสำหรับเก็บข้อมูล
สถานการณ์: สองฐานข้อมูล: DB_A และ DB_Archive กับหนึ่งตารางใหญ่มากที่เรียกว่า tableA ทุกวันบันทึกที่เก่ากว่า 60 วันจะถูกลบออกจาก DB_A และย้ายไปที่ DB_Archive เป็นหลักเพื่อแยกสิ่ง "แยก" ออกเนื่องจาก tableA ถูกสอบถามอย่างหนักใน DB_A สำหรับบันทึกของ 2 เดือนที่ผ่านมา ฉันต้องการกำจัดกระบวนการนี้เพราะมันช้าและสิ้นเปลืองทรัพยากรจำนวนมาก ฉันกำลังคิดที่จะนำตารางพาร์ติชั่นไปใช้บน DB_A ด้วยฟังก์ชั่นพาร์ติชั่นในคอลัมน์วันที่และเก็บบันทึกทั้งหมด <2 เดือนในหนึ่งพาร์ติชั่นและทุกเรคคอร์ด> 2 เดือนในอีกพาร์ติชันหนึ่ง คำถามของฉัน: สถานการณ์นี้จะทำงานเป็นอย่างไรถ้าฉันมีฐานข้อมูล 2 แบบ ถ้าฉันค้นหา tableA สำหรับบันทึก> getdate () - 30 จะอ่านพาร์ติชันเก็บถาวรหรือไม่ ฉันคิดว่าฉันต้องแบ่งดัชนีด้วยใช่มั้ย ฉันจะจัดการกับความจริงที่ว่าในวันพรุ่งนี้ฟังก์ชั่นพาร์ทิชันของฉันจะ "เปลี่ยน" ฉันหมายความว่าถ้าฉันสร้างฟังก์ชั่นวันนี้ (วันที่ 2 กรกฎาคมช่วงของมันจะเป็นวันที่ 2 …

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