如何在不重新启动整个进程的情况下删除 SQL Server 事务复制错误。我们有大约10亿

How to remove SQL Server transaction replication errors without restarting the full process. we have around 1 billion

提问人:sheraz 提问时间:11/1/2023 最后编辑:marc_ssheraz 更新时间:11/1/2023 访问量:37

问:

我们已经在大约 40 个表上设置了事务复制。除了大桌子之外,这适用于小桌子。

一个表中大约有 10 亿行,复制需要花费大量时间。在快照创建和批量数据移动的第一阶段,如果出现错误,则需要再次运行整个过程。有没有办法在修复错误后仅同步剩余的记录。

我们得到的错误是

进程无法大容量复制到表“xxx”中。(来源:MSSQL_REPL,错误编号:MSSQL_REPL20037)
获取帮助:[链接到帮助/MSSQL_REPL20037]
系统找不到指定的文件。
若要获取包含初始化订阅表时遇到的错误的详细信息的错误文件,请执行下面显示的 bcp 命令。有关 bcp 实用工具及其支持的选项的详细信息,请查阅 BOL。(来源:MSSQLServer,错误号:20253) 获取帮助:[链接到 help/20253] bcp “xxx” in “xxx” -e “errorfile” -t“\n<x$3>\n” -r“\n<,@g>\n” -m10000 -SAZQC1W -t -w (来源:MSSQLServer,错误号:20253)
获取帮助:[链接到 help/20253]

问题是我们在目标表中有相同的行,但复制会截断目标表并再次同步它。解决这个问题的最佳方法是什么?

我们已经在两个服务器之间设置了事务复制,该复制对于所有小表都按预期工作,但对于大表,我们遇到了问题。

SQL-Server 同步 复制 大数据

评论


答:

0赞 AndMeAgain 11/1/2023 #1

错误 20253 的其他答案显示,这可能是由 SSMS 18 BCP 与旧版本的 SQL Server 不兼容引起的。尝试使用 SSMS 17。
这也可能是由于发布者和订阅者之间的架构不匹配。

SQL Server 事务复制 - 进程无法大容量复制到

复制将在重新初始化期间截断并加载 BCP 语句,除非您通过自己 ETL 发布服务器表手动初始化订阅服务器,或者从 backup: https://learn.microsoft.com/en-us/sql/relational-databases/replication/initialize-a-transactional-subscription-from-a-backup?view=sql-server-ver16 初始化订阅服务器

对于自动快照初始化方法,请确保为 bcp 文件启用压缩,并且网络和共享位置是可靠的服务器: https://learn.microsoft.com/en-us/sql/relational-databases/replication/snapshot-options?view=sql-server-ver16

确保 SQL 服务帐户直接授予对共享文件夹(而不是 AD 组)的权限。

适用于超大型表的类似 SQL Server 事务复制