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

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


5
วิธีตรวจจับการเปลี่ยนแปลงใด ๆ ในฐานข้อมูล (DDL และ DML)
มีฐานข้อมูลจำนวนมากบนเซิร์ฟเวอร์ SQL ของลูกค้าของฉัน ฐานข้อมูลเหล่านี้อยู่ระหว่างการพัฒนาเพื่อให้นักพัฒนาสามารถออกแบบปรับโครงสร้างทำการแก้ไขข้อมูลและอื่น ๆ มีฐานข้อมูลบางส่วนที่เปลี่ยนแปลงได้ยาก ลูกค้าของฉันต้องรักษาความปลอดภัยทั้งหมด (สำรองข้อมูล) และใช้เวลาในการจัดการสภาพแวดล้อม (บริษัท ไม่มีตำแหน่งผู้ดูแลฐานข้อมูลที่ บริษัท ) หลังจากการสนทนาที่ยาวนานลูกค้าได้ตัดสินใจใช้กลยุทธ์การสำรองข้อมูลเต็มรูปแบบรายวันเนื่องจากความสะดวกในการกู้คืน ดังนั้นนี่คือบทสรุปของสถานการณ์: จำนวนฐานข้อมูลสามารถเปลี่ยนแปลงได้ทุกวัน ฐานข้อมูลที่เปลี่ยนแปลง (หมายถึงข้อมูลและ / หรือโครงสร้างที่มีการเปลี่ยนแปลง) จะถูกสำรอง ฐานข้อมูลที่ไม่เปลี่ยนแปลงจะไม่ถูกสำรอง โซลูชันจะไม่ส่งผลกระทบต่อโครงสร้างฐานข้อมูล (ไม่ จำกัด ข้อกำหนด) "เครื่องมือสำรอง" นี้จะทำงานโดยอัตโนมัติ ปัญหาหลัก: วิธีการตรวจสอบว่ามีการเปลี่ยนแปลงฐานข้อมูล ส่วนแรกของปัญหา (DDL เปลี่ยนแปลง) สามารถแก้ไขได้โดยการใช้ทริกเกอร์ DDL แต่การเปลี่ยนแปลงข้อมูล (การเปลี่ยนแปลง DML) เป็นปัญหา เป็นไปไม่ได้ที่จะใช้ทริกเกอร์ DML กับทุกตารางของฐานข้อมูลทั้งหมดเพื่อติดตามการเปลี่ยนแปลง (ประสิทธิภาพการจัดการวัตถุที่ขยายเพิ่ม ... ) เอ็นจิ้นการสำรองข้อมูลต้องติดตามการเปลี่ยนแปลงทั้งหมดเพื่อทำเครื่องหมายแต่ละฐานข้อมูลว่าพร้อมสำหรับการสำรองข้อมูล Change Data Captureเป็นวิธีแก้ปัญหา แต่ดูเหมือนว่าหนักเกินไป …

4
การคำนวณเปอร์เซ็นต์ของแถวเหนือผลรวมทั้งหมด
ขอโทษสำหรับชื่อที่ไม่ดีฉันไม่แน่ใจว่าชื่อเรื่องนี้จะเป็นอะไรดี นี่คือข้อมูลที่ฉันกำลังทำงานกับ (มุมมองแบบง่าย) ของข้อมูลนี้ Agent | Commission ---------|------------ Smith | 100 Neo | 200 Morpheus | 300 ฉันต้องการคำนวณอัตราร้อยละของค่าคอมมิชชั่นทั้งหมดซึ่งแต่ละตัวแทนมีหน้าที่รับผิดชอบ ดังนั้นสำหรับ Agent Smith เปอร์เซ็นต์จะถูกคำนวณเป็น (Agent Smith's commission / Sum(commission)*100 ดังนั้นข้อมูลที่คาดหวังของฉันจะเป็น Agent | Commission | % Commission ---------|---------------|--------------- Smith | 100 | 17 Neo | 200 | 33 Morpheus | 300 | 50 …

4
SQL Server Management Studio สำหรับฐานข้อมูลระยะไกล
ด้วยฐานข้อมูล SQL Sever ซึ่งอยู่บนเซิร์ฟเวอร์เฉพาะโฮสต์ระยะไกลฉันสามารถทำงานได้โดยใช้ SQL Server Management Studio ติดตั้งบนเซิร์ฟเวอร์เดียวกันหรือบนเครื่องคอมพิวเตอร์ของฉัน ฉันเป็นกรณีแรกที่ฉันควรใช้ Remote Desktop และสิ่งนี้ทำให้การทำงานช้าลงเล็กน้อย ในกรณีที่สองฉันต้องเปิดพอร์ตเพิ่มเติมในไฟร์วอลล์ของเซิร์ฟเวอร์ แต่ฉันจะมีประสบการณ์การใช้งานที่สะดวกสบายมากขึ้น การปฏิบัติที่แนะนำของทั้งสองนี้คืออะไร?
13 sql-server  ssms 

4
ทรัพยากรที่ดีสำหรับการดำเนินงาน / การจัดการ MongoDB
แหล่งข้อมูลที่ดีที่สุดสำหรับการเรียนรู้วิธีการใช้งานและจัดการ MongoDBคืออะไร มีทรัพยากรมากมายในการพัฒนากับมัน - ซึ่งจริง ๆ แล้วสร้างปัญหาเมื่อคุณมีความสามารถในการพัฒนามากมายและจำเป็นต้องกรองเสียงนั้นออก สำหรับนักพัฒนาที่ไม่สามารถจ้าง DBA ได้เราจำเป็นต้องรักษาความมั่นคงของกลุ่ม Mongo ของเราไว้อย่างดีนักแสดง ฯลฯ นอกเหนือจากคำถามที่พบบ่อยและคู่มือเริ่มต้นอย่างรวดเร็วจะมีที่เก็บข้อมูลอื่น ๆ อีกหรือไม่ บล็อกที่ดีที่จะติดตาม ฯลฯ ?
13 mongodb 

2
ฉันจะเปลี่ยนชื่ออินสแตนซ์ใน MS SQL 2005 โดยไม่ต้องติดตั้งอินสแตนซ์ใหม่ได้อย่างไร
ฉันมีอินสแตนซ์ที่ไม่ได้มีอะไรเลยติดตั้งอยู่ (มันมีไว้สำหรับโครงการหนึ่ง แต่ไม่เคยทำบนเซิร์ฟเวอร์นี้จริงโครงการทำซ้ำในเซิร์ฟเวอร์อื่น) ดังนั้นเนื่องจากฉันมีอินสแตนซ์ ฉันต้องการเปลี่ยนชื่อ สามารถทำได้หรือไม่ ฉันจะทำอย่างไร การสอบสวนเพิ่มเติม (googling) บอกว่ามันเป็นไปไม่ได้จริงๆ การให้คำปรึกษาเพิ่มเติมกับเพื่อนร่วมงานของฉันบอกว่าฉันอาจติดตั้งอินสแตนซ์ 2k8 และดำเนินการต่อ

3
SQL แบบไดนามิกใน MySQL จัดเก็บเป็นประจำ
ตามข้อ จำกัด ของรูทีนและทริกเกอร์ที่เก็บไว้ไม่สามารถใช้ไดนามิก sql ได้ (ข้อ จำกัด ถูกยกขึ้นสำหรับโพรซีเดอร์ที่เก็บในเวอร์ชัน 5.0.13 และใหม่กว่า) เหตุใดจึงมีข้อ จำกัด นี้ และทำไมต้องยกมันสำหรับขั้นตอน แต่ไม่ใช่ฟังก์ชั่นหรือทริกเกอร์?

5
มันไม่ฉลาดที่จะเรียกใช้การจำลองแบบบนเซิร์ฟเวอร์จริงหรือไม่?
ฉันใคร่ครวญการตั้งค่าการจำลองแบบ Master-Slave สำหรับฐานข้อมูลของฉัน เซิร์ฟเวอร์ทาสจะใช้สำหรับความซ้ำซ้อนและอาจเป็นเซิร์ฟเวอร์รายงาน อย่างไรก็ตามหนึ่งในปัญหาที่ใหญ่ที่สุดที่ฉันพบคือเราได้ใช้พลังงานอย่างเต็มประสิทธิภาพที่ดาต้าเซ็นเตอร์แล้ว ดังนั้นการเพิ่มเซิร์ฟเวอร์ทางกายภาพอื่นไม่ใช่ตัวเลือก เซิร์ฟเวอร์ฐานข้อมูลที่มีอยู่ของเรานั้นมีการใช้งานไม่เพียงพอเท่าที่ cpu (ค่าเฉลี่ยการโหลดไม่เคยสูงกว่า 1 ใน quad-core) ดังนั้นแนวคิดที่สำคัญคือการโยนในไดรฟ์ใหม่และเพิ่มหน่วยความจำเป็นสองเท่า (จาก 8GB ถึง 16) และเรียกใช้อินสแตนซ์ mysql ที่สองบนเครื่องทางกายภาพเดียวกัน แต่ละอินสแตนซ์จะมีดิสก์แยกต่างหากสำหรับฐานข้อมูล มีอะไรผิดปกติกับความคิดนี้หรือไม่? แก้ไข (ข้อมูลเพิ่มเติม): ฉัน (โชคดี) ไม่เคยมีอะไรเลวร้ายเกิดขึ้นพอที่จะลงเซิร์ฟเวอร์ แต่พยายามวางแผนล่วงหน้า แน่นอนว่าเรามีการสำรองข้อมูลทุกคืนที่เราสามารถกู้คืนได้ แต่ฉันคิดว่าการมีข้อมูลที่ซ้ำซ้อนในดิสก์แยกต่างหากจะให้วิธีแก้ปัญหาที่รวดเร็วกว่าถ้าไดรฟ์ของเซิร์ฟเวอร์หลักล้มเหลว (เห็นได้ชัดว่าไม่ใช่ถ้าเครื่องทั้งหมดหายไป) สำหรับด้านการรายงานตารางใด ๆ ที่เราจะรายงานออกมาก็คือ MyIsam ดังนั้นการอ่านแพง ๆ บนโต๊ะเดียวกันกับที่เขียนไว้สามารถทำให้ชะงักเซิร์ฟเวอร์ได้ การสันนิษฐานของฉันคือการมีเซิร์ฟเวอร์ทาสเพื่อรายงานว่าจะไม่ส่งผลกระทบต่อเซิร์ฟเวอร์หลักตราบใดที่เราขว้าง RAM เพียงพอ (เพราะ cpu โหลดยังไม่มีปัญหา)

2
ความปลอดภัยสำหรับ Application Developers ที่ทำงานกับ PL / SQL ใน Oracle
คุณจะจัดการกับการขาดสิทธิ์ระดับ Schema ใน Oracle ได้อย่างไร สถาปัตยกรรมความปลอดภัยของออราเคิลทำงานได้ดีสำหรับแอปพลิเคชันที่ต้องการเฉพาะสิทธิ์ระดับวัตถุและทำงานได้ดีสำหรับ DBA ที่ต้องการข้อ จำกัด เล็กน้อย อย่างไรก็ตามดูเหมือนว่าจะมีช่องโหว่ขนาดใหญ่ในสถาปัตยกรรมสำหรับโปรแกรมเมอร์ที่ทำการพัฒนาด้วยแอพพลิเคชั่นส่วนหน้าและ PL / SQL ในหลายสคีมา นี่คือตัวเลือกของฉันบางส่วนที่มีข้อเสีย: ทำให้แต่ละโปรแกรมเมอร์ทำการพัฒนาในสคีมาของตนเอง DBA จะให้สิทธิพิเศษระดับวัตถุแก่โปรแกรมเมอร์ที่ต้องการ การพัฒนาบรรจุภัณฑ์ใด ๆ จะต้องทำโดย DBA ข้อเสียที่สำคัญคือโปรแกรมเมอร์จะใช้ฐานข้อมูลเช่น bit bucket เพื่อลดความเสียหายของประสิทธิภาพของฐานข้อมูล ฉันต้องการโปรแกรมเมอร์ที่จะพัฒนาในฐานข้อมูล แต่วิธีนี้จะทำให้หมดกำลังใจอย่างมาก ให้ชื่อผู้ใช้ / รหัสผ่านของโปรแกรมเมอร์แก่ schema ที่ต้องการพัฒนามากกว่าสิบตัวอนุญาตให้สคีมาของแอปพลิเคชันเหล่านี้เพื่อสร้างโพรซีเดอร์ตารางและอื่น ๆ ข้อเสียของวิธีการนี้คือโปรแกรมเมอร์ต้องดูแลการเข้าสู่ระบบหลายครั้ง ไม่ค่อยเข้าสู่ระบบในฐานะตัวเอง การพัฒนาข้ามสคีก็ยากเช่นกัน ให้สิทธิการพิสูจน์ตัวตนพร็อกซีโปรแกรมเมอร์แก่แต่ละสคีมาที่ต้องพัฒนา สิ่งนี้ทำให้พวกเขาล็อกอินด้วยตนเองโดยไม่ต้องให้สิทธิพิเศษนอกเหนือจากสิทธิ์พร็อกซี ข้อเสียรวมถึงโปรแกรมเมอร์ที่ต้องรักษาการเชื่อมต่อแยกกันสำหรับแต่ละสคีมาที่พร็อกซีสำหรับการพัฒนาข้ามสคีมานั้นยุ่งยากกว่าเนื่องจากการเชื่อมต่อจะต้องมีการเปลี่ยนแปลงอยู่ตลอดเวลาและแพ็คเกจที่ใช้การเชื่อมโยงฐานข้อมูลสาธารณะ ให้สิทธิ์ DBA สำหรับโปรแกรมเมอร์แต่ละคน - ข้อเสียนี่คือความปลอดภัย ไม่มีโปรแกรมเมอร์สคีมาสามารถถูกเก็บออกจากสคีมาใด ๆ และโปรแกรมเมอร์ใด ๆ …

1
SQL Server - หน้าข้อมูลถูกจัดเก็บอย่างไรเมื่อใช้ดัชนีแบบคลัสเตอร์
ฉันเพิ่งได้ยินว่าหน้าข้อมูลในดัชนีคลัสเตอร์ไม่ได้ถูกจัดเก็บอย่างต่อเนื่อง มันเป็นเรื่องจริงเหรอ? บางทีหน้าข้อมูลมักจะถูกจัดเก็บอย่างต่อเนื่องพร้อมกับข้อยกเว้นบางอย่างสำหรับกฎ หรือบางทีฉันได้ยินผิดและหน้าข้อมูลถูกจัดเก็บอย่างต่อเนื่องเสมอ ขอบคุณมาก.


2
วิธีจัดโครงสร้างแบบจำลองเพื่อให้ได้ข้อมูลที่มีลักษณะคล้ายต้นไม้บนฐานข้อมูลเชิงสัมพันธ์อย่างเหมาะสมและมีประสิทธิภาพ
จากการสำรวจข้อมูลแบบต้นไม้ในฐานข้อมูลเชิงสัมพันธ์โดยใช้คำถามSQLฉันต้องการทราบวิธีที่ใช้เป็นประจำในการอธิบายข้อมูลแบบต้นไม้ในฐานข้อมูลเชิงสัมพันธ์โดยพิจารณาจากผลกระทบทางกายภาพหรือไม่ ฉันสมมติว่า RDBMS ไม่มีคุณสมบัติพิเศษในการจัดการนอกเหนือจาก SQL ANSI ปกติหรือคุณสมบัติทั่วไปที่มีอยู่ มีข้อสงสัยฉันสนใจ MySQL และ PostgreSQL เสมอและในที่สุด SQLite

4
คำแนะนำในการเพิ่มประสิทธิภาพการค้นหา SQL Server 2005/8
ฉันกำลังมองหาการให้ความรู้แก่ทีมเกี่ยวกับการเขียนแบบสอบถาม SQL Server ที่ดีขึ้นและสงสัยว่าคำแนะนำที่ดีที่สุดของผู้คนคืออะไรสำหรับการปรับปรุงประสิทธิภาพ ตัวอย่างเช่นฉันเคยมี DBA ซึ่งยืนยันว่าการนับ (*) จะทำงานได้แย่กว่าการนับ (1) (ฉันไม่รู้เลยว่าเธอถูกหรือว่ายังใช้ได้กับการเพิ่มประสิทธิภาพการสืบค้นล่าสุด) อะไรสิ่งที่ง่ายที่ฉันควรจะบอกทีมงานที่จะลองและมักจะใช้หรือหลีกเลี่ยง? ฉันกำลังมองหาสิ่งที่ (a) อาจสร้างความแตกต่างที่สมเหตุสมผลและ (b) ตรงไปตรงมา 1 - 2 บรรทัดเพื่อระบุ

3
วิธีรับค่า non-null ล่าสุดในคอลัมน์ที่เรียงลำดับของตารางขนาดใหญ่ได้อย่างไร
ฉันมีอินพุตต่อไปนี้: id | value ----+------- 1 | 136 2 | NULL 3 | 650 4 | NULL 5 | NULL 6 | NULL 7 | 954 8 | NULL 9 | 104 10 | NULL ฉันคาดหวังผลลัพธ์ต่อไปนี้: id | value ----+------- 1 | 136 2 | 136 3 | 650 4 …

3
ซ่อนเลือกเอาต์พุตจาก T-SQL
ฉันพยายามรับเวลาประมวลผลแบบสอบถาม แต่ฉันต้องการซ่อนผลลัพธ์คิวรีด้วย ฉันแค่ต้องการเวลาที่ผ่านไป - ไม่มีเอาต์พุต ตัวอย่าง DECLARE @Start datetime DECLARE @End datetime SELECT @StartTimeWA=GETDATE() SELECT [id] ,[database_id] ,[proc_name] ,[exec_t] from [DB].[dbo].[STAT] SELECT @End=GETDATE() SELECT DATEDIFF(MS,@Start,@End) AS [Duration] ในขณะนี้ฉันได้รับผลลัพธ์ของแบบสอบถามและที่ด้านล่างระยะเวลาของฉันซึ่งเป็นสิ่งเดียวที่ฉันต้องการเท่าที่ผลผลิตจะไป ฉันไม่สามารถทำสิ่งนี้และสงสัยว่ามีคนอื่นเจอปัญหาที่คล้ายกันหรือไม่ นี่คือสิ่งที่ฉันต้องการทำใน T-SQL ไม่ใช่ Management Studio หรืออะไรทำนองนั้น ฉันพยายามตรวจสอบเวลาที่ใช้ในการเรียกใช้คำสั่ง select และรายงานกลับไปที่เซิร์ฟเวอร์ ฉันมีเซิร์ฟเวอร์มอนิเตอร์ภายนอกซึ่งจะทำงานทุกนาทีและได้รับเวลาย้อนกลับ (ระยะเวลาที่ใช้) ซึ่งฉันจะใช้เมื่อเวลาผ่านไปแนวโน้ม / พื้นฐาน ในขณะที่การสืบค้นปัจจุบันแยกแยะผลลัพธ์ที่เลือกและระยะเวลาของฉันมันจะลื่นและเซิร์ฟเวอร์จอภาพของฉันก็สับสน ฉันต้องการคอลัมน์ระยะเวลา ฉันจะทำเช่นนี้เพื่อแทรกซึ่งจะตรงไปตรงมาเพราะมันไม่จำเป็นต้องเลือก ฉันพยายามที่จะทำเช่นนี้ได้อย่างหมดจดใน T-SQL ฉันไม่ต้องการใช้ DMV …
13 sql-server  t-sql 

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