KB2733630 - Tác nhân phối có thể bị lỗi trong quá trình đồng bộ hóa nhân bản phối ở SQL Server

Áp dụng cho
SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Express SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Parallel Data Warehouse SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2008 Standard SQL Server 2008 Web SQL Server 2008 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use)

Triệu chứng

Trong quá trình đồng bộ hóa sao chép phối trong Microsoft SQL Server 2008 và các phiên bản mới hơn của SQL Server, tác nhân phối có thể không thành công. Ngoài ra, bạn sẽ nhận được thông báo lỗi sau:

Lưu ý

Tác tử Hợp nhất không thành công sau khi phát hiện việc dọn dẹp siêu dữ liệu dựa trên việc lưu giữ đã xóa siêu dữ liệu tại Người đăng ký cho các thay đổi chưa được gửi đến Nhà phát hành. Bạn phải khởi tạo lại đăng ký (mà không cần tải lên). (Nguồn: MSSQL_REPL, Số lỗi: MSSQL_REPL-2147199401)

Nhận trợ giúp: http://help/MSSQL_REPL-2147199401

Sự cố này có thể xảy ra vì nhiều nguyên nhân. Những lý do này bao gồm nhiều lý do được mong đợi trong một số trường hợp nhất định. Để xác định xem bạn có gặp phải lỗi này ngoài dự kiến hay không, hãy kiểm tra các chi tiết siêu dữ liệu được mô tả trong phần "Nguyên nhân".

Nguyên nhân

Có thể tìm thấy nguyên nhân gây ra sự cố này trong các bảng hệ thống sau đây trên người đăng ký:

  • dbo.sysMergeSubscriptions
  • dbo. MsMerge_Genhistory

Hãy đảm bảo rằng tác nhân phối không còn đồng bộ hóa. Sau đó, chạy truy vấn sau đây và kiểm tra kết quả:

select sentgen from SubscriberDB.dbo.sysMergeSubscriptions where pubid = subid and sentgen is not null

Kết quả truy vấn

Cột sentgen đánh dấu nhóm thay đổi cũ nhất mà người đăng ký đã gửi cho nhà phát hành. Nếu nhiều giá trị được trả về, hãy kiểm tra các cột khác trong bảng dbo.sysMergeSubscriptions để đảm bảo rằng bạn đang xem siêu dữ liệu của ấn phẩm đúng. Tiếp theo, dùng giá trị mà truy vấn này trả về trong truy vấn sau:

Chọn 20 vị trí trên cùng * từ SubscriberDB.dbo.MSmerge_genhistory trong đó thế hệ = >sentgen_value thứ tự theo thế hệĐầu ra của truy vấn sẽ giống như sau:

Kết quả truy vấn theo thế hệ

Bạn có thể gặp phải lỗi bất ngờ khi tất cả các điều kiện sau đều đúng:

  • Giá trị trong cột tạo ở hàng đầu tiên hơi lớn hơn giá trị sentgen trong truy vấn trước đó.
  • Giá trị trong cột genstatus là 4.
  • Giá trị trong cột changecount là 0.

Lưu ý: Thông thường, giá trị của cột nguội ở hàng đầu tiên cũng cũ hơn nhiều so với giá trị của cột đó trong các hàng khác.

Giải pháp

Để khắc phục sự cố này, hãy khởi tạo lại người đăng ký đã tạo ra lỗi.

Trong một số kịch bản, bạn có thể giải quyết sự cố này mà không cần khởi tạo lại hoàn toàn. Hãy liên hệ với Dịch vụ Hỗ trợ Khách hàng của Microsoft để biết thông tin về giải pháp thay thế khả thi.

Để ngăn sự cố này xảy ra trong tương lai, hãy áp dụng một trong các bản sửa lỗi sau, tùy thuộc vào phiên bản SQL Server của bạn.

Thông tin cập nhật tích lũy

SQL Server 2008

Không có bản sửa lỗi nào cho sự cố này trong SQL Server 2008.

SQL Server 2008 R2 Gói Dịch vụ 2

Bản sửa lỗi cho sự cố này được phát hành lần đầu trong Cập nhật Tích lũy 3. Để biết thêm thông tin về cách lấy gói cập nhật tích lũy này cho SQL Server 2008 R2 Gói Dịch vụ 2, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:

2754552 Gói cập nhật tích lũy 3 cho SQL Server 2008 R2 Gói Dịch vụ 2
 Lưu ý Vì các bản dựng được tích lũy, mỗi bản phát hành bản sửa lỗi mới đều chứa tất cả các bản sửa lỗi nóng và tất cả bản sửa lỗi bảo mật được tích hợp với bản phát hành bản sửa lỗi SQL Server 2008 R2 Gói Dịch vụ 2 trước đó. Chúng tôi khuyên bạn nên cân nhắc áp dụng bản phát hành bản sửa lỗi gần đây nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:

2730301 Các bản dựng SQL Server 2008 R2 được phát hành sau khi SQL Server 2008 R2 Gói Dịch vụ 2 được phát hành

SQL Server 2012

Bản sửa lỗi cho sự cố này được phát hành lần đầu trong Cập nhật Tích lũy 4. Để biết thêm thông tin về cách lấy gói cập nhật tích lũy này cho SQL Server 2012, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:

2758687 Gói cập nhật tích lũy 4 cho SQL Server 2012
 Lưu ý Vì các bản dựng được tích lũy, mỗi bản phát hành bản sửa lỗi mới đều chứa tất cả các bản sửa lỗi nóng và tất cả bản sửa lỗi bảo mật có trong bản phát hành sửa lỗi SQL Server 2012 trước đó. Chúng tôi khuyên bạn nên cân nhắc áp dụng bản phát hành bản sửa lỗi gần đây nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:

2692828 Các bản dựng SQL Server 2012 được phát hành sau SQL Server 2012 được phát hành

SQL Server 2008 R2 Gói Dịch vụ 1

Bản sửa lỗi cho sự cố này được phát hành lần đầu trong Cập nhật Tích lũy 8. Để biết thêm thông tin về cách lấy gói cập nhật tích lũy này cho SQL Server 2008 R2 Gói Dịch vụ 1, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:

2723743 Gói cập nhật tích lũy 8 cho SQL Server 2008 R2 SP1Lưu ý Vì các bản dựng được tích lũy, mỗi bản phát hành bản sửa lỗi mới đều chứa tất cả các bản hotfix và tất cả bản sửa lỗi bảo mật có trong bản phát hành bản sửa lỗi SQL Server 2008 R2 Gói dịch vụ 1 trước đó. Chúng tôi khuyên bạn nên cân nhắc áp dụng bản phát hành bản sửa lỗi gần đây nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:

2567616 Các bản dựng SQL Server 2008 R2 được phát hành sau khi SQL Server 2008 R2 SP1 được phát hành