การติดตามการเปลี่ยนแปลงเปลี่ยนจาก SQL Server 2008 เป็น 2012 หรือไม่


9

ในปัญหาในการถ่ายภาพปัญหากับการซิงโครไนซ์อุปกรณ์ที่ไม่เชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลกลางเรากำลังประสบปัญหาหลังจากอัปเกรดเป็น SQL Server 2012 บนเซิร์ฟเวอร์ ดูเหมือนว่า CHANGE_TRACKING_MIN_VALID_VERSION จะส่งคืนค่าที่สูงกว่าที่ควร 1 (หรืออย่างน้อยก็กว่าที่เคยเป็นมาก่อนการอัพเกรด)

ฉันทำงานผ่านตัวอย่างที่ยอดเยี่ยมของ Arshad Ali ถึงวิธีการตั้งค่าตัวอย่างง่ายๆ

ฉันเรียกใช้สคริปต์จาก # 1 ถึง # 5 เพื่อแทรกลบและอัปเดตแถวในตารางพนักงานในทั้งสภาพแวดล้อมของ SQL Server 2008 และ 2012

ในปี 2008 คำสั่งต่อไปนี้จะคืนค่า 0:

SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))

ในปี 2012 จะส่งคืน 1

ในการทำงานกับสคริปต์อีกสองสาม (6-8) ในการทดสอบฉันตั้งระยะเวลาการเก็บข้อมูลเป็น 1 นาทีเพื่อหวังว่าจะบังคับให้มีการดำเนินการล้างข้อมูล ฉันออกไปทั้งวันและเห็นได้ชัดว่ามันวิ่งข้ามคืน

ในอินสแตนซ์ปี 2008 CHANGE_TRACKING_CURRENT_VERSION และ CHANGE_TRACKING_MIN_VALID_VERSION มีค่าเท่ากับ (11) ในอินสแตนซ์ 2012 นั้น CHANGE_TRACKING_MIN_VALID_VERSION สูงกว่าหนึ่ง (12) มากกว่า CHANGE_TRACKING_CURRENT_VERSION (11) สิ่งนี้อาจส่งผลกระทบต่อกระบวนการซิงโครไนซ์เมื่อฐานข้อมูลไม่ได้ใช้งานเป็นระยะเวลานาน และเราพบว่ากระบวนการนั้นอาจติดอยู่ในลูปโดยเฉพาะอย่างยิ่งเมื่อทำการทดสอบต่อไปนี้เพื่อพิจารณาว่าจำเป็นต้องมีการเริ่มต้นใหม่เมื่อเทียบกับการซิงโครไนซ์หรือไม่:

IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'dbo.Employee')) > @sync_last_received_anchor 
       RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''...

มีใครเคยประสบกับการเปลี่ยนแปลงพฤติกรรมนี้บ้างไหม? ใครบ้างมีคำอธิบาย?


2
มีรายการ Microsoft Connect สำหรับปัญหานี้คือconnect.microsoft.com/SQLServer/feedback/details/770014/…โดยทั่วไป Microsoft คิดว่าปัญหาอาจเกี่ยวข้องกับความเสียหายในฐานข้อมูลที่เป็นปัญหา คุณสามารถจำลองสถานการณ์นี้ในฐานข้อมูลที่สร้างขึ้นใหม่ได้หรือไม่?
Max Vernon

1
สูงสุดฉันตรวจสอบบทความการเชื่อมต่อแล้ว น่าเสียดายที่โปสเตอร์ต้นฉบับดูเหมือนจะละทิ้งการอภิปรายและ MS ปิดปัญหา เมื่อตั้งค่าการทำซ้ำของปัญหาฉันเริ่มต้นการทดสอบกับฐานข้อมูลที่สร้างขึ้นใหม่ทั้งในอินสแตนซ์ 2008R2 และ 2012 ดูเหมือนว่าฐานข้อมูลทั้งสองจะทำงานได้ตามปกติในด้านอื่น ๆ ทั้งหมด
Glenn Estrada

3
ด้วยขั้นตอนการทำซ้ำสำหรับปัญหานี้โปรดรายงานในการเชื่อมต่อเพื่อให้พวกเขาสามารถแก้ไขได้!
Jon Seigel

คุณเปลี่ยนระดับความเข้ากันได้ของฐานข้อมูลหลังจากการอัพเกรดหรือไม่ ฉันไม่ได้ใช้การติดตามการเปลี่ยนแปลง แต่ลองคิดถึงรุ่นที่ไม่ตรงกันหลังจากอัปเกรด
Guillaume R.

คำตอบ:


3

ไม่มีใครใช้ min_valid_version เพื่อติดตามการเปลี่ยนแปลง สิ่งนี้ใช้เพื่อตรวจสอบความถูกต้องหากลูกค้าของคุณจำเป็นต้องเริ่มต้นใหม่หากข้อมูลเมตาได้รับการทำความสะอาดก่อนที่ลูกค้าจะสามารถใช้การเปลี่ยนแปลงได้

CHANGE_TRACKING_MIN_VALID_VERSION (Transact-SQL)

รับเวอร์ชันขั้นต่ำที่ถูกต้องสำหรับใช้ในการรับข้อมูลการติดตามการเปลี่ยนแปลงจากตารางที่ระบุเมื่อคุณใช้CHANGETABLEฟังก์ชัน

Min_valid_version เปลี่ยนแปลงด้วยเวอร์ชันการล้างข้อมูลและไม่ขึ้นอยู่กับการเปลี่ยนแปลงในตารางผู้ใช้ ทุกครั้งที่มีการล้างข้อมูลเธรดอาจมีการอัปเดตเป็น min_valid_version โดยไม่คำนึงถึงการเปลี่ยนแปลงข้อมูล

ก่อนหน้าปี 2012 min_valid_version ถูกทำเครื่องหมายเหมือนกับเวอร์ชันการล้างข้อมูลเมื่อจริงแล้วควรเป็นมากกว่าหนึ่งเวอร์ชันล้างข้อมูลเนื่องจากข้อมูลเมตาสำหรับรุ่นนั้นได้ถูกล้างข้อมูลแล้ว ในปี 2012 นั่นคือสิ่งที่พวกเขาเปลี่ยนแปลงเพื่อให้แน่ใจว่าพวกเขาอัปเดต min_valid_version ที่ถูกต้อง

สิ่งหนึ่งไม่ควรติดตามการเปลี่ยนแปลงโดยใช้ min_valid_version แต่ควรบันทึก last_sync_version หลังจากการซิงค์ทุกครั้งและโทรCHANGETABLEไปยังเพื่อระบุการเปลี่ยนแปลงหลังจากการซิงค์ครั้งล่าสุด

ตามการออกแบบ - การเปลี่ยนแปลงเวอร์ชันที่ถูกต้องขั้นต่ำด้วยเวอร์ชันการล้างข้อมูลและไม่ขึ้นอยู่กับการเปลี่ยนแปลงในตารางผู้ใช้ ทุกครั้งที่มีการล้างข้อมูลเธรดอาจมีการอัปเดตเป็นรุ่นที่ถูกต้องโดยไม่คำนึงถึงการเปลี่ยนแปลงข้อมูล

แก้ไข - เปลี่ยนโพรซีเดอร์เพื่อใช้ 'current_version' แทน 'min_valid_version'

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