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

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

3
ใช้ CASE เพื่อเลือกคอลัมน์ในแบบสอบถามแบบ UPDATE หรือไม่
ฉันสามารถใช้CASEเพื่อเลือกคอลัมน์ที่จะแสดงในSELECTแบบสอบถาม (Postgres) เช่น: SELECT CASE WHEN val = 0 THEN column_x WHEN val = 1 THEN column_y ELSE 0 END AS update, ... มีความคล้ายคลึงกันหรือไม่เมื่อดำเนินการUPDATEค้นหาใน Postgres (เช่นเลือกคอลัมน์ที่ควรได้รับการอัปเดต)? ฉันคิดว่าไม่ใช่เพราะฉันไม่พบอะไรเกี่ยวกับเรื่องนี้ แต่อาจมีบางคนมีทางเลือกที่ฉลาด (นอกเหนือจากการใช้โพรซีเดอร์หรืออัปเดตแต่ละคอลัมน์โดยใช้ a CASEเพื่อพิจารณาว่าควรกำหนดค่าของคอลัมน์ใหม่หรือมอบหมายค่าเดิม ราคา). หากไม่มีทางเลือกอื่นที่ง่ายแน่นอนฉันจะยอมรับว่าเป็นคำตอบเช่นกัน ข้อมูลเพิ่มเติม : ในกรณีของฉันฉันมีคอลัมน์ที่อาจเกิดขึ้น 14 คอลัมน์ซึ่งอาจได้รับการอัปเดตโดยมีการอัปเดตเพียงคอลัมน์เดียวต่อแถวที่ตรงกัน (ตารางที่จะอัปเดตเข้าร่วมกับอีกคอลัมน์หนึ่งในแบบสอบถาม) จำนวนแถวที่จะอัปเดตจะแตกต่างกันมากที่สุดอาจเป็นหลายสิบหรือหลายร้อย ฉันเชื่อว่ามีการจัดทำดัชนีสำหรับเงื่อนไขการเข้าร่วม

3
ERROR_STATE () ใน SQL Server คืออะไรและสามารถใช้งานได้อย่างไร?
ฉันอ่านว่าERROR_STATE()สามารถช่วยแยกแยะความแตกต่างระหว่างสถานะ / สถานที่ต่าง ๆ ในซอร์สโค้ดซึ่งเกิดข้อผิดพลาดประเภทเดียวกันได้ แต่มันไม่ชัดเจนสำหรับฉันว่ามันมีประโยชน์อย่างไร สถานะ MSDN: ERROR_STATE() ส่งคืนหมายเลขสถานะของข้อผิดพลาดที่ทำให้บล็อก CATCH ของโครงสร้าง TRY … CATCH ถูกเรียกใช้ สามารถนำไปใช้งานจริงได้อย่างไร? บางคนสามารถยกตัวอย่างให้ฉันคนที่ให้ไว้ในบทความอ้างอิงนี้ไม่ได้ช่วยอธิบายสิ่งต่าง ๆ ได้ดีสำหรับฉัน

2
วิธีการใช้ล็อคในแง่ดีอย่างถูกต้องใน MySQL
หนึ่งจะใช้ล็อคในแง่ดีอย่างถูกต้องใน MySQL ได้อย่างไร ทีมของเราได้อนุมานว่าเราต้องทำ # 4 ด้านล่างมิฉะนั้นอาจมีความเสี่ยงที่เธรดอื่นสามารถอัปเดตบันทึกรุ่นเดียวกัน แต่เราต้องการตรวจสอบว่านี่เป็นวิธีที่ดีที่สุด สร้างเขตข้อมูลเวอร์ชันบนตารางที่คุณต้องการใช้การล็อคในแง่ดีสำหรับคอลัมน์ชื่อ = "รุ่น" เมื่อเลือกตรวจสอบให้แน่ใจว่าได้รวมคอลัมน์รุ่นแล้วจดบันทึกเวอร์ชัน ในการอัปเดตครั้งต่อ ๆ ไปคำสั่งการอัปเดตควรออก "โดยที่ version = X" โดยที่ X คือรุ่นที่เราได้รับใน # 2 และตั้งค่าฟิลด์เวอร์ชันระหว่างคำสั่งการอัปเดตนั้นเป็น X + 1 ดำเนินการSELECT FOR UPDATEเกี่ยวกับบันทึกที่เรากำลังจะอัปเดตเพื่อให้เราเป็นอันดับที่สามารถเปลี่ยนแปลงบันทึกที่เรากำลังพยายามที่จะปรับปรุง เพื่อชี้แจงเราพยายามป้องกันสองเธรดที่เลือกเร็กคอร์ดเดียวกันในหน้าต่างเวลาเดียวกันที่พวกเขาคว้าเร็กคอร์ดเวอร์ชันเดียวกันจากการเขียนทับกันถ้าพวกเขาพยายามและอัพเดตเร็กคอร์ดในเวลาเดียวกัน เราเชื่อว่าหากเราไม่ทำ # 4 มีโอกาสที่ถ้าทั้งสองเธรดป้อนธุรกรรมของตนในเวลาเดียวกัน (แต่ยังไม่ได้ออกการอัปเดต) เมื่อพวกเขาไปอัปเดตเธรดที่สองที่จะใช้ UPDATE ... โดยที่ version = X จะทำงานกับข้อมูลเก่า เราคิดถูกต้องหรือไม่ว่าเราต้องทำการล็อกในแง่ร้ายเมื่อทำการอัพเดตแม้ว่าเราจะใช้ฟิลด์เวอร์ชั่น / การล็อคในแง่ดี
13 mysql  locking 

4
ผลกระทบด้านความปลอดภัยและประสิทธิภาพของ“ สถานะเซิร์ฟเวอร์ดู”
คำถามนี้ชี้ให้เห็นว่าจำเป็นต้องได้รับอนุญาต "ดูสถานะเซิร์ฟเวอร์" สำหรับ DMV (มุมมองการจัดการแบบไดนามิก) ต่างๆ แต่ฉันไม่สามารถหาสิ่งที่คุณทำและไม่ต้องการให้สิทธิ์ ตอนนี้ฉันเข้าใจแล้วว่า "การอนุญาตน้อยที่สุด" และทำไมคุณไม่ต้องการให้ใครเลย แต่ฉันไม่สามารถหาแนวทางในการประเมินว่าควรได้รับอนุญาตหรือไม่ ดังนั้นคำถามของฉัน: อะไรคือความปลอดภัยและความหมายของประสิทธิภาพในการให้สิทธิ์ผู้ใช้ "ดูสถานะเซิร์ฟเวอร์" พวกเขาทำอะไรได้บ้างพวกเขาอาจไม่ได้รับอนุญาตให้ทำ ... อัปเดต : ข้อบ่งชี้หนึ่งคือผู้ใช้จะสามารถใช้ DMV เพื่อดูข้อความค้นหาได้ หากการสืบค้นหรือพารามิเตอร์การสืบค้นสามารถมีข้อมูลที่เป็นความลับที่ผู้ใช้ไม่สามารถมองเห็นได้การอนุญาตให้ VIEW SERVER STATE อนุญาตให้ทำเช่นนั้นได้ (เช่น dob = หรือ ssn =)
13 sql-server 

4
กระบวนการ“ TASK MANAGER” กำลังเข้ายึดฐานข้อมูลโหมดผู้ใช้คนเดียว มันคืออะไร?
นี่เป็นคำถามที่ซ้ำกันที่ฉันถามในstackoverflowแต่ฉันได้รับคำแนะนำว่าคนที่นี่อาจมีความคิดที่ดีขึ้นว่าเกิดอะไรขึ้น ฉันมีปัญหาเป็นระยะ ๆ เมื่ออัพเกรด SQL Server ในโหมดผู้ใช้คนเดียวโดยใช้. NET SqlConnection แอปพลิเคชั่นอื่น ๆ บางอย่างจะล็อกเข้าสู่ฐานข้อมูลในขณะที่กำลังประมวลผลโค้ด SQL และเริ่มกระบวนการของฉัน SqlConnection จะไม่ถูกปิดหรือกำจัด แต่อย่างใด แต่แอปพลิเคชั่นอื่นบางตัวเชื่อมต่อกับฐานข้อมูลและทำให้การเชื่อมต่อของฉันหยุดชะงัก เมื่อฉันรัน sp_who ฉันจะเห็นว่ากระบวนการที่ควบคุมฐานข้อมูลคือ Command = "TASK MANAGER" ทุกคนสามารถบอกฉันได้ว่ากระบวนการนี้มีจุดประสงค์อะไรและในโลกจะเข้าสู่ฐานข้อมูลได้อย่างไรซึ่งอยู่ในโหมดผู้ใช้คนเดียวและมีการเชื่อมต่อที่ใช้งานอยู่?

1
ตัวเลือกการล็อคของฉันสำหรับคำสั่งผสานคืออะไร
ฉันมีขั้นตอนการจัดเก็บที่ดำเนินการคำสั่งMERGE ดูเหมือนว่าจะล็อกทั้งตารางตามค่าเริ่มต้นเมื่อดำเนินการผสาน ฉันกำลังเรียกขั้นตอนการจัดเก็บนี้ภายในธุรกรรมที่ฉันกำลังทำสิ่งอื่นอยู่ด้วยและฉันหวังว่ามันจะล็อคแถวที่ได้รับผลกระทบเท่านั้น ฉันลองคำใบ้MERGE INTO myTable WITH (READPAST)และดูเหมือนจะล็อคน้อยลง แต่มีคำเตือนในเอกสาร ms ที่บอกว่าสามารถแทรกคีย์ที่ซ้ำกันได้แม้จะข้ามคีย์หลัก นี่คือคีตารางของฉัน: CREATE TABLE StudentDetails ( StudentID INTEGER PRIMARY KEY, StudentName VARCHAR(15) ) GO INSERT INTO StudentDetails VALUES(1,'WANG') INSERT INTO StudentDetails VALUES(2,'JOHNSON') GO CREATE TABLE StudentTotalMarks ( Id INT IDENTITY PRIMARY KEY, StudentID INTEGER REFERENCES StudentDetails, StudentMarks INTEGER ) GO …

5
PostgreSQL: วันที่สร้างตาราง
ฉันเพิ่งเสร็จสิ้นโครงการในระหว่างที่สร้างตารางฐานข้อมูลจำนวนมาก ตารางเหล่านี้ส่วนใหญ่มีขยะชั่วคราวและฉันกำลังมองหาวิธีง่ายๆในการแสดงรายการตารางเหล่านี้ทั้งหมด มีวิธีรายการตาราง DB ทั้งหมดเรียงตามวันที่สร้างของพวกเขา

3
วิธีค้นหาว่าการสำรองข้อมูลเซิร์ฟเวอร์ SQL นั้นถูกเข้ารหัสด้วย TDE โดยไม่กู้คืนการสำรองข้อมูลหรือไม่
มีวิธีการค้นหาจากไฟล์ SQL Server Backup หรือตาราง MSDB หรือไม่หากการสำรองข้อมูลถูกเข้ารหัสด้วย TDE โดยไม่ต้องพยายามเรียกคืนไฟล์ข้อมูลสำรอง? ขอบคุณ
13 sql-server 

1
บีบอัดฐานข้อมูล PostgreSQL
ฉันมีฐานข้อมูล PostgreSQL ขนาดใหญ่ที่มีขนาดใหญ่กว่า 500GB ซึ่งใหญ่เกินไป อย่างไรก็ตามมีการบีบอัดฐานข้อมูลลงในขนาดที่สามารถจัดการได้มากขึ้นหรือไม่? ฉันพยายามทำเช่นนี้กับ SquashFS และฐานข้อมูลที่บีบอัดลงไปที่ 177GB แต่ PostgreSQL ต้องการให้ฐานข้อมูลที่มีการเข้าถึงการเขียนและระบบ Squashed เป็นแบบอ่านอย่างเดียว ผู้ใช้ฐานข้อมูลที่มีประสบการณ์มากขึ้นมีข้อเสนอแนะใด ๆ เพื่อบรรลุเป้าหมายนี้หรือไม่? ฐานข้อมูลเก็บข้อมูล GIS สำหรับดาวเคราะห์และจะใช้ภายในระบบที่ปรับใช้ ขณะนี้มันตั้งอยู่บน 1TB SSD แต่ฉันพยายามหลีกเลี่ยงการตบในฮาร์ดไดรฟ์เพิ่มเติมเพียงเพื่อรองรับฐานข้อมูลขนาดใหญ่ ฐานข้อมูลทำงานได้ตามที่ต้องการโดยไม่มีปัญหาฉันเพียงต้องการบีบอัดให้มีขนาดที่จัดการได้มากขึ้นและหลีกเลี่ยงการวางลงในไดรฟ์อื่น

2
วิธีการระบุฐานข้อมูลการรับรองความถูกต้องและฐานข้อมูลเป้าหมายแยกต่างหากในการเชื่อมต่อ mongodb uri?
ฉันใช้ URI การเชื่อมต่อนี้จะเชื่อมต่อกับ mongodb://user:password@localhost/adminMongoDB: มันจะใช้adminเป็นรับรองความถูกต้องบอทและฐานข้อมูลเป้าหมาย ฉันจะทำให้ uri ใช้adminเป็นรับรองความถูกต้อง แต่อนุญาตให้ฉันเชื่อมต่อกับฐานข้อมูลอื่นได้อย่างไร โปรดดูคำสั่งด้านล่างเป็นตัวอย่าง: mongo --host localhost -u user -p password --authentication admin test คำสั่งดังกล่าวจะใช้adminเป็นฐานข้อมูลการตรวจสอบ แต่เชื่อมต่อกับtestฐานข้อมูล ฉันจะทำสิ่งเดียวกันกับ uri ได้อย่างไร

2
วิธีทำให้ DISTINCT ON เร็วขึ้นใน PostgreSQL
ฉันมีตารางstation_logsในฐานข้อมูล PostgreSQL 9.6: Column | Type | ---------------+-----------------------------+ id | bigint | bigserial station_id | integer | not null submitted_at | timestamp without time zone | level_sensor | double precision | Indexes: "station_logs_pkey" PRIMARY KEY, btree (id) "uniq_sid_sat" UNIQUE CONSTRAINT, btree (station_id, submitted_at) ฉันพยายามที่จะได้รับที่ผ่านมาlevel_sensorค่าขึ้นอยู่กับแต่ละsubmitted_at station_idมีประมาณ 400 ที่ไม่ซ้ำกันมีstation_idค่านิยมและรอบ 20k station_idแถวต่อวันต่อ ก่อนสร้างดัชนี: …

1
MySQL: ธุรกรรมจะล็อกแถวหรือไม่
ฉันไม่เคยลองใช้ธุรกรรม MySQL มาก่อนฉันแค่ต้องการชี้แจงบางอย่าง หากผู้ใช้สองคนเรียกใช้แบบสอบถามในเวลาที่แน่นอน MySQL จะจัดการเรื่องนี้อย่างไร เช่นผู้ใช้พยายามอัปเดตบันทึก user1: อัปเดตชุดตารางคอลัมน์ = คอลัมน์ - 4 โดยที่ column_id = 1; user2: อัปเดตชุดคอลัมน์ตาราง = คอลัมน์ - 7 โดยที่ column_id = 1; ตอนนี้ถ้าฉันใช้ทรานแซกชัน MySQL จะเลือกแบบสอบถามที่จะถูกดำเนินการก่อนและล็อกผู้ใช้รายที่สองจนกว่าจะมีการสืบค้นครั้งแรก จะเป็นล็อคตารางหรือล็อคแถวหรือไม่? จะเป็นอย่างไรถ้าผู้ใช้รายที่สามออกคำสั่ง select? MySQL จะคืนค่าอะไร? ป.ล. นี้จะอยู่ที่ Innodb

2
ฉันจะทราบได้อย่างไรว่าเหตุใดเอกสาร MongoDB จึงไม่ผ่านการตรวจสอบ
ฉันจะตรวจสอบได้อย่างไรว่าเหตุใดการแทรกเอกสาร MongoDB จึงล้มเหลวในการตรวจสอบ สิ่งที่ฉันได้รับกลับมาคือ writeError ที่ระบุว่า "การตรวจสอบเอกสารล้มเหลว" ซึ่งไม่ได้มีประโยชน์มาก (สิ่งนี้เกิดขึ้นบ่อยและฉันต้องการที่จะเข้าใจวิธีการแก้ไขข้อบกพร่องเหล่านี้อย่างถูกต้องแทนที่จะขอความช่วยเหลือจากตัวอย่างที่เฉพาะเจาะจง)

4
ไม่สามารถสร้างแคตตาล็อก SSISDB
รับข้อผิดพลาดด้านล่างขณะพยายามสร้างแคตตาล็อกในบริการการรวมของ sql server 2014 ความคิดใดที่ฉันพลาดในการติดตั้งหรือที่อื่น ๆ ? ไม่สามารถเข้าถึงไฟล์สำรองข้อมูลแค็ตตาล็อก 'C: \ Program Files \ Microsoft SQL Server \ 120 \ DTS \ Binn \ SSISDBBackup.bak' ตรวจสอบให้แน่ใจว่ามีไฟล์ฐานข้อมูลอยู่และบัญชี SQL Server Service นั้นสามารถเข้าถึงได้ (Microsoft.SqlServer.IntegrationServices.Common.ObjectModel)


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