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

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

8
ทำไมแอปพลิเคชันไม่ควรใช้บัญชี sa
คำถามแรกของฉันโปรดเป็นคนอ่อนโยน ฉันเข้าใจว่าบัญชี sa ช่วยให้สามารถควบคุม SQL Server และฐานข้อมูลผู้ใช้สิทธิ์ทั้งหมดได้อย่างสมบูรณ์ ฉันเชื่ออย่างแน่นอนว่าแอปพลิเคชันไม่ควรใช้รหัสผ่าน sa หากไม่มีเหตุผลที่สมบูรณ์แบบนักธุรกิจให้ความสำคัญ คำตอบสำหรับคำถามนี้รวมถึงเหตุผลมากมายของฉันสำหรับการสนทนาที่เน้นด้านไอที ฉันถูกบังคับให้ยอมรับระบบการจัดการบริการใหม่ที่จะไม่ทำงานจนกว่าจะใช้รหัสผ่าน sa ฉันไม่เคยมีเวลาที่จะหาสาเหตุว่าทำไมเมื่อทำการตั้งค่าการประเมินผล แต่ทีมเซิร์ฟเวอร์พยายามที่จะติดตั้งเพื่อใช้บทบาทคงที่ฉันได้ตั้งค่าการรวม db_creater และสิทธิ์อื่น ๆ ที่ฉันคิดว่ามันต้องมี ซึ่งล้มเหลว ฉันปล่อยให้ทีมเซิร์ฟเวอร์ติดตั้งด้วยบัญชี sa แต่ทำงานภายใต้บัญชีในบทบาท dbo สำหรับฐานข้อมูล แต่ก็ล้มเหลวด้วย ฉันพยายามทำให้มันทำงานโดยใช้บัญชีในบทบาทดูแลระบบ แต่ก็ล้มเหลวและไม่มีข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์ที่ทำให้ฉันสามารถทำงานสิ่งที่เกิดขึ้นโดยไม่ต้องใช้เวลามากกว่าที่ฉันมี มันจะทำงานกับบัญชี sa และรหัสผ่านที่เก็บไว้ในข้อความที่ชัดเจนในไฟล์ปรับแต่ง เมื่อฉันสอบถามเรื่องนี้และทีมเซิร์ฟเวอร์ได้พูดคุยกับผู้ขายว่าพวกเขาได้รับคำตอบที่น่ากังวลว่า และจากนั้น 'เราสามารถดูรหัสผ่าน' scrambling ffs scrambling ฉันรู้ว่ามีวิธีและวิธีการ จำกัด การเข้าถึงไฟล์ แต่มันก็เป็นเพียงจุดอ่อนในการรักษาความปลอดภัยในความคิดของฉัน ยังไงก็ตามคำถามของฉันคือใครบางคนสามารถชี้ให้ฉันที่เอกสารบางอย่างที่ฉันสามารถใช้เพื่ออธิบายให้กับธุรกิจด้วยเหตุผลว่าทำไมสิ่งนี้เป็นสิ่งที่ไม่ดีและไม่ควรใหญ่ไม่มี ฉันทำงานในสาขาที่หมายความว่าฉันต้องใช้ความปลอดภัยอย่างจริงจังและพยายามดิ้นรนเพื่อให้ธุรกิจเข้าใจและท้ายที่สุดอาจได้รับการจัดอันดับต่อไป แต่ฉันต้องลอง

1
ฉันควรเพิ่ม SET NOCOUNT ON ให้กับตัวกระตุ้นทั้งหมดของฉันหรือไม่?
เป็นความรู้ทั่วไปที่คุณควรมี SET NOCOUNT ON โดยค่าเริ่มต้นเมื่อสร้างขั้นตอนการจัดเก็บใหม่ Microsoft ได้เปลี่ยนเทมเพลตเริ่มต้นเพื่อรวมสิ่งนี้ในปี 2012 ฉันคิดว่านี่จะเป็นสิ่งเดียวกันสำหรับทริกเกอร์ แต่ก็ไม่ได้รวมอยู่ในเทมเพลต มันเป็นความตั้งใจหรือเป็นเพียงการกำกับดูแล?

1
ดิ้นรนเพื่อดีบักการใช้งาน CPU สูงในอินสแตนซ์ Amazon RDS MySQL
เรากำลังเรียกใช้เซิร์ฟเวอร์ MySQL RDS m1.x ใหญ่และมีปัญหาบางอย่างกับการใช้งาน CPU สูง เรามีปัญหาบางอย่างเมื่อไม่กี่สัปดาห์ที่ผ่านมาเนื่องจากการใช้งาน CPU สูงถึง 100% ในกรณีที่มีขนาดใหญ่ เมื่อเราอัพเกรดขนาดเป็น xlarge ซึ่งทำให้สิ่งต่าง ๆ มีเสถียรภาพชั่วขณะหนึ่ง แต่การใช้งาน CPU จะค่อยๆขยายตัวขึ้นอีกครั้ง ในช่วงสัปดาห์ที่ผ่านมาการใช้งานซีพียูในช่วง 90 ปีที่ผ่านมาสูงถึง 100% หรือประมาณนั้นอย่างต่อเนื่องเมื่อวานนี้ซึ่งทำให้พื้นที่การผลิตของเราหยุดชะงัก หลังจากรีบูตเซิร์ฟเวอร์ db การใช้งาน CPU ภายในไม่กี่ชั่วโมงจะเพิ่มขึ้นเป็นระดับเดียวกัน ฉันเรียกใช้รายการกระบวนการแสดงบนเซิร์ฟเวอร์ mysql และได้รับการตรวจสอบเหมือนกันผ่านผู้ดูแลระบบ MySQL ดูเหมือนจะไม่มีคิวรีที่ใช้เวลานานหรือคิวรีจำนวนมาก มีกระบวนการบางอย่างที่อยู่ในสถานะสลีปเป็นเวลานาน ... เหล่านี้คือ daemons คนทำงานแยกที่ทำงานนอกแอปหลักของเราซึ่งสื่อสารกับฐานข้อมูล ฉันได้คัดลอกผลลัพธ์ของรายการกระบวนการด้านล่างโดยเปลี่ยนชื่อเซิร์ฟเวอร์เพื่อให้คำอธิบายว่ามันคืออะไร: +------+----------+---------------------------------------------------+--------------+---------+-------+--------------+----------------------------------------------------------------------------------------+ | Id | User | Host | db …
21 mysql 

1
ทำไมไม่เข้ากับชุดที่มีค่า NULL จะคืนค่าเป็น FALSE / NULL เสมอ?
ฉันมีแบบสอบถาม (สำหรับ Postgres และ Informix) ที่มีส่วนNOT INคำสั่งย่อยที่มีแบบสอบถามย่อยในบางกรณีที่ส่งคืนNULLค่าทำให้ส่วนคำสั่งนั้น (และแบบสอบถามทั้งหมด) ไม่สามารถส่งคืนสิ่งใดได้ วิธีที่ดีที่สุดที่จะเข้าใจสิ่งนี้คืออะไร? ฉันคิดว่าNULLเป็นสิ่งที่ไม่มีค่าและดังนั้นจึงไม่ได้คาดหวังแบบสอบถามที่จะล้มเหลว NULLแต่เห็นได้ชัดว่าไม่ใช่วิธีที่ถูกต้องที่จะคิดว่า

3
ย้ายและสร้างไฟล์ tempdb ใหม่อย่างปลอดภัย
สองสิ่งที่ฉันอยากรู้ คุณจะย้าย tempdb อย่างปลอดภัยได้อย่างไรด้วยการหยุดทำงานน้อยที่สุด คุณต้องการไฟล์ tempdb กี่ไฟล์ มันคือ 1 ไฟล์ต่อคอร์? ดังนั้นควอดคอร์ไฟล์ 4 tempdb สร้างไฟล์ใหม่สามไฟล์?

3
การซิงโครไนซ์ฐานข้อมูล SQL Server
นิยามปัญหา ผู้ใช้ของเราต้องการความสามารถในการสืบค้นฐานข้อมูลที่เป็นปัจจุบัน ข้อมูลสามารถค้างได้นานถึง 24 ชั่วโมงและเป็นที่ยอมรับ อะไรคือแนวทางต้นทุนที่ต่ำที่สุดในการรับและรักษาฐานข้อมูลที่สองด้วยข้อมูลการผลิต มีวิธีที่ฉันไม่ได้คิดหรือไม่? จำนวนงาน เรามีแอปพลิเคชันของบุคคลที่สามที่เราใช้ในการตรวจสอบกิจกรรมการซื้อขายหุ้น ในระหว่างวันมีการเปลี่ยนแปลงเล็กน้อยมากมายเกิดขึ้นเนื่องจากเป็นส่วนหนึ่งของกระบวนการทำงานที่หลากหลาย (ใช่การแลกเปลี่ยนนี้ใช้ได้ถูกต้องไม่เป็นที่น่าสงสัย ฯลฯ ) ในเวลากลางคืนเราดำเนินการตามชุดใหญ่ (โหลดการซื้อขายของวันก่อนหน้า) วิธีแก้ปัญหาและปัญหาปัจจุบัน เราใช้ประโยชน์จากภาพรวมฐานข้อมูล เวลา 22.00 น. เราจะส่งและสร้างภาพรวม การประมวลผล ETL จะเริ่มขึ้น นี่คือการเก็บภาษีบนดิสก์ของเรา แต่ช่วยให้ผู้ใช้ของเราสามารถสืบค้นฐานข้อมูลโดยไม่ต้องล็อกฐานข้อมูล (พวกเขาใช้ Access Front End) พวกเขาใช้มันในตอนกลางคืนและตอนเช้าเพื่อที่พวกเขาจะสังเกตเห็นการหยุดทำงาน ปัญหาด้วยวิธีนี้คือสองเท่า อย่างแรกคือในกรณีที่การประมวลผลทุกคืนล้มเหลวและนั่นไม่ใช่เรื่องแปลกมากเราได้รับการกู้คืนฐานข้อมูลซึ่งส่งผลให้สแนปช็อตถูกทิ้ง ปัญหาอื่นคือเวลาในการดำเนินการของเราลดลงผ่าน SLA ของเรา เราพยายามที่จะแก้ไขปัญหานี้ด้วยการทำงานร่วมกับผู้จัดจำหน่ายหลังจากพบคำค้นหาที่เขียนไม่ดีและไม่มีการจัดทำดัชนี สแนปชอตของฐานข้อมูลยังเป็นตัวการสำคัญในการชะลอตัวนี้ซึ่งเห็นได้จากความแตกต่างของความเร็วเมื่อมันปรากฏขึ้นเมื่อเทียบกับที่ไม่ใช่ --- น่าตกใจฉันรู้ แนวทางการพิจารณา การจัดกลุ่ม เราเปิดใช้งานการจัดกลุ่มฐานข้อมูลแล้ว แต่ไม่ได้ตอบสนองความต้องการในการทำให้ข้อมูลพร้อมใช้งานและโดยทั่วไปแล้วซับซ้อนชีวิตของผู้ดูแลระบบ มันถูกปิด การจำลองแบบเซิร์ฟเวอร์ SQL เราเริ่มดูการจำลองแบบเมื่อสัปดาห์ที่แล้ว ทฤษฎีของเราคือเราสามารถทำให้แคตตาล็อกที่สองโดดเด่นและประสานกับฐานข้อมูลการผลิต ก่อนการเริ่มต้น …

5
วิธีที่ดีที่สุดในการจัดเก็บหน่วยในฐานข้อมูล
ฉันได้รับมรดกฐานข้อมูลขนาดใหญ่ (SQLServer) ที่มีหลายร้อยคอลัมน์ที่แสดงจำนวนเงินของสิ่งใดสิ่งหนึ่ง หน่วยสำหรับค่าเหล่านี้ (เช่น "แกลลอน", "นิ้ว" และอื่น ๆ ) จะถูกเก็บไว้ในฟิลด์ MS_Description ของ Extended Properties ฉันสงสัยว่ามีวิธีที่ดีกว่าในการจัดเก็บข้อมูลนี้ ฉันคิดว่ามันเป็นเรื่องปกติสำหรับวัตถุประสงค์ในการจัดทำเอกสาร แต่มันยากที่จะทำการคำนวณการแปลงหน่วยที่แข็งแกร่งโดยใช้ข้อมูลนี้ ณ จุดนี้ฉันยังไม่พร้อมที่จะทำการเปลี่ยนแปลง แต่ถ้าฉันได้รับโอกาสทำเช่นนั้นแนวทางปฏิบัติที่ดีที่สุดที่แนะนำในเรื่องนี้คืออะไร? ตัวเลือกซึ่งอยู่ด้านบนของหัวของฉันอาจรวมถึง: เปลี่ยนชื่อคอลัมน์เป็นหน่วยที่รวมไว้ (เช่น "TotalVolumeInGallons" ซึ่งจะทำให้ข้อมูลพร้อมใช้งานได้ง่ายขึ้นเล็กน้อย แต่ก็ดูเหมือนว่าฉันจะอ่อนแอ) เพิ่มคอลัมน์ "หน่วย" แยกต่างหากเพื่อให้สอดคล้องกับทุกคอลัมน์ "จำนวน" (คอลัมน์นี้อาจเป็น nvarchar หรืออาจเป็นคีย์ต่างประเทศไปยังตารางหน่วยแยกต่างหากซึ่งอาจทำให้ง่ายต่อการคำนวณการแปลงหน่วยในอีกทางหนึ่ง คอลัมน์จำนวนมากสามารถเพิ่มขนาดฐานข้อมูลของฉันได้เป็นสองเท่า - ด้วยข้อมูลที่ซ้ำซ้อนมาก) สร้างฟิลด์ใหม่ในคุณสมบัติเพิ่มเติมสำหรับหน่วยโดยเฉพาะ (น่าเสียดายที่ฉันไม่คิดว่านี่จะเป็นคีย์ต่างประเทศในตารางหน่วย) มีแนวคิดอื่นอีกไหมที่ฉันมองเห็น UPDATE:หลังจากอ่านคำตอบของ @Todd Everett แล้วมีวิธีแก้ไขที่เป็นไปได้เกิดขึ้นกับฉันดังนั้นฉันจะดำเนินการต่อและตอบคำถามของฉันเอง (ดูด้านล่าง)

8
"ไม่พบโพรซีเดอร์ที่เก็บไว้ 'แม้ว่าจะสร้างโพรซีเดอร์ที่เก็บไว้ใน MS SQL Server Management Studio แล้ว
ฉันสร้างตารางtesttableภายในฐานข้อมูลtestbaseที่มีโครงสร้างต่อไปนี้: product_no (int, not null) product_name (varchar(30), not null) price (money, null) expire_date (date, null) expire_time (time(7), null) ซึ่งฉันใช้ Microsoft SQL Server 2008 Management Studio ฉันสร้างขั้นตอนการจัดเก็บไว้testtable_pricesmallerดังนี้ use testbase go create procedure testtable_pricesmaller @pricelimit money as select * from testtable where price = @pricelimit; go และสามารถดูกระบวนงานที่เก็บไว้ในObject ExplorerMicrosoft SQL Server Management Studio …

2
SQL Server ไม่ปรับการรวมการผสานแบบขนานบนตารางที่แบ่งพาร์ติชันอย่างเท่าเทียมกันสองตาราง
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ขออภัยล่วงหน้าสำหรับคำถามที่ละเอียดมาก ฉันได้รวมคิวรี่เพื่อสร้างชุดข้อมูลแบบเต็มสำหรับการทำซ้ำปัญหาและฉันใช้ SQL Server 2012 บนเครื่อง 32-core อย่างไรก็ตามฉันไม่คิดว่านี่เป็นเฉพาะของ SQL Server 2012 และฉันได้บังคับ MAXDOP เป็น 10 สำหรับตัวอย่างนี้โดยเฉพาะ ฉันมีสองตารางที่แบ่งพาร์ติชันโดยใช้ชุดรูปแบบพาร์ติชันเดียวกัน เมื่อรวมพวกเขาเข้าด้วยกันในคอลัมน์ที่ใช้สำหรับการแบ่งพาร์ติชันฉันสังเกตว่า SQL Server ไม่สามารถเพิ่มประสิทธิภาพการรวมแบบขนานได้มากเท่าที่คาดไว้และเลือกที่จะใช้ HASH JOIN แทน ในกรณีพิเศษนี้ฉันสามารถจำลอง MERGE JOIN ที่เหมาะสมกว่าด้วยตนเองโดยแบ่งแบบสอบถามออกเป็น 10 ช่วงแยกจากกันตามฟังก์ชันพาร์ติชันและเรียกใช้แบบสอบถามแต่ละชุดใน SSMS พร้อมกัน การใช้ WAITFOR เพื่อเรียกใช้ทั้งหมดในเวลาเดียวกันอย่างแม่นยำผลลัพธ์คือแบบสอบถามทั้งหมดทำให้เสร็จสมบูรณ์ใน ~ 40% ของเวลาทั้งหมดที่ใช้โดย HASH …

5
ใครใช้ HierarchyId ในการผลิต? มันน่าเชื่อถือเหรอ?
มีใครใช้ HierarchyId ในการผลิตจริงกับตารางขนาดที่เหมาะสมมากกว่าสองสามพันแถวใช่ไหม มันน่าเชื่อถือ / นักแสดง? เพื่อให้ห่างไกลฉันไม่ได้พบคนที่ไม่ได้มีส่วนเกี่ยวข้องกับผู้ขายแนะนำและให้คำแนะนำแก่พอลนีลเซ่นกับมันนี่ ประสบการณ์ของคุณในการใช้ HierarchyId ในระบบการผลิตจริงคืออะไร คุณใช้เกณฑ์ใดเมื่อคุณเลือก HierarchyId ทางเลือกอื่น

1
สร้างฐานข้อมูลกับสร้างสิทธิ์ฐานข้อมูลใด ๆ
ใน Microsoft SQL Server ความแตกต่างระหว่างCREATE DATABASEและCREATE ANY DATABASEสิทธิ์คืออะไร ฉันไม่สามารถหาคำตอบที่เชื่อถือได้ ที่ดีที่สุดที่ฉันสามารถอนุมานได้ก็คือ (a) CREATE ANYหมายถึงฉันสามารถสร้างฐานข้อมูลที่จะเป็นเจ้าของโดยผู้ใช้รายอื่นในขณะที่CREATEฉันไม่สามารถหรือ (b) ได้รับอนุญาตเดิมใน Sybase / วันแรกของ SQL Server CREATE ANYและCREATEเป็นนามแฝง สอดคล้องกับ ANSI


3
Common Table Expression (CTE) มีประโยชน์อย่างไร?
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา จากmsdn : ต่างจากตารางที่ได้รับ CTE สามารถอ้างอิงตนเองและสามารถอ้างอิงได้หลายครั้งในแบบสอบถามเดียวกัน ฉันใช้ CTE ค่อนข้างมาก แต่ฉันไม่เคยคิดอย่างถี่ถ้วนเกี่ยวกับประโยชน์ของการใช้มัน ถ้าฉันอ้างอิง CTE หลายครั้งในแบบสอบถามเดียวกัน: มีประโยชน์ใด ๆ เกี่ยวกับประสิทธิภาพหรือไม่ ถ้าฉันเข้าร่วมด้วยตนเอง SQL Server จะสแกนตารางเป้าหมายสองครั้งหรือไม่
21 sql-server  cte 

3
ตกลงหรือไม่ที่จะเพิ่มดัชนีหายไป?
ฉันมักจะใช้ SSMS เพื่อทดสอบขั้นตอนการจัดเก็บช้าของฉันสำหรับดัชนีที่ขาดหายไป เมื่อใดก็ตามที่ฉันเห็น "ดัชนีที่หายไป (ผลกระทบ xxx)" ปฏิกิริยาเข่าของฉันคือการสร้างดัชนีใหม่ ผลลัพธ์นี้ทำให้การสืบค้นเร็วขึ้นทุกครั้งที่ฉันสามารถบอกได้ มีเหตุผลอะไรที่ฉันไม่ควรทำต่อไป?

4
การพิจารณาว่าเกิดการเปลี่ยนแปลงสกีมาอย่างไร
สิ่งเลวร้ายเกิดขึ้นเมื่อวานนี้ มุมมองที่สร้างขึ้นเมื่อไม่นานมานี้มีการแก้ไขโดยคนที่ทำลายรายงานในที่สุด น่าเสียดาย. บางคน (รู้ทั้งรู้หรือไม่รู้) ทำการปรับเปลี่ยนนี้ในฐานข้อมูล PRODUCTION คำถามของฉัน: มีวิธี (สคริปต์ / ซอฟต์แวร์ / ฟรีแวร์ ฯลฯ ) หรือไม่ซึ่งเราสามารถรู้ได้ว่าใคร (ชื่อผู้ใช้) ทำการเปลี่ยนแปลงนี้เพื่อให้ฉันสามารถยกเลิกการเข้าถึงฐานข้อมูลการผลิตสำหรับผู้ใช้นั้น หากคำถามของฉันไม่ชัดเจนโปรดแสดงความคิดเห็น
21 sql-server  view 

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