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

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

2
การออกแบบฐานข้อมูล SQL Server สำหรับข้อมูล“ เก็บถาวร แต่พร้อมใช้งาน”
เรามีฐานข้อมูลขนาดใหญ่นี้ (> 1TB) ที่เราตั้งใจจะ "ลดขนาด" ฐานข้อมูลหมุนรอบเอนทิตีหลักหนึ่งเรียกว่า "เยี่ยมชม" สำหรับการอภิปรายสมมติว่ามันเป็นฐานข้อมูลสำหรับการปฏิบัติทางการแพทย์ มี "ประเภท" การเข้าชม 30 ครั้งเช่นขั้นตอนรายปีการติดตามการฉีดวัคซีนและอื่น ๆ แต่ละรายการเป็นตารางเงินอุดหนุนสำหรับ "การเยี่ยมชม" เช่น "visit_immuno" ฐานข้อมูลได้สะสมข้อมูล 12 ปีมาตั้งแต่ปี 2000 มีคนเสนอว่าเราเก็บข้อมูลประมาณ 3 ปีในรุ่น "สด" และให้เวลาที่เหลืออยู่ในฐานข้อมูล "old_data" วันที่จะถูกเก็บไว้เฉพาะในตาราง "เยี่ยมชม" เนื่องจากมันถูกทำให้เป็นมาตรฐาน ตารางเยี่ยมชมยังมีROWVERSIONคอลัมน์และคอลัมน์BIGINTหลอก (คลัสเตอร์) สำหรับ intents และวัตถุประสงค์สมมติว่ากุญแจสำคัญในการจัดกลุ่มเป็นประชากรโดยลำดับ (SQL Server 2012 องค์กร) - cidเราจะตั้งชื่อมันว่า คำสั่งvisit.dateนี้ไม่ได้อยู่ในลำดับเดียวกับคีย์การจัดกลุ่มตัวอย่างเช่นเมื่อแพทย์ไปตรวจเยี่ยมเพิ่มเติมและกลับมาพร้อมกับข้อมูล "กระเป๋าเอกสาร" ของเขามันจะถูกรวมเข้าไว้ในตารางหลัก นอกจากนี้ยังมีการปรับปรุงบางอย่างเพื่อ "ไปที่" ตารางที่จะทำให้ROWVERSIONคอลัมน์ที่จะออกจากซิงค์กับทั้งสองcidและdateคอลัมน์ - จะนำมันก็ไม่ROWVERSIONหรือcidจะทำให้คีย์พาร์ทิชันที่เหมาะสมด้วยเหตุผลนี้ …

2
มีความแตกต่างระหว่างการวางนามแฝงคอลัมน์ที่จุดเริ่มต้นหรือจุดสิ้นสุดของคำนิยามคอลัมน์หรือไม่?
ฉันเคยเห็นและเขียนชื่อแทนคอลัมน์เป็นเสมอ SELECT 1 as ColumnName แต่วันนี้เจอคำถามที่ใช้ SELECT ColumnName = 1 มีความแตกต่างในวิธีการเรียกใช้แบบสอบถามทั้งสองนี้อย่างไร หรือมีมาตรฐานในกลุ่ม DBA เกี่ยวกับอันไหนที่จะใช้? ส่วนตัวผมคิดว่า 2 จะง่ายต่อการอ่าน / รักษาสำหรับคำจำกัดความคอลัมน์อีกต่อไป (ตัวอย่างที่ดีที่นี่จากบทความนี้ ) แต่ผมไม่เคยเห็นไวยากรณ์ที่ 2 ก่อนที่จะนำมาใช้ในวันนี้เพื่อให้กำลังสงสัยว่าถ้ามีเหตุผลบางอย่างที่ฉันไม่ควรจะเป็น ใช้มัน

3
วิธีการรีเฟรชกลุ่มความปลอดภัย AD บนการอนุญาต SQL Server
ฉันใช้ SQL Server 2008 บน Small Business Server 2003 ลูกค้าใช้ WinXP ฉันเพิ่มผู้ใช้ไปยัง Active Directory Security Group; เหตุใดผู้ใช้นี้ไม่สามารถเข้าถึงฐานข้อมูลได้ทันที ดูเหมือนว่ามีความล่าช้าก่อนที่ผู้ใช้จะรู้จักใน SQL Server ฉันใช้ AD Security Groups สำหรับการอนุญาตอย่างชัดแจ้งเพื่อที่ฉันไม่จำเป็นต้องเพิ่มผู้ใช้รายบุคคลใน SQL Server อย่างมีประสิทธิภาพฉันไม่จำเป็นต้องทำอะไรนอกจากเพิ่มผู้ใช้ในกลุ่มความปลอดภัย AD เพื่อให้สิทธิ์การเข้าถึง แต่ด้วยเหตุผลบางอย่างเซิร์ฟเวอร์ sql ไม่รู้จักการเพิ่มในทันที ฉันเคยเห็นนี่มาหลายครั้งแล้ว ฉันเพิ่มผู้ใช้ในกลุ่ม แต่ผู้ใช้นั้นไม่สามารถเข้าถึงข้อมูลได้จนกว่าจะถึงวันถัดไป ดูเหมือนว่าจะไม่สืบค้น Active Directory แบบเรียลไทม์ คุณช่วยยืนยันได้มั้ย ฉันต้องทำอย่างไรเพื่อให้เซิร์ฟเวอร์ SQL "รีเฟรช" รายชื่อผู้ใช้จาก Active Directory

2
เลือกลำดับต่อเนื่องที่ยาวที่สุด
ฉันพยายามสร้างแบบสอบถามใน PostgreSQL 9.0 ที่ได้รับลำดับของแถวต่อเนื่องที่ยาวที่สุดสำหรับคอลัมน์ที่ระบุ พิจารณาตารางต่อไปนี้: lap_id (serial), lap_no (int), car_type (enum), race_id (int FK) ในกรณีที่มีความเป็นเอกลักษณ์ของแต่ละlap_no(race_id, car_type) ฉันต้องการให้คิวรีสร้างลำดับที่ยาวที่สุดสำหรับหนึ่งrace_idและcar_typeดังนั้นจึงส่งคืนint(หรือยาว) ที่สูงที่สุด ด้วยข้อมูลต่อไปนี้: 1, 1, red, 1 2, 2, red, 1 3, 3, red, 1 4, 4, red, 1 5, 1, blue, 1 6, 5, red, 1 7, 2, blue, 1 8, 1, green, …

3
ค้นหาผู้ใช้กำพร้า
ใน SQL Server 2005 มีวิธีการค้นหาผู้ใช้ที่ไม่มีอยู่ในระดับเซิร์ฟเวอร์ (บัญชีที่ถูกลบในระดับเซิร์ฟเวอร์ แต่ไม่ได้ถูกแยกจากฐานข้อมูลก่อนที่จะถูกลบ) หรือบัญชีที่ไม่ได้เชื่อมโยง (บัญชีอาจถูกลบที่ระดับเซิร์ฟเวอร์ แต่ไม่ใช่ระดับ db จากนั้นอ่านอีกครั้ง แต่ระดับ db ไม่เคยล้างข้อมูล) ฉันมีเซิร์ฟเวอร์ที่ยุ่งมากและมันก็ยอดเยี่ยมมากถ้ามีคำถามให้เรียกใช้เพื่อค้นหาสิ่งเหล่านี้

3
มีวิธีใดบ้างที่จะแยกสตริงออกและฉีด SQL โดยไม่ต้องใช้เครื่องหมายคำพูดเดี่ยวใน oracle?
ฉันกำลังทดสอบแอปพลิเคชันที่ใช้ Oracle และพบรหัสต่อไปนี้ Query = "เลือกชื่อจากพนักงาน WHERE id = '" + PKID + "'; เช่นสตริงการสืบค้นมีเครื่องหมายคำพูดล้อมรอบค่า PKID ซึ่งได้มาจาก URL โดยตรง เห็นได้ชัดว่านี่คือการฉีด SQL แบบคลาสสิกที่รอให้เกิดขึ้น ... ยกเว้นแอปพลิเคชันอยู่เบื้องหลัง CA SiteMinder ซึ่งบล็อก URL ใด ๆ ด้วยการเสนอราคาเดียว (ในรูปแบบใด ๆ ) จากการถูกส่งผ่านไปยังแอปพลิเคชัน มีวิธีใดบ้างที่จะแยกออกจากสตริงและฉีด SQL โดยไม่ต้องใช้เครื่องหมายคำพูดเดี่ยว? แก้ไข: ขออภัยฉันควรชัดเจนกว่า - ฉันเข้าใจว่าควรเขียนอย่างไร แต่ฉันต้องโน้มน้าวผู้คนว่าเป็นปัญหาที่เอาเปรียบ ในขณะนี้เพราะมันอยู่เบื้องหลัง siteminder ซึ่งบล็อกราคาเดียวดังนั้นมันจะเป็นการแก้ไขที่มีลำดับความสำคัญต่ำ

2
การตั้งค่า READ UNCOMMITTED เมื่ออ่าน DMV
ฉันเคยเห็นหลายคนโทรSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDมาก่อนอ่านระบบ DMV มีเหตุผลใดที่จะทำเช่นนี้โดยสมมติว่าคุณไม่ได้โทรไปยัง DMV และตารางในธุรกรรมเดียวกันหรือไม่?
12 sql-server  dmv 

1
อัปเกรด SQL Server 2005 เป็น SQL Server 2012
ฉันมีการตั้งค่าสภาพแวดล้อมการทดสอบด้วยสิ่งต่อไปนี้: เครื่องเสมือน (Hyper-V) Windows Server 2008 R2 SP1 (x64 บิต) SP4 นักพัฒนา Windows SQL Server 2005 SP4 (x64 บิต) (ชื่ออินสแตนซ์เริ่มต้น) 1 ฐานข้อมูลพร้อมการจำลองแบบผสานตั้งค่า ... 3 สิ่งพิมพ์ที่มีสมาชิก 2 ราย เรากำลังทดสอบขั้นตอนการอัปเกรดเป็น SQL Server 2012 Developer Edition (sp1) ... ฉันดาวน์โหลด iso สำหรับ 64bit SQL Server 2012 Dev (sp1) จาก MSDN (สำเนาลิขสิทธิ์แบบเต็ม) และเริ่มลงเส้นทางการอัพเกรด ในขั้นตอนสุดท้ายที่เริ่มต้นการตรวจสอบเกณฑ์ที่แตกต่างกันเราพบปัญหาที่แปลกประหลาดตามที่อธิบายไว้ด้านล่าง: Rule …

2
วิธีการวางฐานข้อมูลในโหมด Single_User
ฉันจะวางฐานข้อมูลที่แสดงDatabaseName (Single User)เป็นชื่อได้อย่างไร เมื่อฉันพยายามลบฉันได้รับข้อผิดพลาดต่อไปนี้: การแก้ไขล้มเหลวสำหรับฐานข้อมูล 'DatabaseName' (Microsoft.SqlServer.Smo) คำสั่งเปลี่ยนแปลงฐานข้อมูลล้มเหลว (Microsoft SQL Server ข้อผิดพลาด: 5064) ฉันพยายามที่จะดำเนินการALTERด้านล่างและยังมีปัญหาเดียวกัน ALTER DATABASE [DatabaseName] SET MULTI_USER WITH NO_WAIT

3
“ AT TIME ZONE” พร้อมชื่อโซนบั๊ก PostgreSQL หรือไม่
ฉันตอบคำถามstackoverflowนี้และพบผลลัพธ์ที่แปลก: select * from pg_timezone_names where name = 'Europe/Berlin' ; name | abbrev | utc_offset | is_dst ---------------+--------+------------+-------- Europe/Berlin | CET | 01:00:00 | f และแบบสอบถามต่อไป select id, timestampwithtimezone, timestampwithtimezone at time zone 'Europe/Berlin' as berlin, timestampwithtimezone at time zone 'CET' as cet from data ; id | timestampwithtimezone | …

2
ETL: การแยกข้อมูลจาก 200 ตาราง - การไหลของข้อมูล SSIS หรือ T-SQL แบบกำหนดเอง
จากการวิเคราะห์ของฉันแบบจำลองมิติที่สมบูรณ์สำหรับคลังข้อมูลของเราจะต้องมีการดึงข้อมูลจากแหล่งข้อมูลกว่า 200 ตาราง บางส่วนของตารางเหล่านี้จะถูกดึงมาเป็นส่วนหนึ่งของการโหลดที่เพิ่มขึ้นและอื่น ๆ จะเป็นการโหลดแบบเต็ม โปรดทราบว่าเรามีฐานข้อมูลแหล่งข้อมูลประมาณ 225 รายการด้วยสคีมาเดียวกัน จากสิ่งที่ฉันได้เห็นการสร้างการไหลของข้อมูลอย่างง่าย ๆ ใน SSIS ด้วยแหล่งข้อมูล OLE DB และปลายทาง OLE DB ต้องการคอลัมน์และชนิดข้อมูลที่จะถูกกำหนดในขณะออกแบบ ซึ่งหมายความว่าในที่สุดฉันจะจบลงด้วยการไหลของข้อมูลมากกว่า 200 สำหรับการแยกเพียงอย่างเดียว จากมุมมองการบำรุงรักษาสิ่งนี้ทำให้ฉันกลายเป็นปัญหาใหญ่ ถ้าฉันต้องการทำการเปลี่ยนแปลงกวาดบางอย่างกับรหัสการแยกฉันจะต้องแก้ไขกระแสข้อมูลที่แตกต่างกัน 200 รายการ อีกทางเลือกหนึ่งฉันเขียนสคริปต์ขนาดเล็กซึ่งอ่านฐานข้อมูลต้นฉบับชื่อตารางและคอลัมน์ที่ฉันต้องการแยกจากชุดของตารางข้อมูลเมตา รหัสทำงานในหลายลูปและใช้ไดนามิก SQL เพื่อแยกจากตารางต้นฉบับผ่านเซิร์ฟเวอร์ที่เชื่อมโยงและ OPENQUERY จากการทดสอบของฉันสิ่งนี้ยังไม่เร็วเท่ากับการใช้กระแสข้อมูล SSIS กับแหล่ง OLEDB และปลายทาง ดังนั้นฉันสงสัยว่าฉันมีทางเลือกประเภทใด ความคิดจนถึงขณะนี้รวมถึง: การใช้EZAPIเพื่อสร้างแพ็คเกจ SSIS แบบเป็นโปรแกรมด้วยการไหลของข้อมูลอย่างง่าย ตารางและคอลัมน์ที่จะแยกจะมาจากตารางเมทาดาทาที่กล่าวถึงก่อนหน้านี้ ซื้อซอฟต์แวร์ภายนอก (ส่วนประกอบการไหลของข้อมูลแบบไดนามิก) วิธีที่ดีที่สุดในการเข้าถึงสิ่งนี้คืออะไร? เมื่อพูดถึงการเขียนโปรแกรม. NET ฉันเป็นผู้เริ่มต้นดังนั้นเวลาที่ต้องใช้ในการเพิ่มระดับความรู้พื้นฐานก็เป็นเรื่องที่น่ากังวลเช่นกัน

2
ความเสี่ยงในการเปลี่ยนเป็น ARITHABORT ON
ฉันทำงานกับผู้จัดจำหน่ายด้วยข้อตกลงที่พวกเขาให้แอปพลิเคชันหลักและฉันสามารถสร้างส่วนขยายของตัวเองได้ตราบใดที่ฉันไม่ได้แก้ไขแอปพลิเคชันหลัก มันสร้างขึ้นใน ColdFusion เชื่อมต่อกับฐานข้อมูล SQL Server 2005 บางรายงานที่ฉันสร้างขึ้นนั้นขึ้นอยู่กับมุมมองโดยใช้ฟังก์ชั่นที่คำนวณจากตารางหลักและรายงานเริ่มช้ามากเมื่อตารางใหญ่ขึ้น เพื่อเพิ่มความเร็วในรายงานที่ฉันต้องการที่จะใช้มุมมองการจัดทำดัชนี แต่หลังจากสร้างมุมมองที่จัดทำดัชนีไว้ในสภาพแวดล้อมการทดสอบของฉันแล้วแอปพลิเคชันหลักไม่สามารถแทรกลงในตารางหลักได้อีกต่อไป (ซึ่งจะส่งกลับข้อผิดพลาดที่ARITHABORTจำเป็นต้องONใช้เมื่อใช้มุมมองที่จัดทำดัชนี) ดังนั้นดูเหมือนว่าเพื่อที่จะใช้มุมมองที่มีการจัดทำดัชนีฉันต้องมีแอปพลิเคชันหลักSET ARITHABORT ONทุกครั้งที่แทรก / ปรับปรุงตารางหลัก ฉันวิ่งในสภาพแวดล้อมการทดสอบของฉัน: ALTER DATABASE MyDatabase SET ARITHABORT ON; และดูเหมือนว่าจะทำงานได้ดี แต่ผู้ขายของฉันบอกว่าเนื่องจากแอปพลิเคชันมีการค้นหาหลายพันครั้งอาจมีความเสี่ยงที่การตั้งค่านี้อาจทำลายหนึ่งในการค้นหาเหล่านี้และหากเรามีปัญหาฐานข้อมูลที่ไม่คาดคิดในอนาคตพวกเขาจะยืนยันว่าจะคืนค่าเริ่มต้น มีคำถามที่เกิดขึ้นจริงที่จะถูกทำลายโดยSET ARITHABORT ON? มีสถานการณ์ใดบ้างที่จะรักษาไว้ได้ดีกว่าOFF? TL; DR สำหรับมุมมองที่จัดทำดัชนีใหม่ของฉันเพื่อการทำงานฉันต้องตั้งค่าARITHABORT ONฐานข้อมูลทั้งหมด แต่ผู้ขายของฉันเตือนว่ามันจะเป็นความเสี่ยงของตัวเอง มีความเสี่ยงหรือไม่?

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

1
ทำไมค่าเริ่มต้น character_set_server คือ latin1
ฉันใช้ MySQL 5.5 และเมื่อฉันแสดงตัวแปรเกี่ยวกับชุดอักขระฉันมี +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ …


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