使用存储过程或C#

时间:2017-08-30 06:30:38

标签: c# sql-server database-replication data-synchronization merge-replication

我有一个C#Windows窗体应用程序(在Visual Studio 2013中编写),我在SQL Server(对于主用户)和SQL Server Express(对于客户端)中都有相同的数据库架构。我的数据库大小约为每个客户端2 GB。

我希望在一天内或需要时同步一次这些数据库。在SQL Server 2008中,我们使用了RMO,但SQL Server 2012已弃用该API。

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

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

感谢!

2 个答案:

答案 0 :(得分:2)

如果您正在寻找事务/合并复制的替代方法,可以使用Service Broker作为传输,并根据存储过程和触发器编写自己的数据传输。在你的情况下(单向)并不是很难。我们在生产中使用这种数据传输 - 很容易过滤“子系统”的表数据,而不必重新初始化订阅,并且可以通过Service Broker进行顺序数据传输。此外,它保证了数据传输 - 即使连接服务代理在连接完成后也不会传递消息。当您有一个付费的SQL Server实例而其他人可以是Express时,服务代理可以正常工作。

答案 1 :(得分:2)

这绝不是一个全面的答案,但它会给你一些指导,然后你就可以独立研究。

以下是 I 匿名拉订阅者合并复制的方式:

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

以上粗略描述了订户可以直接连接到SQL Server分发服务器实例的过程。如果您打算使用Web同步连接到分发服务器,这是一个更驯服的野兽(尤其是IIS 7或更高版本),我将暂时离开它。