![SQL Server OLEDB/ODBC 复制的安全初始同步](https://linux22.com/image/573248/SQL%20Server%20OLEDB%2FODBC%20%E5%A4%8D%E5%88%B6%E7%9A%84%E5%AE%89%E5%85%A8%E5%88%9D%E5%A7%8B%E5%90%8C%E6%AD%A5.png)
我正在尝试设置从 SQL Server 2008 R2 到 PostgreSQL 9.1 的单向事务复制。我正在尝试 PGNP OLE DB 提供程序。
我可以成功创建订阅,并且事务确实复制到了 PG 服务器。我在订阅中使用了 sync_type = 'none',因为否则,架构(包括 SQL Server 特定选项(SET ANSI_NULLS ON 等))似乎会被发送到 PostgreSQL,这会搞砸一切。
这没问题,我可以使用 SSIS 并复制我的整个数据库,包括数据。我的问题是,我如何才能安全地做到这一点?因为如果我只运行 SSIS 包来导出数据,然后添加订阅,交易可能会丢失。
例如,SSIS 将数据导出到 PG。行 X 已更新。复制开始。在这种情况下,行 X 的更新不在我的手动同步中,但复制随后开始。我无法运行复制,因为可能会发生其他错误。
这里的正确程序是什么?
答案1
我遇到过几次类似的问题。解决此问题的技巧是设置2 订阅
- 您当前设置的
- 另一个是 SQL 服务器数据库,它将“正常”同步
整个过程如下:
- 配置一个 sql server 订阅服务器,按照你喜欢的方式同步,重点是确保这个订阅服务器正确同步
- 配置对 postgres 的复制。注意在 postgres 中创建所有目标表,但不要关心数据同步。
- 在此阶段,当您修改主服务器上的数据时,该数据会复制到两个从服务器上。现在您停止 le日志读取器分发服务器上的代理。然后,您要等待(例如借助复制监视器)两个订阅代理都已处理完发往两个订阅者的所有事务。
- 截短POSTGRES 订阅服务器上的所有复制表
- 从 SQL 订阅服务器复制所有表 (不是主服务器!!)到Postgres订阅服务器。
- 两个订阅者现在拥有完全相同的数据!
- 启动日志读取器代理。您已完成
请注意,当日志读取器代理停止时,发布服务器上的事务将停留在发布服务器的日志中。因此,请注意不要让它满载。步骤 5(复制数据)可能相当长,因此请在主服务器上配置足够大的日志(取决于事务量)。
顺便说一句,如果您将 sync_type 设置为“automatic”,snapshost 代理将生成一个快照,该快照也将正确同步。我的赏金在哪里?
答案2
尝试这篇文章 SQL Server 复制小抄