Dalam masalah memotret masalah dengan menyinkronkan perangkat yang terputus dengan server database pusat, kami mengalami masalah setelah memutakhirkan ke SQL Server 2012 di server. Tampaknya CHANGE_TRACKING_MIN_VALID_VERSION mengembalikan nilai 1 lebih tinggi dari yang seharusnya (atau setidaknya daripada sebelum melakukan peningkatan.)
Saya telah bekerja melalui jalan besar Arshad Ali melalui contoh cara membuat contoh sederhana.
Saya telah menjalankan skrip dari # 1 hingga # 5 untuk menyisipkan, menghapus, dan memperbarui baris dalam tabel Karyawan di lingkungan SQL Server 2008 dan 2012.
Pada 2008, pernyataan berikut mengembalikan 0:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
Pada 2012, ia mengembalikan 1.
Dalam mengerjakan melalui beberapa skrip lagi (6-8) dalam pengujian, saya mengatur periode retensi menjadi 1 menit untuk semoga memaksa tindakan pembersihan. Saya pergi untuk hari itu dan ternyata berlari semalam.
Dalam contoh 2008, CHANGE_TRACKING_CURRENT_VERSION dan CHANGE_TRACKING_MIN_VALID_VERSION sama (11). Dalam contoh 2012, CHANGE_TRACKING_MIN_VALID_VERSION adalah satu lebih tinggi (12) dari CHANGE_TRACKING_CURRENT_VERSION (11). Ini bisa berdampak pada proses sinkronisasi ketika database tidak digunakan untuk waktu yang lama. Dan kami telah menemukan bahwa proses dapat terjebak dalam satu lingkaran, terutama ketika tes berikut dilakukan untuk menentukan apakah diperlukan inisialisasi ulang, yang bertentangan dengan sinkronisasi, diperlukan:
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''...
Adakah orang lain yang mengalami perubahan perilaku ini? Adakah yang punya penjelasan?