3

我正在使用 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.

我该如何解决这个问题?

4

4 回答 4

3

我收到了同样的错误。我的解决方法是明确定义 Job_login 和 job_password,我一开始就设置为 null。

EXEC sp_addpullsubscription_agent 
@publisher = @publisher, 
@publisher_db = @publicationDB, 
@publication = @publication, 
@distributor = @publisher, 
@job_login = $(Login), 
@job_password = $(Password);
于 2012-10-19T14:48:19.607 回答
1

您的复制设置脚本中似乎存在错误。

我怀疑错误出在对 sp_addpushsubscription_agent (如果是推送订阅)或 sp_addpullsubscription_agent (如果是拉订阅)的调用中。具体来说,@publication参数是错误的,因为分发代理声明指定的出版物“不存在”

请检查您的脚本并重试。

于 2012-06-20T16:11:34.607 回答
1

我遇到了同样的问题并通过执行以下操作进行了修复:

  • -Subscriber Job owner 与 Publication User 相同

  • -Subscriber 用户已添加到订阅者用户列表并添加到 sysadmin 服务器角色

于 2013-09-04T05:47:45.670 回答
0

当我设法通过备份初始化启动并运行拉式订阅者时,只需几个注意事项:

  1. 确保您拥有发布者、分发者和订阅者的代理帐户作为系统管理员登录所有实例,示例订阅者必须在分发者和发布者上。
  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'-----------------
于 2017-03-27T15:55:44.030 回答