我们在大约 40 个表上设置了事务复制。除了大桌子之外,这对于小桌子来说效果很好。
我们的表中有大约 10 亿行,复制需要很长时间。在快照创建和批量数据移动的第一阶段,如果出现错误,整个过程需要再次运行。有没有办法在修复错误后仅同步剩余记录。
我们得到的错误是
`进程无法批量复制到表“xxx”中。 (来源:MSSQL_REPL,错误号:MSSQL_REPL20037)
获取帮助:[链接到帮助/MSSQL_REPL20037]
该系统找不到指定的文件。
要获取包含初始化订阅表时遇到的错误的详细信息的错误文件,请执行下面显示的 bcp 命令。有关 bcp 实用程序及其支持的选项的更多信息,请参阅 BOL。 (来源:MSSQLServer,错误号:20253)
获取帮助:[链接到帮助/20253]
bcp “xxx” in “xxx” -e “错误文件” -t”
`
问题是我们在目标表中有相同的行,但复制会截断目标表并再次同步它。解决这个问题的最佳方法是什么?
我们已经在两台服务器之间设置了事务复制,这对所有小表都按预期工作,但对于大表我们遇到了问题。
错误 20253 的其他答案表明它可能是由于 SSMS 18 BCP 与旧版本的 SQL Server 不兼容引起的。尝试使用 SSMS 17。
这也可能是由于发布者和订阅者之间的架构不匹配造成的。
复制将在重新初始化期间截断并加载 BCP 语句,除非您通过自己对发布者表进行 ETL 手动初始化订阅者,或者从备份初始化订阅者:https://learn.microsoft.com/en-us/sql/relational -数据库/复制/从备份初始化事务订阅?view=sql-server-ver16
对于自动快照初始化方法,请确保为 bcp 文件启用压缩,并且您的网络和共享位置是可靠的服务器:https://learn.microsoft.com/en-us/sql/relational-databases/replication/快照选项?视图=sql-server-ver16
确保 SQL 服务帐户的权限直接授予共享文件夹而不是 AD 组。