Khi gặp sự cố khi đồng bộ hóa các thiết bị bị ngắt kết nối với máy chủ cơ sở dữ liệu trung tâm, chúng tôi đang gặp sự cố sau khi nâng cấp lên SQL Server 2012 trên máy chủ. Dường như CHANGE_TRACKING_MIN_VALID_VERSION đang trả về giá trị 1 cao hơn mức cần thiết (hoặc ít nhất là so với trước khi nâng cấp.)
Tôi đã làm việc qua ví dụ đi bộ tuyệt vời của Arshad Ali về cách thiết lập một ví dụ đơn giản.
Tôi đã chạy các tập lệnh từ # 1 đến # 5 để chèn, xóa và cập nhật một hàng trong bảng Nhân viên trong cả môi trường SQL Server 2008 và 2012.
Trong năm 2008, câu lệnh sau trả về 0:
SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
Trong năm 2012, nó trả về 1.
Khi thực hiện thêm một vài tập lệnh (6-8) trong các bài kiểm tra, tôi đặt thời gian lưu thành 1 phút để hy vọng buộc hành động dọn dẹp. Tôi rời đi trong ngày và dường như nó chạy qua đêm.
Trong phiên bản 2008, CHANGE_TRACKING_CURRENT_VERSION và CHANGE_TRACKING_MIN_VALID_VERSION bằng nhau (11). Trong ví dụ 2012, CHANGE_TRACKING_MIN_VALID_VERSION cao hơn một (12) so với CHANGE_TRACKING_CURRENT_VERSION (11). Điều này có thể có tác động đến quá trình đồng bộ hóa khi cơ sở dữ liệu không hoạt động trong thời gian dài. Và chúng tôi đã thấy rằng quá trình có thể bị vướng vào một vòng lặp, đặc biệt là khi thử nghiệm sau được thực hiện để xác định xem có phải khởi tạo lại, trái với đồng bộ hóa hay không:
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''...
Có ai khác trải qua sự thay đổi trong hành vi này? Có ai có một lời giải thích?