【问题标题】:SQL Server 2008 Replication to SQL Express 2005 via web sync通过 Web 同步将 SQL Server 2008 复制到 SQL Express 2005
【发布时间】:2010-11-26 15:41:57
【问题描述】:

我有一个 SQL 2008 R2 服务器。 我使用向导创建了一个出版物,似乎还可以。 “系统数据库”部分中有一个“分发”数据库,其中没有很多。 (不确定这是否已经存在或“发布向导”是否创建了它。) 我已经设置了网络同步,并且可以通过 IIS7 和自签名证书访问 relisapi.dll。

我的 ASP.NET 网站安装程序安装了 SQL Express 2005。 我写了一个小站点来测试订阅的创建和初始同步。 我不会“创建初始”数据库,因为我假设第一次同步会将所有内容从服务器上拉下来。

以下代码似乎可以工作,因为订阅是在 SQL Express 和 SQL 2008 服务器中创建的。

' Define the pull subscription.
            subscription = New MergePullSubscription()
            subscription.ConnectionContext = subscriberConn
            subscription.PublisherName = publisherName
            subscription.PublicationName = publicationName
            subscription.PublicationDBName = publicationDbName
            subscription.DatabaseName = subscriptionDbName
            subscription.HostName = hostname
            subscription.CreateSyncAgentByDefault = True

            ' Specify the Windows login credentials for the Merge Agent job.
            subscription.SynchronizationAgentProcessSecurity.Login = winLogin
            subscription.SynchronizationAgentProcessSecurity.Password = winPassword

            ' Enable Web synchronization.
            subscription.UseWebSynchronization = True
            subscription.InternetUrl = webSyncUrl

            ' Specify the same Windows credentials to use when connecting to the
            ' Web server using HTTPS Basic Authentication.
            subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication
            subscription.InternetLogin = winLogin
            subscription.InternetPassword = winPassword

            If Not subscription.LoadProperties() Then
                ' Create the pull subscription at the Subscriber.
                subscription.Create()

然后我运行这段代码:

        If Not subscription.PublisherSecurity Is Nothing Or _
               subscription.DistributorSecurity Is Nothing Then

                '0: Only error messages are logged.
                '1: All progress report messages are logged.
                '2: All progress report messages and error messages are logged.
                subscription.SynchronizationAgent.OutputVerboseLevel = 2
                subscription.SynchronizationAgent.Output = "c:\createmerge.txt"

                ' Synchronously start the Merge Agent for the subscription.
                subscription.SynchronizationAgent.Synchronize()

但是同步会抛出错误:

无法验证对出版物“我的出版物”的订阅。确保正确指定所有合并代理命令行参数并且正确配置订阅。如果发布者不再拥有有关此订阅的信息,请删除并重新创建订阅。

在服务器上,使用“复制监视器”将我的订阅显示为“统一化”。

我认为一个问题是我的 subscription.HostName 错误。 MSDN 上的微软例子说

"adventure-works\garrett1"

但目前尚不清楚 Adventure-works 是服务器、实例还是数据库,以及 garrett1 是谁(登录名或其他)。那么这实际上应该是什么?

由于我对复制一无所知,而且我一直在关注 MSDN 和一些书籍,因此我希望得到一些关于下一步该去哪里的指示。

抱歉,拖了这么久!

【问题讨论】:

    标签: sql-server sql-server-2008 replication merge-replication


    【解决方案1】:

    基于the documentationSubscription.Hostname 的设置对于使发布正常工作并不重要——它是当合并发布被分区时订阅者为HOST_NAME 提供的值。有关过滤发布的更多信息,请参阅here

    如果您确信您有 correctly configured your environment 支持网络同步,那么您将不得不一次调试这一部分。

    可能值得从为发布者上的另一个数据库设置非基于 Web 的订阅开始,以证明发布按预期工作。假设可行,请尝试在 SQL 2005 Express 实例上设置非 Web 订阅,然后继续测试 Web 同步。

    【讨论】:

      【解决方案2】:

      好的,我遇到问题的原因有两个。

      首先在我的开发 PC 上,机器在某个时候被重命名,所以与我的本地订阅者 SQL 的连接是错误的。

      其次,IIS7 上的“自签名证书”解析为内部名称,而不是外部世界通过 HTTPS 可以看到的真实名称。我们获得了正确域的测试证书,并且运行良好!

      【讨论】:

        【解决方案3】:

        好的,如果您有兴趣,这里有一些关于 HOST_NAME() 的更多信息。

        http://msdn.microsoft.com/en-us/library/ms152478%28v=SQL.110%29.aspx

        基本上,您可以使用它向发布者传递一个具有您选择的值的变量(这会重载服务器上的 HOST_NAME 函数)。这允许您过滤行,例如 Employee.ID = CONVERT(HOST_NAME() as int) 以仅在订阅时获取您需要的行。

        【讨论】:

          猜你喜欢
          • 2011-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-14
          • 1970-01-01
          • 1970-01-01
          • 2010-09-22
          • 1970-01-01
          相关资源
          最近更新 更多