我們最近從SQL Server 2005升級到SQL Server 2008(R2,SP1)。此升級包括一些出版物,其中所有表格均基於「稍後獲勝」原則與默認衝突解決程序一起發佈。它的智能名稱是'Microsoft SQL Server DATETIME(稍後贏得)衝突解析程序',並且相應的dll文件是ssrmax.dll。衆所周知,一旦使用衝突解決程序發佈了一個表,則必須在使用此表的所有後續發佈中使用相同的衝突解決程序。很公平,但是,當加入先前公佈的表格,新的出版物,並指定同樣的衝突解決程序用於這個表,我們正在一條錯誤消息:如何在從SQL-Server 2005升級到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
這是我們得到的錯誤:
The article '...' already exists in another publication with a different article resolver.
,試圖瞭解同一衝突解決不是由機器「一樣衝突解決」認爲,我發現有兩個衝突解決程序具有相同的名稱,不同的版本,在註冊表中:
th Ë2005版:
- 文件ssrmax.dll,
- 版本2005.90.4035.0,
- cls_id D604B4B5-686B-4304-9613-C4F82B527B10
2008版:
- 文件ssrmax.dll,
- 版本2009.100.2500.0,
- cls_id 77209412-47CF-49AF-A347-DCF7EE481277
我檢查了我們的2008年服務器正在考慮第二個爲「可用的自定義解析器」(我通過運行sp_enumcustomresolvers得到這個)。問題是兩個參考文獻都可以在註冊表中找到,所以我猜舊的出版物確實參考了2005年的版本,而新的出版物試圖參考2008年的版本,這與之前的版本確實不同。
所以問題是:我怎麼才能讓服務器只考慮這兩個版本中的一個,並且這(當然)不必刪除並重新創建現有的出版物(這會使我們的生活變爲地獄,周)。
完成,工作。 –