在SQL Server的复制中出现在错误“应用复制的命令时在订阅服务器上不到该行”,换上以前的做法就是删除掉这个复制,然后再新建一个复制,但是这次,我突然想BAIDU一下,看看别人是怎么处理这个问题的,然后发现到的文章都是从MSDN上抄下来的,因此我决定把我的做法写下来。
首先查MSDN,确定这个错误的ID为20598,这个下面会用到;确定了错误ID之后,有两种方法可以跳过这个错误
第一种是使用“右键-》复制-》分发服务器属性-》默认配置文件-》然后新建一个新的配置文件,”这样子就可以让分发的所有复制都使用新的配置文件,一般用来修改一些公共的参数。
第二种是打开复制监视器,然后双击你要修改的那个复制,在“操作”菜单下有个代理配置文件,打开它后新建一个配置文件,然后使用这个配置文件,这种方法用来修改单个的复制的参数。
新建后修改-SkipErrors这一项,点“值”栏后输入刚刚查到的ID号,就是20598,点确定,然后勾上你刚刚新建的这个配置文件。
重启代理,打开复制监视器,你会发现它已经跳过了这个错误。
如果是对等数据复制的话,要慎用,因为可能导致两个数据库的数据不一致,请先查明原因,然后再决定是否要跳过这个错误。
于事务性复制,有两种方法可以跳过在分发过程中遇到的错误:
分发代理的 -SkipErrors 参数,可用来跳过某种类型的错误。有错误的事务将不提交,但后续的事务将提交。
sp_setsubscriptionxactseqno 存储过程,可用来跳过一个或多个导致错误的事务。非SQL Server 的订阅服务器没有此选项。
重要事项:
在典型的复制处理中,应该不会遇到任何需要跳过的错误。跳过错误时要谨慎,要了解发生错误的条件、错误的起因以及需要跳过错误或特定事务而不解决的理由。如果在订阅服务器上跳过发布服务器上提交的事务,则这两个节点就不会完全同步,这会导致其他错误。
-SkipErrors 参数:
默认情况下,发布代理遇到错误时就会停止。如果使用 -SkipErrors 参数,并指定了预期的或不想让其干扰复制的错误,则代理就会记录错误信息,然后继续运行。例如,如果要指定分发代理,使其记录重复键违规但继续处理后续事务,就需要指定代理跳过错误 2601(不能在具有唯一索引 ’%.*ls’ 的对象 ’%.*ls’ 中插入重复键的行。)和 2627(违反了 %ls 约束 ’%.*ls’。不能在对象 ’%.*ls’ 中插入重复键): -SkipErrors 2601;2627
--------------------------------------------------------------------------------------------------------
附: Mssql错误代码对照表
错误 | 消息 |
MSSQL_ENG002601 | 不能在具有唯一索引 '%.*ls' 的对象 '%.*ls' 中插入重复键的行。 |
MSSQL_ENG002627 | 违反了 %ls 约束 '%.*ls'。不能在对象 '%.*ls' 中插入重复键。 |
MSSQL_ENG003165 | 数据库 '%ls' 已还原,但在还原/删除复制时出错。该数据库仍保留为离线状态。请参阅 SQL Server 联机丛书中的主题 MSSQL_ENG003165。 |
MSSQL_ENG003724 | 无法对 %S_MSG '%.*ls' 执行 %S_MSG,因为它正用于复制。 |
MSSQL_ENG004929 | 无法更改 %S_MSG '%.*ls',因为正在为复制而发布它。 |
MSSQL_ENG007395。请参阅对 Oracle 发布服务器进行故障排除。 | 无法启动链接服务器“%ls”的 OLE DB 访问接口“%ls”的嵌套事务。由于 XACT_ABORT 选项已设置为 OFF,因此必须使用嵌套事务。 |
MSSQL_ENG014005 | 无法删除发布。该发布已有订阅。 |
MSSQL_ENG014010 | 安装sql server数据库没到未将服务器“%s”定义为订阅服务器。 |
MSSQL_ENG014114 | 未将 '%s' 配置为分发服务器。 |
MSSQL_ENG014117 | 未将 '%s' 配置为分发数据库。 |
MSSQL_ENG014120 | 无法删除分发数据库 '%s'。此分发服务器数据库与发布服务器相关联。 |
MSSQL_ENG014121 | 无法删除分发服务器 '%s'。此分发服务器与分发数据库相关联。 |
MSSQL_ENG014144 | 无法删除订阅服务器 '%s'。在发布数据库“%s”中已有此服务器的订阅。 |
MSSQL_ENG014150 | 复制 - %s:代理 %s 成功。%s |
MSSQL_ENG014151 | 复制 - %s: 代理 %s 失败。%s |
MSSQL_ENG014152 | 复制 - %s:代理 %s 计划重试。%s |
MSSQL_ENG014157 | 由发布 '%s' 的订阅服务器 '%s' 创建的订阅已过期,且已停止。 |
MSSQL_ENG014160 | 已设置发布 [%s] 的阈值 [%s:%s]。此发布的一个或多个订阅已过期。 |
MSSQL_ENG014161 | 已设置发布 [%s] 的阈值 [%s:%s]。请确保日志读取器和分发代理正在运行并且可以满足滞后时间要求。 |
MSSQL_ENG014162 | 已设置发布 [%s] 的阈值 [%s:%s]。请确保合并代理正在运行且符合要求。 |
MSSQL_ENG014163 | 已设置发布 [%s] 的阈值 [%s:%s]。请确保合并代理正在运行且符合要求。 |
MSSQL_ENG014164 | 已设置发布 [%s] 的阈值 [%s:%s]。请确保合并代理正在运行且符合要求。 |
MSSQL_ENG014165 | 已设置发布 [%s] 的阈值 [%s:%s]。请确保合并代理正在运行且符合要求。 |
MSSQL_ENG018456 | 用户 '%.*ls'.%.*ls 登录失败 |
MSSQL_ENG018752 | 一次只能有一个日志读取器代理或日志相关过程(sp_repldone、sp_replcmds 和 sp_replshowcmds)连接到某个数据库。如果执行了一个日志相关过程,那么在启动日志读取器代理或者执行另一个日志相关过程之前,请删除执行 第一个过程时所用的连接,或者在该连接上执行 sp_replflush。 |
MSSQL_ENG020554 | 复制代理在 %ld 分钟内没有记录任何进度消息。这表明代理已停止响应或系统活动过多。请确保正在将记录复制到目标,并且与订阅服务器、发布服务器和分发服务器的连接仍然是活动的。 |
MSSQL_ENG020557 | 代理关闭。有关详细信息,请参阅作业 '%s' 的 SQL Server 代理作业历史记录。 |
MSSQL_ENG020572 | 在验证失败之后,订阅服务器“%s”对发布“%s”中项目“%s”的订阅已被重新初始化。 |
MSSQL_ENG020574 | 订阅服务器“%s”对发布“%s”中项目“%s”的订阅未通过数据验证。 |
MSSQL_ENG020575 | 订阅服务器“%s”对发布“%s”中项目“%s”的订阅已通过数据验证。 |
MSSQL_ENG020596 | 只有 '%s' 或 db_owner 的成员可以删除匿名代理。 |
MSSQL_ENG020598 | 应用复制的命令时在订阅服务器上不到该行。 |
MSSQL_ENG021075 | 发布 '%s' 的初始快照尚不可用。 |
MSSQL_ENG021076 | 项目 '%s' 的初始快照尚不可用。 |
MSSQL_ENG021286 | 冲突表 '%s' 不存在。 |
MSSQL_ENG021330 | 无法在复制工作目录下创建子目录。(%ls) |
MSSQL_ENG021331 | 无法将用户脚本文件复制到分发服务器。(%ls) |
MSSQL_ENG021385 | 快照无法处理发布 '%s'。可能是由于活动架构的更改操作或者是所添加的新项目所致。 |
MSSQL_ENG021617。请参阅对 Oracle 发布服务器进行故障排除。 | 无法运行 SQL*PLUS。请确保分发服务器上安装了最新版本的 Oracle 客户端代码。 |
MSSQL_ENG021620。请参阅对 Oracle 发布服务器进行故障排除。 | 通过系统 Path 变量获得的 SQL*PLUS 版本不够新,无法支持 Oracle 发布。请确保分发服务器上安装了最新版本的 Oracle 客户端代码。 |
MSSQL_ENG021624。请参阅对 Oracle 发布服务器进行故障排除。 | 在分发服务器 '%s' 上不到已注册的 Oracle OLEDB 访问接口 OraOLEDB.Oracle。请确保分发服务器上安装并注册了最新版本的 Oracle OLEDB 访问接口。有关其他信息,请参阅 SQL Server 联机丛书中“排除 Oracle 发布服务器故障”中的“SQL Server 错误 21624”。 |
MSSQL_ENG021626。请参阅对 Oracle 发布服务器进行故障排除。 | 无法使用 Oracle OLEDB 访问接口 OraOLEDB.Oracle 连接到 Oracle 数据库服务器 '%s'。 |
MSSQL_ENG021627。请参阅对 Oracle 发布服务器进行故障排除。 | 无法使用 Microsoft OLEDB 访问接口 MSDAORA 连接到 Oracle 数据库服务器 '%s'。 |
MSSQL_ENG021628。请参阅对 Oracle 发布服务器进行故障排除。 | 无法更新分发服务器 '%s' 的注册表,以允许 Oracle OLEDB 访问接口 OraOLEDB.Oracle 与 SQL Server 一起在进程中运行。请确保当前登录名有权修改 SQL Server 拥有的注册表项。 |
MSSQL_ENG021629。请参阅对 Oracle 发布服务器进行故障排除。 | 指示 Oracle 的 Oracle OLEDB 访问接口 OraOLEDB.Oracle 已注册的 CLSID 注册表项不在分发服务器上。请确保分发服务器上安装并注册了 Oracle OLEDB 访问接口。 |
MSSQL_ENG021642。请参阅对 Oracle 发布服务器进行故障排除。 | 异类发布服务器需要链接服务器。已有一个名为 '%s' 的链接服务器。请删除链接服务器或另选一个发布服务器名称。 |
MSSQL_ENG021663。请参阅对 Oracle 发布服务器进行故障排除。 | 不到源表 [%s].[%s] 的有效主键。 |
MSSQL_ENG021684。请参阅对 Oracle 发布服务器进行故障排除。 | “Oracle 发布服务器 "%s" 的复制管理用户权限不足。有关所需权限,请参阅脚本 /MSSQL/Install/oracleadmin.sql。” |
MSSQL_ENG021797 | '%s' 必须是有效的 Windows 登录名,且格式为:'计算机\登录名' 或 '域\登录名'。请参阅 '%s' 的文档。 |
MSSQL_ENG021798 | 在继续操作之前,必须通过“%s”添加“%s”代理作业。请参阅 '%s' 的文档。 |
MSSQL_ENG024070 | 客户端没有所需的特权。 |
MSSQL_REPL020011 | 进程无法在“%2”上执行“%1”。 |
MSSQL_REPL027056 | 合并进程无法更改“%1”上的生成历史记录。进行故障排除时,请使用详细的历史日志记录来重新启动同步,并指定要写入的输出文件。 |
MSSQL_REPL027183 | 合并进程未能使用参数化的行筛选器来枚举项目中的更改。如果此操作仍失败,请增大该进程的查询超时值,缩短发布的保持期,并改进对已发布表的索引。 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论