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

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

6
สคริปต์เพื่อดูการรันงานใน SQL Server ด้วยเวลาเริ่มงาน
วิธีการเขียนสคริปต์เพื่อดูงานใน SQL Server ที่มีเวลาเริ่มงาน? SELECT sj.name, sja.run_requested_date, CONVERT(VARCHAR(12), sja.stop_execution_date-sja.start_execution_date, 114) Duration FROM msdb.dbo.sysjobactivity sja INNER JOIN msdb.dbo.sysjobs sj ON sja.job_id = sj.job_id WHERE sja.run_requested_date IS NOT NULL ORDER BY sja.run_requested_date desc;

7
ฉันจะจัดการกับข้อ จำกัด FK เมื่อนำเข้าข้อมูลโดยใช้ตัวช่วยสร้างการนำเข้า / ส่งออก DTS ได้อย่างไร
ฉันพยายามใช้ตัวช่วยสร้างการนำเข้าและส่งออกเซิร์ฟเวอร์ SQL เพื่อคัดลอกข้อมูลจากฐานข้อมูลการผลิตของฉันไปยังฐานข้อมูล dev ของฉัน แต่เมื่อฉันทำมันล้มเหลวด้วยข้อผิดพลาด "การแทรก INSERT ขัดกับข้อ จำกัด ของต่างประเทศ" ฉันมีตารางมากกว่า 40 ตาราง ของข้อ จำกัด FK มีวิธีง่าย ๆ ในการจัดการกับสิ่งนี้โดยไม่ต้องเขียนข้อ จำกัด แบบหล่น / เพิ่มสคริปต์ constrat? แก้ไข: ฉันเพิ่งพบว่าในรุ่นของ SQL Server ซึ่งเป็นสิ่งที่ฉันกำลังทำงานอยู่ DTS จะไม่อนุญาตให้คุณบันทึกแพ็คเกจ

1
กระชับวัตถุขนาดใหญ่ในงานจัดระเบียบดัชนีใหม่
ฉันตั้งค่าแผนการบำรุงรักษาใน SQL Server 2008 R2 ในการจัดระเบียบดัชนีใหม่มีตัวเลือกสำหรับ "วัตถุขนาดใหญ่ที่มีขนาดกะทัดรัด" หมายความว่าอะไรและฉันต้องการเปิดใช้งานหรือไม่

3
เป็นไปได้หรือไม่ที่จะได้รับ call call สำหรับการเรียกใช้งานในทริกเกอร์?
ฉันมี 10 โพรซีเดอร์ที่เก็บไว้และแต่ละอันจะแทรกลงในหนึ่ง tableX เป็นไปได้หรือไม่ที่ทริกเกอร์เนื้อความของ tableX จะได้รับวัตถุใดที่ทำให้เกิดการดัดแปลง tableX (เก็บไว้ proc1 หรือ sp2 หรือ .... )? ขอขอบคุณ.

4
SQL Server พบการร้องขอ I / O ที่ใช้เวลานานกว่า 15 วินาที
ในการผลิต SQL Server เรามีการกำหนดค่าดังต่อไปนี้: 3 เซิร์ฟเวอร์ Dell PowerEdge R630 ซึ่งรวมอยู่ในกลุ่มความพร้อมใช้งานทั้งหมด 3 เชื่อมต่อกับหน่วยเก็บข้อมูล Dell SAN เดียวซึ่งเป็นอาร์เรย์ RAID ในบางครั้งในระดับประถมศึกษาเราเห็นข้อความคล้ายกับด้านล่าง: SQL Server พบคำขอ I / O 11 รายการที่เกิดขึ้นในเวลานานกว่า 15 วินาทีเพื่อให้เสร็จสมบูรณ์ในไฟล์ [F: \ Data \ MyDatabase.mdf] ใน id ฐานข้อมูล 8 การจัดการไฟล์ OS คือ 0x0000000000001FBC ออฟเซ็ตของ I / O ที่ยาวล่าสุดคือ: 0x000004295d0000 ระยะเวลาของ I / O …

1
ฉันจะเก็บหมายเลขโทรศัพท์ใน PostgreSQL ได้อย่างไร
สมมติว่าฉันต้องการจัดเก็บหมายเลขโทรศัพท์ในฐานข้อมูล ฉันอาจรับหมายเลขโทรศัพท์จากนอกสหรัฐอเมริกา ฉันจะเก็บหมายเลขโทรศัพท์เหล่านี้ได้อย่างไร

4
ดัชนีประสิทธิภาพสำหรับ CHAR กับ VARCHAR (Postgres)
ในคำตอบนี้ ( /programming/517579/strings-as-primary-keys-in-sql-database ) คำพูดเดียวจับตาฉัน: โปรดทราบว่ามักจะมีความแตกต่างระหว่าง CHAR และ VARCHAR บ่อยมากเมื่อทำการเปรียบเทียบดัชนี สิ่งนี้ใช้ได้ / ยังใช้กับ Postgres หรือไม่? ฉันพบหน้าเว็บใน Oracle ที่อ้างว่าCHARเป็นนามแฝงไม่มากก็น้อยVARCHARดังนั้นประสิทธิภาพของดัชนีก็เหมือนกัน แต่ฉันไม่พบอะไรที่ชัดเจนสำหรับ Postgres

1
คีย์หลักคอมโพสิตในฐานข้อมูล SQL Server แบบหลายผู้เช่า
ฉันกำลังสร้างแอพหลายผู้เช่า (ฐานข้อมูลเดียวสกีมาเดียว) โดยใช้ ASP Web API, Entity Framework และฐานข้อมูล SQL Server / Azure แอปนี้จะใช้งานโดยลูกค้า 1,000-5,000 คน ตารางทั้งหมดจะมีฟิลด์TenantId(Guid / UNIQUEIDENTIFIER) ตอนนี้ฉันใช้คีย์หลักของฟิลด์เดียวซึ่งเป็นรหัส (Guid) แต่ด้วยการใช้เพียงแค่รหัสเขตข้อมูลฉันต้องตรวจสอบว่าข้อมูลที่ให้โดยผู้ใช้นั้นมาจาก / สำหรับผู้เช่าที่เหมาะสมหรือไม่ ตัวอย่างเช่นฉันมีSalesOrderตารางที่มีCustomerIdเขตข้อมูล ทุกครั้งที่ผู้ใช้โพสต์ / อัปเดตคำสั่งขายฉันต้องตรวจสอบว่าCustomerIdมาจากผู้เช่ารายเดียวกันหรือไม่ แย่ลงเพราะผู้เช่าแต่ละรายอาจมีหลายสาขา แล้วฉันจะมีการตรวจสอบและTenantId OutletIdมันเป็นฝันร้ายของการบำรุงรักษาและไม่ดีต่อประสิทธิภาพ ฉันคิดว่าจะเพิ่มไปยังคีย์หลักพร้อมกับTenantId Idและอาจเพิ่มOutletIdด้วย ดังนั้นหลักสำคัญในSalesOrderตารางจะเป็น: Id, และTenantId OutletIdข้อเสียของวิธีการนี้คืออะไร? ประสิทธิภาพจะเจ็บอย่างรุนแรงโดยใช้คีย์ผสมหรือไม่ คีย์ใบสั่งผสมมีความสำคัญหรือไม่ มีวิธีแก้ปัญหาที่ดีกว่าสำหรับฉันหรือไม่?

3
ใช้ PostgreSQL 8.4 จะแปลง bytea เป็นค่าข้อความใน postgres ได้อย่างไร?
ในแอปพลิเคชันของฉันฉันใส่ข้อมูลในฐานข้อมูลโดยใช้รหัส C เนื่องจากสตริงที่ฉันได้รับจากแหล่งที่ไม่น่าเชื่อถือฉันได้หนีพวกเขาโดยใช้PQescapeByteaConnไลบรารี libpq ซึ่งทำงานได้ดีอย่างสมบูรณ์เช่นผลลัพธ์ในรูปแบบ Octet String ดูตัวอย่างด้านล่าง สตริงอินพุต: \n\t\f\b\p\k\j\l\mestPrepared สตริงเอาท์พุท: \\012\\011\\014\\010pkjlmestPrepared เอาต์พุตสตริงถูกแทรกในฐานข้อมูล ตอนนี้ฉันดึงข้อมูลจากฐานข้อมูลในรหัส java โดยใช้ JDBC ฉันจะ unescape สตริงกลับไปเป็นค่าเดิมได้อย่างไร ฉันคิดถึงวิธีที่เป็นไปได้สองวิธี เปลี่ยนเคียวรีการดึงฐานข้อมูลและส่งฟิลด์นี้ไปยังฟังก์ชันการจัดการสตริงของ postgres เช่นซึ่งสามารถแปลงไบต์เป็นข้อความ ทำการถอดรหัสในโค้ด Java ฉันเข้าใจว่าวิธีที่ 1 จะมีประสิทธิภาพมากขึ้น ฉันได้ลองฟังก์ชั่นเกือบทั้งหมดที่ระบุไว้ที่นี่แต่ไม่มีอะไรทำงาน กรุณาช่วย!! ฉันใช้ postgres รุ่น 8.4 บนเครื่อง linux

1
ปิดใช้งานข้อ จำกัด ก่อนใช้ pg_restore.exe
เมื่อฉันพยายามเรียกใช้pg_restore.exeงานไฟล์ดัมพ์จากฐานข้อมูลมันก็จะพ่นข้อผิดพลาดออกมาหลายสิบข้อทั้งหมดเหมือนกัน: ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName" เห็นได้ชัดว่าเป็นเพราะความจริงที่ว่าฉันได้ลบฐานข้อมูลก่อนที่จะกู้คืนจากไฟล์การถ่ายโอนข้อมูล (ไฟล์นี้มาจากฐานข้อมูลการผลิต) ... แล้วแน่นอนไม่มีข้อ จำกัด กุญแจต่างประเทศสามารถตกลงถ้าตารางอ้างอิงหนึ่งที่ว่างเปล่า ... มีวิธีปิดใช้งานข้อ จำกัด และคีย์ต่างประเทศทั้งหมดสำหรับตารางทั้งหมดก่อนที่ฉันจะโทรpg_restore.exeและหลังจากนั้นเปิดใช้งานข้อ จำกัด และคีย์ต่างประเทศอีกครั้ง ดังนั้นในการที่ฉันได้พบสิ่งที่น่าสนใจ: ชะลอการ จำกัด การตรวจสอบเพื่อกระทำเวลา แต่ฉันไม่คิดว่าฉันสามารถโทรpg_restore.exeจากภายในได้psql.exeหลังจากชะลอข้อ จำกัด นอกจากนี้ยังมีโพสต์นี้ย้อนหลังไปเมื่อ 10 ปีก่อนแนะนำให้วางแล้วเพิ่มข้อ จำกัด อีกครั้ง หรือเปลี่ยนค่าของ pg_class reltriggers เป็น 0 และนั่นอาจเป็นไปได้สำหรับข้อ จำกัด ... แต่ฉันเกรงว่ามันแฮ็คมากกว่าการฝึกฝนที่ดี ... คุณแนะนำอะไรแนวทางปฏิบัติที่ดีที่สุดในกรณีนี้คืออะไร การใช้pg_dump.exe กับ-cleanแฟล็กจะสร้างดัมพ์ที่ข้ามข้อ จำกัด …


1
psql 9.5: gen_random_uuid () ไม่ทำงาน
SELECT gen_random_uuid() ผลิตผล ERROR: function gen_random_uuid() does not exist SQL state: 42883 Hint: No function matches the given name and argument types. You might need to add explicit type casts. ฉันรันCREATE EXTENSION pgcrypto;บนฐานข้อมูลที่เลือกและSELECT gen_random_bytes(1)ทำงานได้อย่างสมบูรณ์ ( gen_random_bytesไม่ทำงานบนฐานข้อมูลอื่นที่pgcryptoไม่ได้สร้างส่วนขยายด้วยตนเอง) % psql --version psql (PostgreSQL) 9.5.3 รุ่นของ Ubuntu คือ 16.04

3
กำจัดตัวดำเนินการค้นหาคีย์ (เป็นกลุ่ม) ที่ทำให้ประสิทธิภาพการทำงานช้าลง
ฉันจะกำจัดตัวดำเนินการค้นหาคีย์ (เป็นกลุ่ม) ในแผนปฏิบัติการได้อย่างไร ตารางtblQuotesมีดัชนีแบบคลัสเตอร์ (เปิดQuoteID) และดัชนีที่ไม่ได้คลัสเตอร์27 รายการดังนั้นฉันจึงพยายามไม่สร้างอีกต่อไป ฉันวางคอลัมน์ดัชนีแบบคลัสเตอร์QuoteIDในแบบสอบถามของฉันโดยหวังว่าจะช่วยได้ แต่ก็ยังเหมือนเดิม แผนการดำเนินการที่นี่ หรือดูมัน: นี่คือสิ่งที่ผู้ดำเนินการค้นหาคีย์พูดว่า: ค้นหา: declare @EffDateFrom datetime ='2017-02-01', @EffDateTo datetime ='2017-08-28' SET NOCOUNT ON SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED IF OBJECT_ID('tempdb..#Data') IS NOT NULL DROP TABLE #Data CREATE TABLE #Data ( QuoteID int NOT NULL, --clustered index [EffectiveDate] [datetime] NULL, …

1
'การอ้างอิงคอลัมน์ไม่ชัดเจน' เมื่อเพิ่มองค์ประกอบลงในตาราง
ฉันใช้ PostgreSQL เป็นฐานข้อมูลของฉัน และฉันจำเป็นต้องสร้างรายการในฐานข้อมูลและหากมีอยู่แล้วเพียงแค่อัปเดตฟิลด์ แต่ควรอัปเดตหนึ่งในฟิลด์ต่อไปหากยังไม่ได้ตั้งค่า ฉันใช้ข้อมูลจากคำถามนี้: /programming/13305878/dont-update-column-if-update-value-is-nullมันค่อนข้างเกี่ยวข้องกับสิ่งที่ฉันมี ฉันพยายามที่จะใช้แบบสอบถามนี้ แต่เมื่อฉันเรียกใช้มันข้อผิดพลาดกับColumn reference 'affiliate_code' is ambiguous: INSERT INTO accounts (id, token, affiliate_code) VALUES (value1, value2, value3) ON CONFLICT (id) DO UPDATE SET token = value2, affiliate_code = COALESCE(affiliate_code, value3); (ค่าจริงถูกแทนที่แน่นอน) หากฉันแทนที่affiliate_code = COALESCE(affiliate_code, value3)ด้วยaffiliate_code = value3ทุกอย่างทำงานได้ แต่ไม่ใช่ในแบบที่ฉันต้องการให้ทำงาน ฉันจะทำงานนี้ได้อย่างไร นี่คือวิธีการกำหนดตารางของฉัน: CREATE TABLE accounts ( …

2
การใช้คอลัมน์แหล่งที่มาในส่วนคำสั่ง OUTPUT INTO ของคำสั่ง INSERT (SQL Server)
ฉันกำลังเขียนคำสั่งแทรกการประมวลผลแบบแบทช์และต้องการใช้ตาราง temp เพื่อติดตาม ID ที่ถูกแทรกแทนการวนลูปผ่านไอเท็มด้วยตัวเองและเรียก SCOPE_IDENTITY () สำหรับแต่ละแถวที่แทรก ข้อมูลที่ต้องถูกแทรกมี (ชั่วคราว) ของ ID ที่เชื่อมโยงไปยังข้อมูลอื่นที่ควรถูกแทรกลงในตารางอื่นดังนั้นฉันต้องการอ้างอิงไขว้ของรหัสจริงและรหัสชั่วคราว นี่คือตัวอย่างของสิ่งที่ฉันมี: -- The existing table DECLARE @MyTable TABLE (ID INT IDENTITY(1,1), [Name] NVARCHAR(MAX)); -- My data I want to insert DECLARE @MyInsertData TABLE (ID INT, [Name] NVARCHAR(MAX)); INSERT INTO @MyInsertData ( ID,Name) VALUES ( -1 , 'bla'),(-2,'test'),(-3,'last'); …

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