关于sql server2012同步失效问题之高并发库同步失败的解决方法
关于sql server2012数据库复制同步时报错:"
该作业失败。 计划 1127 (复制代理计划。) 调用了该作业。最后运行的是步骤 1 (运行代理。)。.
已以用户 NT SERVICE\SQLSERVERAGENT 的身份执行。 无法删除目录 'F:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\ReplData\unc\20120723102721\'。请查看 xp_cmdshell 的安全上下文,并关闭其他可能正在访问该目录的进程。 [SQLSTATE 42000] (错误 20015) 复制-@rowcount_only 参数值必须是 0、1 或 2。0=7.0 兼容的校验和。1=只检查行计数。2=版本 8.0 中引入的新校验和功能。: 已安排代理 distribution@rowcount_only 参数值必须是 0、1 或 2。0=7.0 兼容的校验和。1=只检查行计数。2=版本 8.0 中引入的新校验和功能。 重试。无法清除分发事务表。 [SQLSTATE 01000] (消息 14152). 该步骤失败。"
造成这个问题的原因是:由于源数据库中表的数据更新率远远超过了从库的订阅需求申请.
出现以上错误的复制机制,通常采用的是"拉订阅",了解拉订阅的DBA肯定知道: 订阅服务器在经过一段时间才会向发布服务器要求复制出版数据库发生的变化的数据。所以,当订阅服务器在一段时间过去之后再向发布服务器申请变化的数据,此时发布服务器会进行主从库数据的变化计算和比对。发布服务器就发现了主库已找不到从库现数据上一次变化的点,则会报"SQL SERVER2012同步时报错执行一批命令时出错。正在重试单个命令。"错误。
解决方法:将先有的拉订阅机制拿掉,创建推订阅问题解决了(注意CREATE/DROP在存储过程的情况)。
还有其它的方法也可解决此问题,比如手写脚本建立同步机制。各位高手不吝待续。