คำถามติดแท็ก change-data-capture

4
จะใช้ CDC เพื่อติดตามประวัติเมื่อใด
SQL Server Change Data Capture เป็นคุณสมบัติที่อ่านข้อมูลประวัติจากบันทึกธุรกรรม SQL Server และเก็บไว้ในตารางพิเศษ จากการใช้ฟังก์ชั่นค่าตารางพิเศษ (TVF) จะช่วยให้ผู้ใช้สามารถสืบค้นข้อมูลนี้ทำให้สามารถรับการเปลี่ยนแปลงทั้งหมดในตารางที่ระบุหรือเฉพาะการเปลี่ยนแปลงสุทธิที่เกิดจากการเปลี่ยนแปลงภายในเวลาที่กำหนด CDC มีข้อดีบางประการ มันสามารถกำหนดค่าให้ติดตามเฉพาะตารางหรือคอลัมน์บางอย่าง มันสามารถจัดการกับการเปลี่ยนแปลงของโมเดลในระดับหนึ่งได้ ไม่ส่งผลกระทบต่อประสิทธิภาพเท่า ๆ กับทริกเกอร์เนื่องจากทำงานกับบันทึกธุรกรรม มันเปิด / ปิดการใช้งานได้ง่ายและไม่จำเป็นต้องมีคอลัมน์เพิ่มเติมในตารางที่ควรติดตาม นอกจากนี้ยังมีข้อเสีย: จำนวนข้อมูลประวัติสามารถเป็นไปอย่างรวดเร็วมาก คุณไม่สามารถติดตามผู้ที่ทำการเปลี่ยนแปลงได้ (อย่างน้อยก็ไม่ใช่สำหรับการลบ) ข้อมูลประวัติใช้เวลาพอสมควรในการติดตามเนื่องจากเป็นไปตามบันทึกธุรกรรม ขึ้นอยู่กับ บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL หาก Agent ไม่ทำงานหรือล่มจะไม่มีการติดตามประวัติ ฉันได้อ่านเกี่ยวกับ CDC ค่อนข้างมากและในขณะที่ฉันรู้วิธีใช้งานฉันยังไม่แน่ใจว่ามันเป็นเครื่องมือที่เหมาะสมสำหรับฉันหรือไม่ CDC สำหรับภารกิจ / สถานการณ์ใดเป็นเครื่องมือที่เหมาะสม (เช่นอนุญาตให้ผู้ใช้กู้คืนวัตถุข้อมูลไปยังจุดที่กำหนดเวลาหรือไม่การตรวจสอบ? แสดงประวัติของข้อมูลทั้งหมด?) เมื่อใดที่คุณไม่ควรใช้ CDC แต่หันไปใช้โซลูชันทริกเกอร์ที่กำหนดเอง การใช้ CDC ในฐานข้อมูลการดำเนินงานและใช้ประโยชน์จากข้อมูล CDC …

3
ค้นหาตัวตนของลูกค้าที่เริ่มสืบค้นใน SQL Server โดยไม่ใช้ทริกเกอร์หรือไม่
ขณะนี้ฉันใช้Change Data Capture (CDC)เพื่อติดตามการเปลี่ยนแปลงข้อมูลและฉันต้องการติดตามชื่อโฮสต์และที่อยู่ IP ของลูกค้าที่ส่งการสอบถามที่ทำการเปลี่ยนแปลง หากมีลูกค้าที่แตกต่างกัน 5 คนลงชื่อเข้าใช้ด้วยชื่อผู้ใช้เดียวกันคนหนึ่งเผชิญกับปัญหาในการติดตามซึ่งหนึ่งในห้านั้นทำการสืบค้น โซลูชันที่กว้างขวางอื่น ๆ ที่ฉันพบรวมถึงการแก้ไขตาราง CDC ด้วยคำสั่งต่อไปนี้: ALTER TABLE cdc.schema_table_CT ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME()) อย่างไรก็ตามสิ่งนี้จะส่งคืนชื่อโฮสต์ของเซิร์ฟเวอร์ที่เปิดใช้งานการสืบค้นไม่ใช่ชื่อโฮสต์ของไคลเอนต์ที่เปิดใช้งานการสอบถาม มีวิธีแก้ไขปัญหานี้หรือไม่? สิ่งที่จะช่วยในการบันทึกชื่อโฮสต์หรือที่อยู่ IP (หรือเอกลักษณ์เฉพาะอื่น ๆ ) ของลูกค้า ฉันไม่ต้องการใช้ทริกเกอร์เนื่องจากมันทำให้ระบบช้าลง CDC ก็สร้างตารางระบบดังนั้นจึงมีทริกเกอร์ที่ไม่สามารถทำได้

3
เปลี่ยนการจับข้อมูล - จะรู้ได้อย่างไรว่าใครเป็นผู้เปลี่ยนแปลง
การติดตามผู้ที่ทำการเปลี่ยนแปลงที่ระบุโดย CDC ตามแนวของการแฮ็ก datetime ของฉันฉันลองวิธีเดียวกันโดยเพิ่ม suser_sname เป็นฟิลด์ใหม่ที่มีค่าเริ่มต้นในตารางเปลี่ยนแทร็ก cdc แต่ดูเหมือนว่าจะส่งคืนเจ้าของกระบวนการ cdc ไม่ใช่ผู้ใช้ที่เริ่มต้นการเปลี่ยนแปลงบนตารางพื้นฐาน ฉันยังลอง original_login แต่นั่นกลับเข้าสู่บัญชีบริการ sql อีกครั้งน่าจะเกี่ยวข้องกับกระบวนการ cdc ไม่ใช่ผู้ใช้ที่เริ่มต้นการเปลี่ยนแปลง ฉันพบคำถามที่คล้ายกันใน stack-overflowแต่ไม่มีคำตอบอื่นนอกจากการติดตามการเปลี่ยนแปลงจากส่วนหน้าหรือผ่านทริกเกอร์ซึ่งดูเหมือนว่าจะเอาชนะวัตถุประสงค์ของการใช้ cdc ฉันจะไม่โพสต์ใหม่ แต่เนื่องจากต้นฉบับอยู่ใน stackoverflow ฉันคิดว่าฉันจะลองที่นี่โดยเฉพาะถ้า R2 หรือ 2012 ได้แนะนำวิธีที่ดีกว่า ในระยะสั้น: ฉันจะรู้ได้อย่างไรว่าใครเป็นผู้ทำการเปลี่ยนแปลงในการเก็บข้อมูลการเปลี่ยนแปลง?

1
จะทราบได้อย่างไรว่าไฟล์สำรองประกอบด้วย CDC หรือไม่
การใช้ SQL Server 2008 ถึงปี 2014 ฉันรู้วิธีสำรองและกู้คืนฐานข้อมูลด้วย Change Data Capture enabled (CDC) แต่สิ่งที่ฉันกำลังมองหาคือวิธีการสืบค้นไฟล์สำรองข้อมูลเต็มรูปแบบเพื่อตรวจสอบว่ามีข้อมูล CDC หรือไม่ สิ่งที่ดีมากจะเป็นเช่นRESTORE FILELISTONLYนั้นที่ได้รับรายชื่อไฟล์จากฐานข้อมูล แต่รับสถานะ CDC แทนเพื่อพิจารณาว่าการกู้คืนจะต้องใช้การตั้งค่าสถานะ KEEP_CDC หรือไม่ มีวิธีการตรวจสอบว่าการสำรองข้อมูลประกอบด้วยข้อมูล CDC หรือไม่ ขอบคุณ!

2
เปลี่ยนการดักจับข้อมูลและไบนารี __ $ update_mask
เรากำลังใช้ CDC เพื่อบันทึกการเปลี่ยนแปลงที่เกิดขึ้นกับตารางการผลิต แถวที่เปลี่ยนแปลงกำลังถูกส่งออกไปยังคลังข้อมูล (informatica) ฉันรู้ว่าคอลัมน์ __ $ update_mask เก็บคอลัมน์ใดที่ได้รับการปรับปรุงในรูปแบบ varbinary ฉันยังรู้ว่าฉันสามารถใช้ฟังก์ชั่น CDC ที่หลากหลายเพื่อค้นหาจากหน้ากากที่คอลัมน์เหล่านั้น คำถามของฉันคือสิ่งนี้ ใครสามารถนิยามตรรกะเบื้องหลังหน้ากากนั้นให้ฉันเพื่อให้เราสามารถระบุคอลัมน์ที่เปลี่ยนแปลงไปในคลังสินค้าได้หรือไม่? เนื่องจากเรากำลังประมวลผลนอกเซิร์ฟเวอร์เราจึงไม่สามารถเข้าถึงฟังก์ชั่น MSSQL CDC เหล่านั้นได้อย่างง่ายดาย ฉันค่อนข้างจะพังหน้ากากตัวเองในรหัส ประสิทธิภาพของฟังก์ชั่น cdc ใน SQL end นั้นเป็นปัญหาสำหรับวิธีนี้ กล่าวโดยย่อฉันต้องการระบุคอลัมน์ที่มีการเปลี่ยนแปลงด้วยมือจากฟิลด์ __ $ update_mask ปรับปรุง: ในฐานะที่เป็นทางเลือกที่ส่งรายชื่อคอลัมน์ที่เปลี่ยนแปลงไปยังคลังสินค้าที่มนุษย์สามารถอ่านได้ เราพบว่าสิ่งนี้สามารถทำได้ด้วยประสิทธิภาพที่สูงกว่าวิธีดั้งเดิมของเรา คำตอบ CLR สำหรับคำถามนี้ตรงกับทางเลือกนี้และรวมถึงรายละเอียดของการตีความหน้ากากสำหรับผู้เข้าชมในอนาคต อย่างไรก็ตามคำตอบที่ยอมรับได้โดยใช้ XML PATH นั้นเร็วที่สุดสำหรับผลลัพธ์สุดท้ายเดียวกัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.