SQL Server 2008 Express无法用于合并复制?

时间:2012-03-07 10:14:09

标签: .net replication sql-server-express

根据Microsoft的说法,SQL Server 2008 Express应该能够作为拉取订阅者参与合并复制。至少使用RMO对象。

但也可以使用其他变体。

但是,我们无法在客户端(运行SQL Server 2008 Express)上启动SQL Server代理。这似乎是一个普遍的问题,据我所知,尚未解决。

我是否认为SQL Server 2008 Express不支持实际的合并(拉)订阅?有没有人成功使用过这项技术?我认为微软声称这可以正常工作非常严重,尽管它根本没有。

我希望有人对此有任何经验!

4 个答案:

答案 0 :(得分:3)

我能够在没有SQL Server代理的情况下同步SQL Server 2008 R2 Express上的Merge pull订阅 - 通过RMO与以下C#同步:

static void SynchronizeMergePullSubscriptionViaRMO()
{
        // Define the server, publication, and database names.
        string subscriberName = "WIN8CP\\SQLEXPRESS";
        string publisherName = "WS2008R2_1";
        string distributorName = "WS2008R2_1";
        string publicationName = "TestMergePub2";
        string subscriptionDbName = "TestSubDB1";
        string publicationDbName = "AdventureWorksLT";

        // Create a connection to the Subscriber.
        ServerConnection conn = new ServerConnection(subscriberName);

        MergePullSubscription subscription;
        MergeSynchronizationAgent agent;

        try
        {
            // Connect to the Subscriber.
            conn.Connect();

            // Define the pull subscription.
            subscription = new MergePullSubscription();
            subscription.ConnectionContext = conn;
            subscription.DatabaseName = subscriptionDbName;
            subscription.PublisherName = publisherName;
            subscription.PublicationDBName = publicationDbName;
            subscription.PublicationName = publicationName;

            // If the pull subscription exists, then start the synchronization.
            if (subscription.LoadProperties())
            {
                // Get the agent for the subscription.
                agent = subscription.SynchronizationAgent;

                // Set the required properties that could not be returned
                // from the MSsubscription_properties table.
                agent.PublisherSecurityMode = SecurityMode.Integrated;
                agent.DistributorSecurityMode = SecurityMode.Integrated;
                agent.Distributor = publisherName;

                // Enable agent output to the console.
                agent.OutputVerboseLevel = 4;
                agent.Output = "C:\\TEMP\\mergeagent.log";

                // Synchronously start the Merge Agent for the subscription.
                agent.Synchronize();
            }
            else
            {
                // Do something here if the pull subscription does not exist.
                throw new ApplicationException(String.Format(
                    "A subscription to '{0}' does not exist on {1}",
                    publicationName, subscriberName));
            }
        }
        catch (Exception ex)
        {
            // Implement appropriate error handling here.
            throw new ApplicationException("The subscription could not be " +
                "synchronized. Verify that the subscription has " +
                "been defined correctly.", ex);
        }
        finally
        {
            conn.Disconnect();
        }
}

可以从MSDN Code Gallery下载代码示例。

答案 1 :(得分:1)

Replication Considerations (SQL Server Express)中所述,SQL Server Express可以充当所有类型的复制中的订阅者。

更重要的是,SQL Server Express不包含SQL Server代理。这意味着必须使用推送订阅,以便从分发服务器运行复制代理,或者如果通过Windows Sync Manager,RMO或批处理脚本进行同步,则可以使用提取订阅。

答案 2 :(得分:1)

Windows同步中心WIN7:

假设要在单人远程分支机构的“预算服务器”(例如Win7等客户端操作系统)上运行此复制,那么这将非常有效。它有一个很好的GUI,在同步过程中可以通过打击消息框进行打击,并且可以进行一些高级调度。

注意事项:

使用:Windows身份验证 NOT WITH:SQL身份验证

使用:一个当前登录的用户,始终保持登录状态,前提是:

  1. 该用户的用户名和密码与replisapi.dll WEBSYNC页面具有相同的凭据
  2. 与访问远程数据库的Windows身份验证用户相同
  3. 他们可以访问其他权限的复制(上面基本点1和2)
  4. 同步中心在自己的内部计划程序
  5. 上运行

    NB - 它具有欺骗性,因为它看起来像是支持SQL身份验证,但实际上并不是这样;如果您手动输入密码,它将起作用,但只在输入密码后每次输入一次。因此在实际意义上它不能使用sql身份验证。

    原因是它无法保存密码。微软通过设计做到了这一点,到目前为止还没有解决方法。

答案 3 :(得分:0)

另一个选项是执行合并代理(replmerg.exe)以使用批处理脚本同步Express订阅。 How to: Synchronize a Pull Subscription (Replication Programming)中介绍了这一点。从这里开始,批处理脚本可以按指定的时间表通过任务计划程序运行。

最后,Windows同步管理器可用于同步Express Merge请求订阅:How to: Synchronize a Subscription Using Windows Synchronization Manager (Windows Synchronization Manager)