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

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

2
sp_send_dbmail กระบวนงานที่เก็บไว้ส่งพร้อมแนบ
ฉันได้รับมอบหมายให้ส่งรายงานรายเดือนเล็ก ๆ ให้กับหนึ่งในลูกค้าของฉัน รายงานก่อนหน้านี้ได้รับการดำเนินการด้วยตนเองในอินสแตนซ์เอาท์พุทคัดลอกไปยังสเปรดชีตและส่งให้กับลูกค้าเป็นสิ่งที่แนบมา ฉันกำลังมองหาโซลูชันที่ถาวรกว่าดังนั้นฉันตั้งใจจะใช้sp_send_dbmailขั้นตอนการจัดเก็บเพื่อเรียกใช้แบบสอบถามและส่งเป็นสิ่งที่แนบมา ทุกอย่างทำงานได้ แต่การจัดรูปแบบของข้อความ ตอนแรกฉันพยายามแนบผลลัพธ์เป็นไฟล์ CSV ด้วย@query_result_seperator = ','แต่ผลลัพธ์มีอยู่ทุกที่! เมื่อฉันเรียกใช้รายงานตามปกติผลลัพธ์ที่ได้จะดูดีใน SQL แต่การส่งเป็น CSV หรือเพียงแค่ในเนื้อหาของข้อความไม่ได้ ฉันคิดว่ามันอาจทำงานได้ดีกว่าถ้าฉันส่งออกผลลัพธ์เป็น HTML และส่งเป็นไฟล์แนบ / หรือเป็น XML แต่ฉันไม่รู้วิธีการทำเช่นนี้ ไม่มีใครมีข้อเสนอแนะใด ๆ ? ขอบคุณล่วงหน้า!

1
ฉันจะดีบัก Idle Query ได้อย่างไร
ฉันมีชุดแบบสอบถามที่ฉันทำงานทุกวันในฐานข้อมูลของฉัน อย่างไรก็ตามดูเหมือนว่าจะติดอยู่ในสถานะไม่ได้ใช้งานและฉันมีปัญหาในการดีบั๊กสิ่งที่เกิดขึ้น แบบสอบถามคือการรวมตัวกันบนโต๊ะที่ถูกแทรกพร้อมกันซึ่งฉันเดาว่าเกี่ยวข้องกับปัญหาอย่างใด (การรวมเป็นข้อมูลวันก่อนหน้าดังนั้นการแทรกไม่ควรส่งผลต่อผลลัพธ์) เบาะแส ฉันใช้มันในสคริปต์หลามโดยใช้ sqlalchemy อย่างไรก็ตามฉันได้ตั้งค่าระดับธุรกรรมเป็นแบบอัตโนมัติดังนั้นฉันไม่คิดว่าสิ่งต่าง ๆ จะถูกห่อในการทำธุรกรรม ในทางกลับกันฉันไม่เห็นข้อความค้นหาหยุดทำงานเมื่อฉันรันด้วยตนเองในเทอร์มินัล sql โดยการสอบถามแบบสอบถามครั้งแรกที่เข้ามาในฐานข้อมูลเป็นpg_stat_activity state='active'หลังจาก 15 วินาทีอาจจะมีการเปลี่ยนแปลงของรัฐที่จะ 'ไม่ได้ใช้งานและนอกจากนี้มีการตั้งค่าxact_start NULLธงรอไม่เคยถูกตั้งค่าเป็นจริง ก่อนที่ผมจะคิดออก autocommit ระดับธุรกรรมสำหรับ sqlalchemy มันแทนจะแขวนในรัฐมากกว่า'idle in transaction' 'idle'และมันอาจจะแฮงค์น้อยลงเล็กน้อยนับตั้งแต่ทำการเปลี่ยนแปลง? ฉันรู้สึกว่าฉันไม่พร้อมที่จะขุดลึกลงไปกว่าที่ฉันมี ข้อเสนอแนะใด ๆ แม้จะอธิบายเพิ่มเติมเกี่ยวกับรัฐต่างๆและผู้ฝึกงานระดับสูงที่เกี่ยวข้องโดยไม่ต้องตอบคำถามแน่นอนจะได้รับการชื่นชมอย่างมาก

1
เหตุใดผู้ใช้ใหม่จึงสามารถสร้างตารางใน PostgreSQL ได้
ฉันติดตามสองบทเรียนเพื่อสร้าง DB ด้วย: ลิงค์ผู้ใช้ที่มีสิทธิ์อย่างสมบูรณ์ ลิงก์ผู้ใช้แบบอ่านอย่างเดียว จากนั้นฉันได้รับคำแนะนำจากบทสอนของ CJ Estel ที่ระบุว่า "คุณอาจได้รับมรดกความสามารถในการสร้างตารางแม้ว่าเราจะไม่ได้มอบให้กับผู้ใช้ใหม่ของเราอย่างชัดเจน" ผู้ใช้แบบอ่านอย่างเดียวสามารถสร้างและเป็นเจ้าของตารางได้! CJ Estel ได้ชี้ให้เห็นถึงต้นตอของปัญหาเป็นอย่างดีนั่นคือฐานข้อมูลแม่แบบ แต่ความสามารถในการสร้างตารางทำลายบทเรียนมากที่สุดที่คุณได้รับจาก googling "อ่านเท่านั้น postgres ผู้ใช้" รวมถึงหนึ่งโฮสต์บน postgresql.org ผู้ใช้ของคุณมีสิทธิ์มากกว่าแบบอ่านอย่างเดียว! เหตุใดผู้ใช้ใหม่จึงมีความสามารถนี้ หลังจากยกเลิกสิทธิ์นี้แล้วฐานข้อมูลเป็นแบบอ่านอย่างเดียวสำหรับผู้ใช้รายนั้นหรือไม่

1
ให้สิทธิ์การเข้าถึงตารางของฐานข้อมูลทั้งหมด
ฉันเพิ่งอยากจะแบ่งปันสิทธิการเข้าถึงปกติกับผู้ใช้คนหนึ่งของเซิร์ฟเวอร์และฉันตระหนักว่าง่ายCREATE USERและGRANT ALL ON DATABASEคำสั่งไม่ให้เขาทำงานที่เรียบง่ายSELECTกับข้อมูลที่ ฉันต้องการให้สิทธิ์ในตารางทั้งหมดจากฐานข้อมูลที่กำหนดไปยังผู้ใช้ที่ระบุ แต่ฉันไม่แน่ใจว่ามันเป็นความคิดที่ดีที่สุดที่จะอนุญาตให้เขาเข้าถึงสคีมาทั้งหมดหรือไม่publicเพราะฉันไม่รู้ว่าจะให้สิทธิ์บางอย่างหรือไม่ การเพิ่ม มีวิธีอื่น ๆ ?

2
โพสต์ข้อผิดพลาดแพ็คเก็ตเริ่มต้นที่ไม่สมบูรณ์
ฉันกำลังพยายามติดตั้ง Postgres 9.3 บน Ubuntu 14.04 และฉันได้รับข้อผิดพลาดที่น่ารำคาญเมื่อเริ่มต้น นี่คือสิ่งที่ฉันเห็น: $ sudo service postgresql restart * Restarting PostgreSQL 9.3 database server * Error: could not exec /usr/lib/postgresql/9.3/bin/pg_ctl /usr/lib/postgresql/9.3/bin/pg_ctl start -D /var/lib/postgresql/9.3/main -l /var/log/postgresql/postgresql-9.3-main.log -s -o -c config_file="/etc/postgresql/9.3/main/postgresql.conf" : [fail] ดังนั้นฉันจะตรวจสอบไฟล์บันทึกด้วยผลลัพธ์นี้: 2015-01-05 21:50:05 EST LOG: database system was shut down at 2015-01-05 21:50:03 …

3
หลีกเลี่ยงการแสดงออกหลายหรือ `
ฉันมี SQL oracle ต่อไปและผลงานของตนและ แต่มันค่อนข้างน่าเกลียดที่มีทั้งหมดของors มีวิธีรัดกุมกว่านี้ไหม? SELECT * FROM foobar WHERE (SUBJECT ='STAT' and TERM ='111') or (SUBJECT ='STAT' and TERM ='222') or (SUBJECT ='ENGLISH' and TERM ='555') or (SUBJECT ='COMM' and TERM ='444') or (SUBJECT ='COMM' and TERM ='333') or (SUBJECT ='STAT' and TERM ='666') ...

1
การกู้คืนฐานข้อมูล SQL Server 2012 ในสภาพพร้อมใช้งานสูง
ฉันมีฐานข้อมูลที่อยู่ในโหมดความพร้อมใช้งานสูงตลอดเวลาที่ซิงโครไนซ์กับฐานข้อมูลอื่นในอินสแตนซ์อื่น ฉันจะคืนค่าจาก.bakไฟล์ไปยังฐานข้อมูลหลักโดยใช้T-SQLอย่างไร ฉันยังใหม่กับความพร้อมใช้งานสูงและฉันได้รับคำแนะนำว่าฉันจำเป็นต้องลบฐานข้อมูลออกจากความพร้อมใช้งานสูงก่อนที่ฉันจะสามารถกู้คืนได้ ฉันหวังว่าฉันจะสามารถกู้คืนตรงไปยังหลักในขณะที่AlwaysOnยังคงเปิดใช้งานและมันจะซิงค์อัตโนมัติกับรอง

6
บันทึกธุรกรรมจะไม่ย่อลง DB คิดว่ามันกำลังจำลองข้อมูล
ฉันมีฐานข้อมูล SQL Server 2008 R2 Express ที่ใช้ Kaspersky Security Center และฉันไม่รู้ว่าเกิดอะไรขึ้นกับการติดตั้ง แต่ฐานข้อมูลดูเหมือนจะคิดว่ามันกำลังถูกจำลองแบบและจะไม่เพิ่มพื้นที่ว่างจากบันทึกธุรกรรม เช่น: USE master; SELECT name, log_reuse_wait, log_reuse_wait_desc, is_cdc_enabled FROM sys.databases WHERE name = 'KAV'; SELECT DATABASEPROPERTYEX('KAV', 'IsPublished'); ผลตอบแทน: name | log_reuse_wait | log_reuse_wait_desc | is_cdc_enabled -----|----------------|---------------------|--------------- KAV | 6 | REPLICATION | 0 DATABASEPROPERTYEX('KAV', 'IsPublished') ---------------------------------------- 0 [not …

6
วิธีที่มีประสิทธิภาพมากที่สุดในการค้นหาอินสแตนซ์ที่ทำงานอยู่ทั้งหมดของ SQL Server โดยใช้ PowerShell คืออะไร
ฉันได้รับมอบหมายให้ค้นหาอินสแตนซ์ทั้งหมดของ SQL Server ที่ทำงานอยู่ภายในโดเมนของเรา ในหลายกรณีมีหลายอินสแตนซ์ต่อเซิร์ฟเวอร์ ฉันเห็นวิธี PowerShell สองวิธีที่แตกต่างกันในการค้นหาอินสแตนซ์เหล่านี้ แต่ดูเหมือนจะไม่พบอินสแตนซ์ทั้งหมด 1) ใช้ WMI $srvr = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer $computerName $instances = $srvr | ForEach-Object {$_.ServerInstances} | Select @{Name="fullName";Expression={$computerName +"\"+ $_.Name}} return $instances 2) ใช้รีจิสตรีระยะไกล (เช่นเดียวกับ Get-SQLInstance 1 ) ปัญหาที่ใหญ่ที่สุดที่ฉันพบคือเซิร์ฟเวอร์ทั้งหมดที่ฉันรู้จักไม่ทำงานกับผู้ให้บริการ SQL Server WMI และไม่อนุญาตให้ใช้รีจิสตรีระยะไกล มีวิธีที่สามหรือไม่? ฉันสามารถใช้ Remote Desktop เพื่อเข้าถึงเซิร์ฟเวอร์ทั้งหมด แต่ฉันกำลังดูเครื่องจักรประมาณ 30 เครื่องและต้องการหลีกเลี่ยงขั้นตอนแบบแมนนวลหากเป็นไปได้ …

1
การสร้างแผนการดำเนินการใน SQL Server เป็นอย่างไร
รับค่าคงที่ดังต่อไปนี้: ฐานข้อมูลเดียวกันที่มีโครงสร้างเดียวกัน (ตารางดัชนี ฯลฯ ) ข้อมูลเดียวกัน SQL Server และการกำหนดค่าฮาร์ดแวร์เดียวกัน สถิติเดียวกัน ตัวเลือก SET เดียวกันในไคลเอนต์ SQL Server เวอร์ชันเดียวกัน แฟล็กการติดตามเดียวกัน เมื่อกำหนดค่าคงที่เหล่านี้แล้ว SQL Server จะสร้างแผนเดียวกันสำหรับแบบสอบถามที่กำหนดหรือไม่ ถ้าไม่มีข้อควรพิจารณาอื่น ๆ อีกไหม? นอกจากนี้ยังมีองค์ประกอบของ nondeterminism ที่ต้องพิจารณาด้วยหรือไม่?

1
อัปเดตคอลัมน์ทั้งหมดจากตารางอื่น
ฉันต้องการอัปเดตตารางจากอีกอันหนึ่งและฉันต้องอัปเดตคอลัมน์ทั้งหมด นอกจากการแสดงทุกคอลัมน์ในส่วนSETคำสั่งมีวิธีอัปเดตทั้งหมดในครั้งเดียวหรือไม่ แบบนี้: update tableA set * = tableB.* from tableB where tableA.id = tableB.id ฉันลอง psql แล้วมันใช้งานไม่ได้ ฉันต้องแสดงรายการทุกคอลัมน์ดังนี้ update tableA set c1 = tableB.c1, c2 = tableB.c2, ... from tableB where tableA.id = tableB.id tableBcreate .. like tableAถูกสร้างขึ้นใช้ ดังนั้นพวกเขาจึงเหมือนกันโดยทั่วไป และเหตุผลที่ฉันทำก็คือว่าผมต้องโหลดข้อมูล CSV เพื่อตาราง temp tableBแล้ว update อยู่บนพื้นฐานของข้อมูลใหม่ในtableA จำเป็นต้องถูกล็อคให้น้อยที่สุดและต้องรักษาความสมบูรณ์ ฉันไม่แน่ใจว่า 'ลบแล้วแทรก' …

3
จำกัด ผู้ใช้ให้คัดลอกเฉพาะการสำรองข้อมูล
ฉันต้องการปรับใช้การจัดส่งบันทึกในสภาพแวดล้อมการผลิตของฉัน นี่จะหมายความว่าฉันจะต้องจัดการกลุ่มการสำรองข้อมูลซึ่งอาจถูกรบกวนโดยผู้ที่สำรองข้อมูลเพื่อฟื้นฟูสภาพแวดล้อมการพัฒนา หากฉันมีความล้มเหลวและต้องการใช้การสำรองข้อมูลบันทึกเพื่อคืนค่าสู่จุดในเวลาที่ฉันจะต้องสำรองข้อมูลโดยนักพัฒนา สิ่งนี้จะไม่เกิดขึ้นหากนักพัฒนาซอฟต์แวร์ใช้เฉพาะการสำรองข้อมูล COPY เท่านั้น ดังนั้นคำถามของฉันคือมีวิธี จำกัด ผู้ใช้ให้สามารถสำรองข้อมูล COPY เท่านั้นหรือไม่

5
ตรวจจับการเปลี่ยนแปลงในตาราง SQL Server
ในแอปพลิเคชันของฉันด้วยฐานข้อมูลที่รันบน SQL Server 2012 ฉันมีงาน (ภารกิจตามกำหนดเวลา) ที่ดำเนินการแบบสอบถามที่มีราคาแพงเป็นระยะและเขียนผลลัพธ์ลงในตารางที่แอปพลิเคชันสามารถสอบถามได้ในภายหลัง โดยหลักการแล้วฉันต้องการเรียกใช้คิวรีที่มีราคาแพงเฉพาะเมื่อมีบางสิ่งเปลี่ยนแปลงเนื่องจากเคียวรีถูกเรียกใช้งานครั้งล่าสุด เนื่องจากตารางต้นฉบับมีขนาดใหญ่มากฉันจึงไม่สามารถเลือกการตรวจสอบกับคอลัมน์ผู้สมัครทั้งหมดหรืออะไรทำนองนั้น ฉันมีความคิดต่อไปนี้: เขียนการประทับเวลาที่มีการเปลี่ยนแปลงครั้งล่าสุดอย่างชัดเจนการตั้งค่าสถานะ "ต้องเป็นข้อความค้นหา" หรือสิ่งนี้ในตารางติดตามทุกครั้งที่ฉันเปลี่ยนบางสิ่งในตารางต้นฉบับ ใช้ทริกเกอร์ในการทำเช่นเดียวกัน อย่างไรก็ตามฉันอยากจะรู้ว่ามีวิธีที่มีน้ำหนักเบาในการตรวจสอบการเปลี่ยนแปลงในตารางโดยที่ฉันไม่ได้ติดตามการเขียนอย่างชัดเจนหรือไม่ ยกตัวอย่างเช่นฉันจะได้รับ "ปัจจุบัน" ROWVERSIONของตารางหรืออะไรแบบนั้น?

2
การติดตั้ง SQL Server 2012 Express ล้มเหลวด้วยข้อผิดพลาด“ ไม่พบหมายเลขอ้างอิงการเริ่มต้นโปรแกรมฐานข้อมูล”
ฉันพยายามติดตั้ง SQL Server Express 2012 ด้วย x64 x64 บน Windows 7 SP1 x64 เครื่องนี้เคยติดตั้ง SQL Server Express 2012 มาก่อน อินสแตนซ์นี้ได้รับการอัพเกรดเป็น SQL Server 2012 Standard ซึ่งได้ถูกถอนการติดตั้งไปแล้ว ต่อไปนี้เป็นตัวเลือกที่เลือกระหว่างการติดตั้ง: รวมการอัปเดตผลิตภัณฑ์ SQL Server ในการติดตั้ง - 2 เกี่ยวข้องกับ KB 2793634 ติดตั้งคุณสมบัติทั้งหมดไปยังไดเรกทอรีเริ่มต้น SQLEXPRESS อินสแตนซ์ที่มีชื่อในไดเร็กทอรีรูทอินสแตนซ์ดีฟอลต์ บัญชีบริการเริ่มต้น: โปรแกรมฐานข้อมูลเซิร์ฟเวอร์ SQL -> NT Service \ MSSQL $ SQLEXPRESS การกำหนดค่าเครื่องมือฐานข้อมูลเริ่มต้น การติดตั้งล้มเหลวโดยมีข้อผิดพลาดดังต่อไปนี้: …

3
สามารถแยกความแตกต่างจากการรวมเข้ากับอะไรก็ได้หรือไม่?
เป็นวิธีการรวมIS DISTINCT FROMกับpostgres ANYหรือวิธีอื่น ๆ ที่เป็นระเบียบเพื่อให้ได้ผลลัพธ์เดียวกันหรือไม่? select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo <> any(array[null, 'A']); count ------- 1 (1 row) select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo is distinct …

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