使用存储过程或 C# 同步 SQL Server 2014 和 SQL Server 2014 Express 数据库

Sync SQL Server 2014 and SQL Server 2014 Express database using stored procedure or C#

我有一个 C# Windows Forms 应用程序(写于 Visual Studio 2013)并且我在 SQL 服务器(对于主用户)和 SQL Server Express(用于客户端)。每个客户端的数据库大小约为 2 GB。

我想每天或在需要时同步此数据库一次。在 SQL Server 2008 中,我们使用了 RMO,但是 API 已被 SQL Server 2012 弃用。

我已经尝试使用 Merge Replication using T-SQL 并能够创建发布、向发布添加文章、创建订阅者以及向发布注册订阅者,但数据未同步。

是否有适用于 SQL Server 2014 或更高版本的此(合并复制)示例,请提出建议。

谢谢!

如果您正在寻找 transaction/merge 复制的替代方案,您可以使用 Service Broker 作为传输并根据存储过程和触发器编写您自己的数据传输。在您的情况下(单向)并不是很难。我们在生产中使用这种数据传输——很容易为 "subsribers" 过滤 table 数据,而无需重新初始化订阅,并且可以使用 Service Broker 进行连续数据传输。它还保证了数据传输——即使在连接建立后没有连接服务代理将传递消息。当您有一个 SQL 服务器的付费实例并且其他实例可以是 Express 时,服务代理工作正常。

这绝不是一个全面的答案,但它会为您提供一些指导,您随后可以独立研究这些指导。

以下是如何使用匿名拉取订阅者进行合并复制:

  • 配置发布者和分发者(在我的例子中是相同的 SQL 服务器实例)。
  • 为快照创建一个空的本地 Windows 目录或 UNC 共享(稍后生成)。
  • 为快照代理(通常称为Snapshot)创建一个local/domainWindows用户帐户,赋予它db_owner访问数据库的权限您即将发布并确保它对您为快照
  • 设置的Windows目录(或共享)具有写入权限
  • (可选)创建将在同步期间访问数据库的 local/domain Windows 用户帐户。订阅者上的合并代理将直接模拟此帐户以连接到发布者,或者订阅者将连接到您的 Web 同步服务器,然后该服务器将模拟此帐户以连接到发布者)。授予此帐户 db_owner 访问发布者数据库的权限。确保此帐户对快照 directory/UNC 共享具有 读取 权限。
  • 使用 TSQL 或 SQL Server Management Studio 中的 "New Publication" 向导创建合并发布。
  • 向出版物添加文章。
  • 将用户添加到发布访问列表 (PAL):这应该包括快照用户和在步骤 4 中创建的可选 Windows 用户。
  • 在发布属性中配置快照位置(将其指向步骤 2 中创建的 local/UNC 路径)和快照代理安全性(将其指向步骤 3 中创建的 Windows 用户)。
  • 通过右键单击 SQL Server Management Studio 中的发布生成快照 -> 查看快照代理状态 -> 启动。等待它成功完成。使用复制监视器 (sqlmonitor.exe) -> 发布 -> 代理选项卡调试任何问题。
  • 连接到订阅者服务器
  • 创建一个新的空数据库(或恢复以前在发布者上进行的备份 - 但请记住,如果您在发布的不同文章之间有限制,即外键,则从备份创建的订阅者数据库可能会失败)。
  • 运行 sp_addmergepullsubscription 在新创建的订阅者数据库上创建匿名请求订阅
  • 确保订阅者(或者更具体地说,复制合并代理将成为 运行 的 Windows 用户)可以访问 directory/UNC 上的快照 directory/UNC 共享72=];或者,您可以将快照 (unc) 文件复制到订阅服务器上的本地目录 - 在这种情况下,请务必在执行初始同步时为复制合并代理指定 AltSnapshotFolder
  • 运行 订阅服务器上的复制合并代理传递初始快照并执行第一次同步;我知道有一种方法可以通过 SQL Server Management Studio 来完成,但我个人通常直接调用 replmerg.exe。对于 SQL Server 2014,您可以在 C:\Program Files\Microsoft SQL Server0\COM\replmerg.exe(在订阅者上)中找到它。
  • 保持定期调用 replmerg.exe 以保持数据和架构更改在您的发布者和订阅者之间流动。
  • 不要忘记记录 replmerg.exe 输出,因为在分发服务器上的复制监视器中看到的复制历史远不及您从订阅服务器上的 replmerg.exe 获得的准确。

以上大致描述了订阅者可以直接连接到SQL服务器分发实例的过程。如果您计划使用 Web 同步来连接到分发服务器,那将是一头更难驯服的野兽(尤其是使用 IIS 7 或更高版本),我将把它留到下一次。