6

Gần đây chúng tôi đã nâng cấp từ SQL Server 2005 lên SQL Server 2008 (R2, SP1). Bản nâng cấp này bao gồm một số ấn phẩm, nơi tất cả các bảng được xuất bản với trình phân giải xung đột mặc định dựa trên nguyên tắc "thắng sau". Tên thông minh của nó là 'Microsoft SQL Server DATETIME (Sau này Thắng) Xung đột Giải quyết', và tệp dll tương ứng là ssrmax.dll. Như bạn đã biết, khi bảng được xuất bản với trình phân giải xung đột, cùng một trình giải quyết xung đột phải được sử dụng trong tất cả các ấn phẩm sau này bằng cách sử dụng bảng này. Hội chợ đủ, nhưng, khi thêm bảng công bố trước đó cho các ấn phẩm mới, và xác định giải quyết mâu thuẫn rất giống nhau được sử dụng cho bảng này, chúng tôi đang nhận được một thông báo lỗi:Cách cập nhật trình phân giải xung đột khi nâng cấp từ SQL Server 2005 lên SQL-Server 2008

use [myDb] 
exec sp_addmergearticle 
    @publication = N'myDb_Pub', 
    @article = N'Tbl_blablabla', 
    @source_owner = N'dbo', 
    @source_object = N'Tbl_blablabla', 
    @type = N'table', 
    @description = N'', 
    @creation_script = N'', 
    @pre_creation_cmd = N'drop', 
    @schema_option = 0x000000000C034FD1, 
    @identityrangemanagementoption = N'none', 
    @destination_owner = N'dbo', 
    @force_reinit_subscription = 1, 
    @column_tracking = N'false', 
    @article_resolver = N'Microsoft SQL Server DATETIME (Later Wins) Conflict Resolver', 
    @subset_filterclause = N'', 
    @resolver_info = N'ddmaj', 
    @vertical_partition = N'false', 
    @verify_resolver_signature = 0, 
    @allow_interactive_resolver = N'false', 
    @fast_multicol_updateproc = N'true', 
    @check_permissions = 0, 
    @subscriber_upload_options = 0, 
    @delete_tracking = N'true', 
    @compensate_for_errors = N'false', 
    @stream_blob_columns = N'false', 
    @partition_options = 0 
GO 

Và đây là lỗi, chúng tôi nhận được:

The article '...' already exists in another publication with a different article resolver. 

bằng cách cố gắng để hiểu làm thế nào giải quyết cuộc xung đột tương tự không được xem là bằng máy như 'resolver xung đột cùng', tôi phát hiện ra rằng đã có hai phân giải mâu thuẫn với cùng tên, phiên bản khác nhau, trong registry:

th e 2005 phiên bản:

  • tập tin ssrmax.dll,
  • phiên bản 2005.90.4035.0,
  • cls_id D604B4B5-686B-4304-9613-C4F82B527B10

phiên bản 2008:

  • tệp ssrmax.dll,
  • phiên bản 2009.100.2500.0,
  • cls_id 77209412-47CF-49AF-A347-DCF7EE481277

Và tôi đã kiểm tra rằng server 2008 chúng tôi đang xem xét thứ hai là 'phân giải tùy chỉnh có sẵn' (Tôi có này bằng cách chạy sp_enumcustomresolvers). Vấn đề là cả hai tài liệu tham khảo đều có sẵn trong sổ đăng ký, vì vậy tôi đoán rằng các ấn phẩm cũ tham khảo phiên bản 2005, trong khi các ấn phẩm mới cố gắng đề cập đến phiên bản 2008, thực sự khác với phiên bản trước. Vì vậy, câu hỏi là: làm thế nào tôi có thể có máy chủ chỉ xem xét một trong 2 phiên bản này, và điều này (tất nhiên) mà không cần phải thả và tạo lại các ấn phẩm hiện có (mà sẽ biến cuộc sống của chúng ta thành địa ngục cho 2 tiếp theo). tuần).

Trả lời

0

Vâng .. do đó, không ai có câu trả lời. Nhưng tôi nghĩ tôi (cuối cùng) đã hiểu. Đoán xem ... nó ở đâu đó trong metamodel (như thường lệ)!

  • Khi thêm mục vào đăng ký, tham chiếu giải quyết xung đột mới được sử dụng bởi quy trình được lưu trữ đến từ [phân phối].[MSmerge_articleresolver] Bảng
  • Nhưng, đối với thuê bao hiện có, giải quyết tài liệu tham khảo mâu thuẫn trước đó được lưu trữ trong các bảng hệ thống cơ sở dữ liệu xuất bản, tức là [sysmergearticles], [sysmergeextendedarticlesview] và [sysmergepartitioninfoview]

Vì vậy, chúng tôi có trên một mặt một mục khởi đầu được xuất bản với SQLSERVER 2005, trong đó xuất bản tham chiếu đến trình giải quyết xung đột năm 2005, theo cơ sở dữ liệu xuất bản metamodel. Ở phía bên kia, máy sẽ cố gắng thêm cùng một mục vào một ấn bản mới, lần này với tham chiếu mặc định cho trình giải quyết xung đột có sẵn trong cơ sở dữ liệu phân biệt, thực sự khác với cơ sở dữ liệu phân phối ....

Để minh họa điều này, bạn có thể kiểm tra như sau

USE distribution 
go 
SELECT article_resolver, resolver_clsid 
    FROM [MSmerge_articleresolver] WHERE article_resolver like '%Later Wins%' 
    GO 

sau đó,

USE myPublicationDatabase 
go 
SELECT article_resolver, resolver_clsid 
    FROM [sysmergearticles] WHERE article_resolver like '%Later Wins%' 
    GO 
SELECT article_resolver, resolver_clsid 
    FROM [sysmergeextendedarticlesview] WHERE article_resolver like '%Later Wins%' 
    GO 
SELECT article_resolver, resolver_clsid 
    FROM [sysmergepartitioninfoview] WHERE article_resolver like '%Later Wins%' 
    GO 

Vì vậy, có vẻ như rằng tôi nên cập nhật hoặc các tài liệu tham khảo trong cơ sở dữ liệu phân phối hoặc các tài liệu tham khảo trong cơ sở dữ liệu công bố. Thử một lần đi!

+0

làm, và làm việc. –

0

Cảm ơn, có một cái gì đó tương tự như trên tái xuất bản nơi bài viết thuê bao đã có một CLSID đó chẳng có nghĩa gì trên máy chủ (nhìn với Regedit) nhưng khi cố gắng thêm bài viết để một ấn phẩm sẽ tạo ra lỗi nói.

Cập nhật lĩnh vực resolver_clsid của bảng sysMergeArticles cho bài viết đăng ký với clisd nó đã cố gắng để có được

{ 

declare @resolver_clsid nvarchar(50) 

exec sys.sp_lookupcustomresolver N'Microsoft SQL Server DATETIME (Earlier Wins) Conflict Resolver', @resolver_clsid OUTPUT 


select @resolver_clsid 

} 

và sau đó có thể thêm bài viết

Các vấn đề liên quan