2012-06-20 139 views
2

我正在使用SQL Server 2012並嘗試實施事務複製。我使用系統存儲過程來創建發佈和訂閱。我成功地創建了這些東西,但是當我檢查複製監視器時,它顯示「未初始化的訂閱」。複製監視器中的「未初始化的訂閱」錯誤

當我檢查訂閱的同步狀態,我發現這個日誌

Date  6/20/2012 7:36:33 PM 
Log  Job History (HYDHTC0131320D-PublisherDB-PublicationOne-HYDHTC0131320D\MSS-ReplicationSubscri-7C1D7509-C8A6-4073-A901-0433A2B6D2D3) 

Step ID  1 
Server  HYDHTC0131320D\MSSQLSERVER2 
Job Name  HYDHTC0131320D-PublisherDB-PublicationOne-HYDHTC0131320D\MSS-ReplicationSubscri-7C1D7509-C8A6-4073-A901-0433A2B6D2D3 
Step Name  Run agent. 
Duration  00:07:41 
Sql Severity 0 
Sql Message ID 0 
Operator Emailed  
Operator Net sent 
Operator Paged 
Retries Attempted 0 

Message 
2012-06-20 14:14:13.986 Copyright (c) 2008 Microsoft Corporation 
2012-06-20 14:14:13.986 Microsoft SQL Server Replication Agent: distrib 
2012-06-20 14:14:13.986 
2012-06-20 14:14:13.986 The timestamps prepended to the output lines are expressed in terms of UTC time. 
2012-06-20 14:14:13.986 User-specified agent parameter values: 
      -Publisher HYDHTC0131320D 
      -PublisherDB PublisherDB 
      -Publication PublicationOne 
      -Distributor HYDHTC0131320D 
      -SubscriptionType 2 
      -Subscriber HYDHTC0131320D\MSSQLSERVER2 
      -SubscriberSecurityMode 1 
      -SubscriberDB ReplicationSubscriberDB 
      -Continuous 
      -XJOBID 0xDFE51AEC7F9E3F42A450CE8874B662CD 
      -XJOBNAME HYDHTC0131320D-PublisherDB-PublicationOne-HYDHTC0131320D\MSS-ReplicationSubscri-7C1D7509-C8A6-4073-A901-0433A2B6D2D3 
      -XSTEPID 1 
      -XSUBSYSTEM Distribution 
      -XSERVER HYDHTC0131320D\MSSQLSERVER2 
      -XCMDLINE 0 
      -XCancelEventHandle 000005F8 
      -XParentProcessHandle 00000560 
2012-06-20 14:14:13.986 Startup Delay: 619 (msecs) 
2012-06-20 14:14:14.606 Connecting to Subscriber 'HYDHTC0131320D\MSSQLSERVER2' 
2012-06-20 14:14:14.656 Connecting to Distributor 'HYDHTC0131320D' 
2012-06-20 14:14:14.671 Parameter values obtained from agent profile: 
      -bcpbatchsize 2147473647 
      -commitbatchsize 100 
      -commitbatchthreshold 1000 
      -historyverboselevel 1 
      -keepalivemessageinterval 300 
      -logintimeout 15 
      -maxbcpthreads 1 
      -maxdeliveredtransactions 0 
      -pollinginterval 5000 
      -querytimeout 1800 
      -skiperrors 
      -transactionsperhistory 100 
2012-06-20 14:14:14.683 Agent message code 21040. Publication '' does not exist. 

我怎麼解決這個問題呢?

回答

1

看起來您的複製設置腳本中存在錯誤。

我懷疑錯誤是在調用sp_addpushsubscription_agent(如果它是推送訂閱)或sp_addpullsubscription_agent(如果是拉訂閱)。具體的@publication參數是錯誤的,因爲分發代理指出指定出版「不存在

請檢查您的腳本,然後再試一次。

+0

雅您的儀式,我還是沒能解決問題,太感動了推動出版。謝謝你的回答 – Harsha

3

我收到了同樣的錯誤。我修復是明確地定義Job_login和job_password,我不得不爲空,開始與

EXEC sp_addpullsubscription_agent 
@publisher = @publisher, 
@publisher_db = @publicationDB, 
@publication = @publication, 
@distributor = @publisher, 
@job_login = $(Login), 
@job_password = $(Password); 
1

我面臨同樣的問題,通過執行以下修正:

  • -Subscriber作業所有者是一樣的出版物用戶

  • -Subscriber用戶已添加到用戶的用戶列表,並添加 到sysadmin服務器角色

0

短短几年筆記我設法通過備份初始化啓動並運行拉用戶:

  1. 確保您擁有publi的代理帳戶sher,分銷商和訂戶作爲系統管理員登錄所有實例,示例訂戶必須位於分銷商和發佈商。
  2. 爲每個實例上的所有組件創建鏈接服務器,例如訂閱服務器上的示例分發者和發佈者。
  3. 然後對源數據庫進行完整備份,並在訂閱實例上進行恢復而無需恢復。
  4. 在發佈者數據庫(sp_addsubscription)上創建發佈組件,並確保您擁有@sync_type = N'replication support only'
  5. 然後對源數據庫進行差異備份,並在訂閱實例上進行恢復和恢復。
  6. 然後在訂閱實例(sp_addpullsubscription)上創建請求訂閱,請注意,如果源是鏡像實例,請在此使用原始實例值(@publisher)。如果您是「鏡像」實例的主體,則元數據將被創建爲正確,並且分發者包含將日誌讀取器連接到任一鏡像實例的邏輯。
  7. 現在,您將遇到主鍵等問題,因爲分銷商在差異備份之前開始捕獲數據......沒問題。停止訂閱者作業,然後將新配置文件添加到分發代理,並將-SkipErrors參數設置爲「2601:2627」。這將跳過所有主鍵違例事務並繼續處理。記得選擇這個代理配置文件,然後點擊「確定」。
  8. 重新啓動訂閱作業並監視訂閱,因爲它開始趕上事務。
  9. 當您趕上時,停止作業,將代理配置文件更改回默認值並重新啓動作業。

希望這有助於任何人仍然在基於備份初始化的拉用戶掙扎...請注意,我沒有在複製配置中使用任何備份配置。還表示,拉訂閱不得初始化(@immediate_sync = 0)。

下面是腳本:

-----------------BEGIN: Script to be run at Publisher 'DB001\OLTP'----------------- 
use [DB1] 
go 
exec sp_addsubscription @publication = N'DB1', @subscriber = N'DB002\OLTP', @destination_db = N'DB1', @sync_type = N'replication support only', @subscription_type = N'pull', @update_mode = N'read only' 
GO 

-----------------END: Script to be run at Publisher 'DB001\OLTP'----------------- 

-----------------BEGIN: Script to be run at Subscriber 'DB002\OLTP'----------------- 
use [DB1] 
exec sp_addpullsubscription @publisher = N'DB001\OLTP', @publication = N'DB1', @publisher_db = N'DB1', @independent_agent = N'True', @subscription_type = N'pull', @description = N'', @update_mode = N'read only', @immediate_sync = 0 

exec sp_addpullsubscription_agent @publisher = N'DB001\OLTP', @publisher_db = N'DB1', @publication = N'DB1', @distributor = N'DB003\DIST', @distributor_security_mode = 1, @distributor_login = N'', @distributor_password = null, @enabled_for_syncmgr = N'False', @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20170327, @active_end_date = 99991231, @alt_snapshot_folder = N'\\DB001\Replication', @working_directory = N'', @use_ftp = N'False', @job_login = null, @job_password = null, @publication_type = 0 
GO 
-----------------END: Script to be run at Subscriber 'DB002\OLTP'-----------------