Tôi đã nhận thấy rằng khi bạn thiết lập sao chép giao dịch, SQL Server sẽ đặt quản lý phạm vi nhận dạng thành thủ công. Điều này có nghĩa là trong cơ sở dữ liệu đăng ký của tôi, khi tôi cố gắng chèn một bản ghi mới vào một bảng có PK là một cột định danh, nó sẽ báo lỗi và nói rằng nó đã cố gắng chèn PK là "1", "2 "," 3 ", v.v ... Điều này là do giá trị nhận dạng hiện tại cho tất cả các cột nhận dạng trên thuê bao được đặt lại về giá trị hạt giống (thường là 1) thay vì giữ nguyên giá trị của nhà xuất bản.
Tôi hiểu lý do tại sao SQL Server thực hiện việc này - bạn phải rời khỏi bảng thuê bao dưới dạng chỉ đọc. Tuy nhiên, kịch bản của tôi hơi không chính thống - thỉnh thoảng tôi cập nhật thuê bao của mình thông qua sao chép, tạo bản sao lưu ngay lập tức của DB đó, sau đó tôi muốn thực hiện một số cập nhật cho thuê bao mà KHÔNG bị đẩy trở lại nhà xuất bản, sau đó Khi tôi cập nhật lại thuê bao, tôi khôi phục cơ sở dữ liệu từ bản sao lưu trước đó và lấy các bản cập nhật mới nhất. Vì tôi muốn thực hiện cập nhật cho người đăng ký ở giữa những cập nhật này ('tạm thời' nếu bạn muốn), tôi cần cột nhận dạng để hoạt động và không đặt lại thành 1 khi được sao chép.
Tôi đã thử bật quản lý phạm vi nhận dạng tự động khi thiết lập ấn phẩm của mình, nhưng điều đó chỉ gây ra lỗi sau khi tôi cố thêm bảng vào ấn phẩm:
Msg 21231, Cấp 16, Trạng thái 1, Quy trình sp_MSrepl_addarticle, Dòng 2243
Hỗ trợ phạm vi nhận dạng tự động chỉ hữu ích cho các ấn phẩm cho phép cập nhật người đăng ký.
Có cách nào tôi có thể giải quyết vấn đề này không? Tôi muốn trình bày bản sao này cho SQL Server như thể nó chỉ đọc ở cuối thuê bao vì tôi không có kế hoạch thực hiện các bản cập nhật sẽ được gửi lại cho nhà xuất bản , nhưng tôi muốn thực hiện các cập nhật tạm thời sẽ bị xóa trước khi nhân rộng tiếp theo.
Tôi cũng đã xem xét rằng sao chép ảnh chụp nhanh có thể là một phương pháp phù hợp hơn so với sao chép giao dịch cho mẫu sử dụng của tôi, nhưng rắc rối là sao chép ảnh chụp nhanh yêu cầu gửi toàn bộ DB mỗi lần cập nhật; bởi vì tôi đang lên kế hoạch sao lưu DB ngay lập tức sau lần sao chép mới nhất, tôi không cần phải thực hiện toàn bộ chuyển khoản đó mỗi lần; chỉ là những thay đổi kể từ lần trước.
Is there any way I can get round this problem?
Bạn phải đặt cột định danh là KHÔNG ĐƯỢC THAY ĐỔI bằng cách sử dụng sys.sp_identitycolumnforreplication cho máy chủ sql 2005 trở lên. Bạn thậm chí không phải đánh giá lại các bài viết của mình khi bạn thay đổi cột nhận dạng là không sao chép. Chỉ không làm điều đó bằng GUI.