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

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

2
สถิติฐานข้อมูลคืออะไรและฉันจะได้ประโยชน์จากพวกเขาอย่างไร
ฉันเคยได้ยินการพูดถึงสถิติที่ SQL Server เก็บตามค่าเริ่มต้น พวกเขากำลังติดตามอะไรและฉันจะใช้ข้อมูลนี้เพื่อปรับปรุงฐานข้อมูลของฉันได้อย่างไร

7
วิธีที่ดีในการจัดเก็บคอลัมน์จำนวนมากคืออะไร
ฉันมีปัญหาในการตัดสินใจว่าจะเก็บข้อมูลนี้ในฐานข้อมูลของฉันอย่างไร ข้อเสนอแนะเกี่ยวกับวิธีที่ดีที่สุดที่จะทำมัน? ฉันไม่รู้เกี่ยวกับฐานข้อมูลจำนวนมากฉันอาจเพิ่ม ฉันมีข้อมูลมาในรูปแบบเช่นนี้ แต่มากกว่า 4 จำนวนคอลัมน์คือประมาณ 240 ดังนั้นวันที่แต่ละวันจึงมีค่าที่ไม่ซ้ำกันจำนวน 240 ค่าที่เกี่ยวข้อง: Date/Time 200,00 202,50 205,00 2010.11.12 13:34:00 45,8214 43,8512 41,5369 2010.11.12 13:35:00 461,9364 454,2612 435,5222 นอกจากนี้แถวยังเชื่อมโยงกับ DataSites ด้วย ความคิดแรกของฉันคือการมีตารางดังนี้: DataID (pk), DataSiteID, ParameterID, Date, Value พร้อมดัชนีใน DataSite, Parameter และ Date พารามิเตอร์ ID อ้างถึงตารางอื่นที่เก็บส่วนหัวคอลัมน์อินพุต (200,00 202,50 205,00 ... ) ความคิดที่สองของฉันคือการมีโต๊ะที่มีคอลัมน์ทั้งหมด 240 …

2
CouchDB vs MongoDB [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา การประเมินที่เก็บเอกสารเชิงข้อดีและข้อเสียของ CouchDB กับ MongoDB คืออะไร?

4
แปลงตารางแถว 66,862,521 จาก MyISAM เป็น InnoDB โดยไม่ต้องออฟไลน์เป็นเวลาหลายชั่วโมงได้อย่างไร
เป็นไปได้ (และวิธี) ในการแปลงตาราง MyISAM ขนาดใหญ่เป็น InnoDB โดยไม่ต้องสมัครออฟไลน์ ต้องมีการแทรกสองแถวลงในตารางนั้นทุกวินาที แต่สามารถระงับได้ประมาณ 2 นาที เห็นได้ชัดว่าเปลี่ยนแปลงตาราง ... engine = innodb จะไม่ทำงาน ดังนั้นฉันจึงวางแผนที่จะสร้างตารางใหม่พร้อมกับเครื่องยนต์ innodb และคัดลอกเนื้อหาลงไป และในท้ายที่สุดระงับเธรดแอปพลิเคชันเธรดและ RENAME TABLE น่าเสียดายที่แม้แต่การทำสำเนาในแบทช์ขนาดเล็กจำนวน 100 แถวก็สร้างความล่าช้าอย่างมากหลังจากผ่านไประยะหนึ่ง แก้ไข : แถวที่มีอยู่จะไม่เปลี่ยนแปลงตารางนี้ใช้สำหรับการบันทึก
18 mysql  innodb 

6
วิธีที่ดีที่สุดในการลบชุดระเบียนที่มีขนาดใหญ่มากใน Oracle
ฉันจัดการแอปพลิเคชันที่มีข้อมูลขนาดใหญ่มาก (เกือบ 1TB ของข้อมูลมีมากกว่า 500 ล้านแถวในหนึ่งตาราง) ฐานข้อมูล Oracle ส่วนหลัง ฐานข้อมูลไม่ได้ทำอะไรเลย (ไม่มี SProcs, ไม่มีทริกเกอร์หรืออะไรเลย) เป็นเพียงแหล่งข้อมูล ทุกเดือนเราจะต้องล้างเร็กคอร์ดจากตารางหลักสองตาราง เกณฑ์สำหรับการกำจัดแตกต่างกันไปและเป็นการรวมกันของอายุแถวและฟิลด์สถานะสองสาม โดยทั่วไปแล้วเราจะกวาดล้างระหว่าง 10 ถึง 50 ล้านแถวต่อเดือน (เราเพิ่มประมาณ 3-5 ล้านแถวต่อสัปดาห์ผ่านการนำเข้า) ขณะนี้เราต้องทำการลบแบบกลุ่มประมาณ 50,000 แถว (เช่นลบ 50000, comit, ลบ 50000, กระทำ, ทำซ้ำ) การพยายามลบชุดข้อมูลทั้งหมดในครั้งเดียวทำให้ฐานข้อมูลไม่ตอบสนองประมาณหนึ่งชั่วโมง (ขึ้นอยู่กับจำนวนแถว) การลบแถวในแบทช์เช่นนี้จะหยาบมากในระบบและโดยทั่วไปเราจะต้องทำมัน "ตามเวลาที่อนุญาต" ในช่วงเวลาหนึ่งสัปดาห์ การอนุญาตให้สคริปต์รันอย่างต่อเนื่องอาจส่งผลให้ประสิทธิภาพการทำงานลดลงซึ่งผู้ใช้ไม่สามารถยอมรับได้ ฉันเชื่อว่าการลบแบทช์ประเภทนี้จะลดประสิทธิภาพของดัชนีและมีผลกระทบอื่น ๆ ซึ่งในที่สุดจะทำให้ประสิทธิภาพของฐานข้อมูลลดลง มี 34 ดัชนีในตารางเดียวและขนาดข้อมูลดัชนีใหญ่กว่าข้อมูลจริง นี่คือสคริปต์ที่หนึ่งในพนักงานไอทีของเราใช้ในการล้างข้อมูลนี้: BEGIN LOOP delete …

6
การรักษารหัสผ่านฐานข้อมูล
ดูโครงสร้างของเว็บไซต์ที่ใช้ PHP / MySQL ส่วนใหญ่ที่ฉันเห็นมันไม่ยากที่จะแยกแยะรหัสผ่านฐานข้อมูลถ้าคุณขุดบิตเนื่องจากมีไฟล์ติดตั้งหรือการกำหนดค่าบางอย่างที่เก็บข้อมูลสำหรับบันทึก ลงในฐานข้อมูล นอกเหนือจากข้อควรระวังเบื้องต้นของการทำให้แน่ใจว่าสิทธิ์ของฐานข้อมูลของฉันถูก จำกัด อย่างเหมาะสมสำหรับการร้องขอระยะไกลตัวเลือกใดบ้างที่ฉันสามารถนำไปใช้ในโครงการของตัวเองเพื่อปกป้องข้อมูลนี้
18 mysql  security 

3
ฉันสามารถเปลี่ยน SID ของฐานข้อมูล Oracle ได้หรือไม่
เซิร์ฟเวอร์คือ Oracle Database 11g Enterprise Edition รีลีส 11.1.0.7.0 - 64 บิต มีวิธีที่ง่ายและรวดเร็วในการเปลี่ยน SID ของฐานข้อมูลทดสอบบนเซิร์ฟเวอร์หรือไม่ การปล่อย & สร้างฐานข้อมูลใหม่เป็นตัวเลือกสำหรับฉัน แต่ฉันกำลังมองหาบางสิ่งที่ต้องใช้เวลาน้อยลง ตัวเลือกอื่น ๆ ในการกำหนดชื่อในไคลเอนต์ tnsnames.ora มีแนวโน้มที่จะเกิดข้อผิดพลาดเนื่องจากไม่ได้รับการดูแลจากส่วนกลาง เมื่อเทียบกับเวลาที่จะวางและสร้างฐานข้อมูลบน SQL-Server ระยะเวลาที่ต้องใช้ในการสร้างฐานข้อมูล Oracle ใหม่นั้นมากเกินความจำเป็น เพิ่มเติมเกี่ยวกับ SQL-Server คุณสามารถเปลี่ยนชื่ออินสแตนซ์ของ SQL-Server ได้ [โดยปกติคุณจะเปลี่ยนชื่อเซิร์ฟเวอร์ที่ SQL-Server กำลังทำงานและมีปัญหาบางอย่างจนกว่าคุณจะเปลี่ยนชื่อเซิร์ฟเวอร์ด้วย]

8
ต้องอ่านหนังสือสำหรับ DBA [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา โพสต์นี้เป็นวิกิพีเดียชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบใหม่ คำถามนี้มีผลบังคับใช้เกือบทุกไซต์ SE สำหรับการอ้างอิงขั้นพื้นฐาน โปรดโพสต์เฉพาะหนังสือที่มีมูลค่าถาวรสำหรับ DBA โดยทั่วไป โพสต์ควรเป็นหนังสือที่ต้องอ่านหนังสือคลาสสิกหนังสือพื้นฐานไม่ใช่หนังสือสำหรับผลิตภัณฑ์เฉพาะหรือวันที่ หนังสือเล่มล่าสุดสำหรับ MS-SQL Server 2008 อาจทันสมัย ​​แต่เป็นวันที่และเฉพาะเจาะจง ฉันมีความสนใจที่แท้จริง ฉันเป็นผู้เขียนโปรแกรมและฐานข้อมูลเป็นข้อบกพร่องในการพัฒนาของฉัน ฉันรู้หลายสิ่งหลายอย่างเกี่ยวกับฐานข้อมูลที่เพิ่งทำงานประจำวัน
18 learning 

6
วิธีกำจัด ORA-28002 ข้อความรหัสผ่านจะหมดอายุภายใน 6 วัน?
ฉันมีผู้ใช้รับ ORA-28002 โดยระบุว่ารหัสผ่านจะหมดอายุภายในหกวัน ฉันวิ่งต่อไปนี้: ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; แต่เมื่อฉันพยายามเข้าสู่ระบบในฐานะผู้ใช้ข้อความยังคงมีอยู่ ดำเนินการนี้: select * from dba_profiles where RESOURCE_NAME LIKE 'PASSWORD_LIFE_TIME'; แสดงให้เห็นว่าค่านั้นถูกเปลี่ยนเป็น UNLIMITED จริงๆ
18 oracle  security 

2
จุดประสงค์ของคอลัมน์ Row_GUID คืออะไร
ฉันขุดในฐานข้อมูล AdventureWorks2012 และดู Row_GUID ที่ใช้ในหลายตาราง คำถามของฉันมี 2 ส่วน: เมื่อใดที่ฉันควรรวมคอลัมน์ Row_GUID การใช้และประโยชน์ของคอลัมน์ Row_GUID คืออะไร
18 sql-server  uuid 

3
ทำไมการเข้าร่วม cardinality นี้จึงมีขนาดใหญ่มาก?
ฉันกำลังประสบกับสิ่งที่ฉันคิดว่ามีค่าระดับความเป็นหัวใจสูงสำหรับการค้นหาต่อไปนี้: SELECT dm.PRIMARY_ID FROM ( SELECT COALESCE(d1.JOIN_ID, d2.JOIN_ID, d3.JOIN_ID) PRIMARY_ID FROM X_DRIVING_TABLE dt LEFT OUTER JOIN X_DETAIL_1 d1 ON dt.ID = d1.ID LEFT OUTER JOIN X_DETAIL_LINK lnk ON d1.LINK_ID = lnk.LINK_ID LEFT OUTER JOIN X_DETAIL_2 d2 ON dt.ID = d2.ID LEFT OUTER JOIN X_DETAIL_3 d3 ON dt.ID = d3.ID ) …

2
เหตุใด SQL Injection จึงไม่เกิดขึ้นกับแบบสอบถามนี้ภายในกระบวนงานที่เก็บไว้
ฉันทำขั้นตอนการจัดเก็บต่อไปนี้: ALTER PROCEDURE usp_actorBirthdays (@nameString nvarchar(100), @actorgender nvarchar(100)) AS SELECT ActorDOB, ActorName FROM tblActor WHERE ActorName LIKE '%' + @nameString + '%' AND ActorGender = @actorgender ตอนนี้ฉันพยายามทำอะไรแบบนี้ บางทีฉันอาจทำผิด แต่ฉันต้องการให้แน่ใจว่ากระบวนการดังกล่าวสามารถป้องกัน SQL Injection: EXEC usp_actorBirthdays 'Tom', 'Male; DROP TABLE tblActor' ภาพด้านล่างแสดง SQL ด้านบนที่ถูกดำเนินการใน SSMS และผลลัพธ์ถูกแสดงอย่างถูกต้องแทนที่จะมีข้อผิดพลาด: Btw ฉันเพิ่มส่วนต่อไปที่อัฒภาคหลังจากแบบสอบถามเสร็จสิ้นการดำเนินการ จากนั้นฉันก็ดำเนินการอีกครั้ง แต่เมื่อฉันตรวจสอบเพื่อดูว่าตาราง tblActor มีอยู่หรือไม่มันยังคงอยู่ที่นั่น ฉันกำลังทำอะไรผิดหรือเปล่า? …

4
การออกแบบที่ดีที่สุดในการอ้างอิงหลายตารางจากคอลัมน์เดียว?
สคีมาที่เสนอ ก่อนอื่นนี่คือตัวอย่างของสคีมาที่ฉันเสนอเพื่ออ้างอิงตลอดโพสต์ของฉัน: Clothes ---------- ClothesID (PK) INT NOT NULL Name VARCHAR(50) NOT NULL Color VARCHAR(50) NOT NULL Price DECIMAL(5,2) NOT NULL BrandID INT NOT NULL ... Brand_1 -------- ClothesID (FK/PK) int NOT NULL ViewingUrl VARCHAR(50) NOT NULL SomeOtherBrand1SpecificAttr VARCHAR(50) NOT NULL Brand_2 -------- ClothesID (FK/PK) int NOT NULL PhotoUrl VARCHAR(50) …

5
ไม่สามารถสร้างดัชนีที่กรองแล้วในคอลัมน์จากการคำนวณ
ในคำถามก่อนหน้านี้ของฉันเป็นความคิดที่ดีหรือไม่ที่จะปิดใช้งานการเลื่อนระดับล็อคในขณะที่เพิ่มคอลัมน์จากการคำนวณใหม่ลงในตาราง ฉันกำลังสร้างคอลัมน์จากการคำนวณ: ALTER TABLE dbo.tblBGiftVoucherItem ADD isUsGift AS CAST ( ISNULL( CASE WHEN sintMarketID = 2 AND strType = 'CARD' AND strTier1 LIKE 'GG%' THEN 1 ELSE 0 END , 0) AS BIT ) PERSISTED; คอลัมน์จากการคำนวณคือPERSISTEDและตามcomputed_column_definition (Transact-SQL) : ยืนกราน ระบุว่า Database Engine จะจัดเก็บค่าที่คำนวณในร่างกายและอัพเดตค่าเมื่อคอลัมน์อื่น ๆ ที่คอลัมน์ที่คำนวณขึ้นอยู่นั้นถูกอัพเดต การทำเครื่องหมายคอลัมน์ที่คำนวณเป็น PERSISTED อนุญาตให้สร้างดัชนีบนคอลัมน์ที่คำนวณได้ซึ่งกำหนดไว้ แต่ไม่แม่นยำ สำหรับข้อมูลเพิ่มเติมดูดัชนีในคอลัมน์ที่คำนวณ …

4
ใช้ DISTINCT ในฟังก์ชั่นหน้าต่างกับ OVER
ฉันพยายามที่จะโยกย้ายแบบสอบถามจาก Oracle ไปยัง SQL Server 2014 นี่คือข้อความค้นหาของฉันที่ใช้งานได้ดีใน Oracle: select count(distinct A) over (partition by B) / count(*) over() as A_B from MyTable นี่คือข้อผิดพลาดที่ฉันได้รับหลังจากพยายามเรียกใช้แบบสอบถามนี้ใน SQL Server 2014 Use of DISTINCT is not allowed with the OVER clause ใครรู้ว่าปัญหาคืออะไร? เป็นชนิดของแบบสอบถามที่เป็นไปได้ใน SQL Server หรือไม่ กรุณาแนะนำ

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