【译】第十篇 Replication:故障排除
本篇文章是SQL Server Replication系列的第十篇,详细内容请参考原文。
复制故障排除是一项艰巨的任务。在任何复制设置中,都涉及到很多移动部件,而可用的工具并不总是很容易识别问题。This last level of the Replication Stairway will show you the places that provide the information necessary to solve most problems.
发现问题
第九篇介绍了复制监视器。如果你启用了那个工具的所有警告,只要有不正确它就会发出警告。But often that is all the information you can get from that tool.偶尔,即使你设法找到一个实际的错误信息,它却指向错误的方向。To show you how to get more information we will walk through the troubleshooting process of some of the more common issues.
我们以一个事务复制作为例子,模拟忘记给相关Windows帐户以及他们关联的SQL Server登录授予权限(相关帐户没有任何权限,拒绝请求订阅帐户对共享文件夹的读取权限)。
发布
当你打开复制监视器,你会看到红色错误标记表明发布存在问题,如图10.1所示。移动到代理页签,揭露与此发布相关的代理有问题。
图10.1 发布代理错误
右击日志读取器代理,选择查看详细信息,打开详细对话框,如图10.2所示
图10.2 日志读取器代理详细信息
正如你所看到的,这里没有更多有用的信息。然后,错误信息建议检查Jobs文件夹中的代理作业历史记录。这是指运行日志读取器代理的SQL Server代理的作业历史记录。
历史记录看起来类似于图10.3
图10.3 日志读取器历史记录
在作业历史记录中,你可以看到在每一次执行和每一次执行的每一步前面有下面四个标记之一:
它们分别表示:失败、成功、正在运行和重试
对于某些作业步骤,超过一个条目被记录在历史中。如果发生这样的情况,就是有失败或重试,最后一个记录行通常不包含任何细节。相反,你需要检查前面的行获取详情。
在图10.3,你可以看到代理一直在重试步骤2。你也可以看到每一步不止一个条目并且重新尝试。
为了查看不停地重试的原因,点击最近重试条目的前一行。这一行在图10.3会高亮显示。
作业历史记录的下半部分会显示执行的详细信息,如图10.4所示
图10.4 信息显示发布服务器不可用
通常在底部你会看到失败的原因:远程服务器未被指定为有效的发布服务器。
This message is just one of the many things that make troubleshooting replication difficult.它可能意味着你选择的发布服务器不再发布。在我们的例子中,它意味着用于日志读取器代理连接分发数据库的登录名没有所需(查看存储于分发数据库中的发布服务器信息)的权限。
然而授予缺少的权限(分发库db_owner)并没有解决问题。日志读取器代理的作业历史记录还是显示不停地重试。检查最新执行的日志信息出现不同的问题:代理不能连接到发布数据库。如图10.5所示
图10.5 信息显示不能打开发布数据库
在对发布数据库授予必要权限(发布库db_owner)的后,日志读取器代理成功启动。
图10.6 信息显示日志读取器代理成功启动
让我们返回到复制监视器。在图10.1中,两个作业都显示出错。然而,取决于你何时关注到这个问题,快照代理可能仍然显示"正在运行"的状态,如图10.7所示
图10.7 正在运行?It depends!
复制监视器实际上依赖于快照代理来定期报告状态信息。如果该报告未能在一个较长的时间内发送,复制监视器将报告问题。
在这种情况下,报告的问题也不是很具体。它只声明快照代理在10分钟内没有记录任何进度消息。你可以通过打开快照代理详细信息对话框(图10.8)查看这条信息
图10.8 快照代理没有进度
错误消息建议手动检查记录仍然被复制以及网络是连通的。目标数据库检查发现记录没有被复制,检查网络没发现问题。我们需要到别的地方查找问题的真实原因。
作业活动监视器告诉我们快照代理作业有问题。如图10.9
图10.9 快照存在问题
打开快照代理作业历史记录,如图10.10显录问题开始于步骤2
图10.10 快照代理历史记录
所选步骤的详细信息如图10.11所示
图10.11 信息显示发布服务器不可用
这个错误信息和之前在图10.4是一样的。它也意味着用于连接到分发数据库的帐户没有授予必要的权限(分发库db_owner)。
不像日志读取器和分发代理,快照代理没有计划成连续运行,因此每次修改后你需要重新启动它来查看修改是否成功。
重启快照代理最简便的方法是在复制监视器下进入到有问题的发布的代理页签。在快照代理上右击,选择启动代理。如图10.12所示
图10.12 启动快照代理
在启动快照后它马上又失败了。你可以在图10.13看到这个错误
图10.13 快照代理不能打开数据库
这次快照代理详细对话框显示的错误消息有了些帮助。它告诉快照代理使用的登录名没有权限访问发布数据库。错误详细信息如图10.14所示
图10.14 快照代理错误消息
在对发布数据库授予访问权限(发布库db_owner)后,重新启动快照代理,它又显示另一个错误。类似访问发布数据库问题所显示的方式,这个错误详细信息如图10.15所示
图10.15 没有共享的访问权限
给帐户对共享文件夹的写入权限,整个发布就正常运行起来了。在复制监视器->发布->代理,显示快照代理成功完成,日志读取器代理正在运行。如图10.16所示
图10.16 发布正常运行
订阅
例子中的订阅还是不能工作。打开复制监视器->发布->所有订阅,显示未初始化的订阅。如图10.17所示
图10.17 未初始化的订阅
为了得到更多信息,对象资源管理器下连接到订阅服务器,打开复制->本地订阅,右击订阅选择"查看同步状态"。如图10.18所示
图10.18 订阅上下文菜单
打开一个关于此订阅的同步状态信息的对话框。如图10.19所示
图10.19 查看同步状态
对话框告诉我们分发代理成功启动,并且它一直在运行。这里看不到任何问题,因此我们去查看分发代理历史记录。你可以通过作业活动监视器或图10.19中点击"查看作业历史记录"。
从分发代理作业历史记录,我们发现步骤一直在重试。如图10.20所示
图10.20 分发代理重试
问题的详细信息如图10.21所示
图10.21 分发代理登录失败
通常在最后我们能看到分发代理不能连接到订阅数据库。
按照之前的方式修复这个问题(订阅库db_owner),这个订阅还是没有初始化。为了获取有效信息,我们再次查看分发代理作业历史记录。代理好像还是在无休止的重试。最近的错误消息如图10.22所示
图10.22 找不到发布服务器
这个错误消息看来起非常熟悉,它意味着问题帐户不能查看可用的发布服务器。这次仅仅给它授权访问分发数据库(分发库db_owner)还不够。为了解决这个问题,分发代理使用的帐户必须是发布访问列表的成员。查看第四篇关于PAL的详细信息。
在解决上面问题后,我们还有最后一个问题要解决。After having not been very helpful to us trying to work on the previous issues, the replication monitor now wakes up and tells us about the remaining one.
图10.23 订阅错误
双击订阅打开订阅详细信息对话框,如图10.24所示
图10.24 订阅错误详细信息
在底部我们找到了问题的原因。快照共享拒绝帐户读取。
在授予帐户读取共享权限后,复制终于开始工作了。依赖于你用多长时间解决所有问题,你可以看到性能警告,如图10.25所示
图10.25 性能警告
对于这条警告你不需要担心。在刚刚设置复制之后看到一些性能警告是正常的。这些警告通常会在几分钟后消失。
其他工具和场景
虽然前面的场景不是很可能发生在你的环境中,它说明了所有你可能需要去检查的地方以查找问题信息。由于例子是一个事务复制,所有显示的对话框是针对这种类型的复制。然后,对于合并复制和快照复制,你可以在相同的地方查找必要的信息。
对于事务复制你应该将跟踪令牌添加到你的工具箱。跟踪令牌是在第九篇中介绍的。它们允许你测量发布服务器和分发服务器之间的延迟以及分发服务器与订阅服务器之间的延迟。它们同样可以用来检查问题。如果你插入一个跟踪令牌,然后在合理的时间内复制到订阅中,你就可以确认每一件事都在运转。如果你定期插入跟踪令牌,你甚至可以检测到延迟增加,在它们变得严重前识别问题。
你需要知道的事实,有时复制监视器可能显示误导信息。图10.26所示例子
图10.26 误导信息
它看起来是按预期工作的。然而,如果你仔细查看会发现滞后时间是"00:00:00"。这个值在生产环境好像不太可能,因此它可能是问题的征兆。在本例订阅没有完成初始化操作,因为某些原因它没找到已存在的快照(我是在创建发布时在快照代理页面去掉所有勾选,相当于没有启动过快照)。订阅详细信息显示初始化快照尚不可用,如图10.27所示
图10.27 初始快照尚不可用
所以即便复制监视器是一个非常有用的工具,if you have been notified of a problem and the replication monitor is looking like everything is in great shape,一定要多看两次,不错过任何可以帮助识别问题的提示。
在复制数据中如果有一个未解决的问题,分发代理会一直尝试解决它。你可以看图10.28中的例子
图10.28 缺少行错误
这个问题是由于在发布上更新一条记录,但在订阅没有找到对应记录。这个问题不会自己解决,但是分发代理会一直尝试,并且每一次它执行,复制监视器的主屏幕显示一切运行正常。取决于你何时打开复制监视器,你可能看到这个问题也可能看不到。因此我们再次重申:如果你怀疑一个问题,确保查看得深入些,不要错过有用的信息。图10.28中最近失败的同步就是问题的征兆。
大部分的问题,比如上面提到的,将显示在订阅详细信息对话框。错误信息还包含链接信息,可以帮助你进一步分析问题。
总结
这一篇,针对事务复制的故障排除做了一次演练。文中指出多处地方提供信息帮助检查复制问题。在最后提到了一些特别的错误场景。
--复制中与数据库权限相关的列表(详情参考本系列第三、四、六、七篇文章)
/********事务复制********/
----创建发布
->分发服务器
创建两个windows帐户(WORK\Snapshot、WORK\LogReader)
一个用于执行快照代理
一个用于执行日志读取器代理
上面两个需要分发数据库db_owner权限
->发布服务器
创建两个SQL Server登录(Snapshot、LogReader)
一个用于快照代理连接发布数据库
一个用于日志代理连接发布数据库
上面两个需发布数据库db_owner权限
----创建订阅
--请求订阅
->订阅服务器
创建一个windows帐户(WORK\DistPull)
用于执行分发代理
需要订阅数据库db_owner权限
->分发服务器
创建一个SQL Server登录(DistPull)
用于分发代理连接到分发数据库
需要分发数据库db_owner权限+(PAL成员)
--推送订阅
->分发服务器
创建一个windows帐户(WORK\DistPush)
用于执行分发代理
需要分发数据库db_owner权限+(PAL成员)
->订阅服务器
创建一个SQL Server登录(DistPush)
用于分发代理连接到订阅数据库
需要订阅数据库db_owner权限 /********合并复制********/
----创建发布
->分发服务器
创建一个windows帐户(WORK\MrgSnpSht)
用于执行快照代理
需要分发数据库db_owner权限
->发布服务器
创建一个SQL Server登录(MrgSnpSht)
用于快照代理连接发布数据库
需发布数据库db_owner权限
----创建订阅
--请求订阅
->订阅服务器
创建一个windows帐户(WORK\MrgAgntPull)
用于执行合并代理
需要订阅数据库db_owner权限
->分发服务器
创建一个SQL Server登录(MrgAgntPull)
用于合并代理连接到分发数据库
需要分发数据库Guest access
->发布服务器
创建一个SQL Server登录(MrgAgntPull)
用于合并代理连接到发布数据库
需要是PAL成员
--推送订阅
->分发服务器
创建一个windows帐户(WORK\MrgAgntPush)
用于执行合并代理
需要分发数据库db_owner权限
->发布服务器
创建一个windows帐户(WORK\MrgAgntPush)
用于合并代理连接到发布数据库
需要是PAL成员
->订阅服务器
创建一个SQL Server登录(MrgAgntPush)
用于合并代理连接到订阅数据库
需要订阅数据库db_owner权限
--(与远程机器连接选择模拟进程用户权限分配与SQL登录相同) /****密码修改****/
如果修改windows帐户或SQL Server登录的密码,对应代理作业在下次启动时会报错!!!
与数据库权限相关的列表,详情参考本系列第三、四、六、七篇文章。
【译】第十篇 Replication:故障排除的更多相关文章
- 第十篇 Replication:故障排除
本篇文章是SQL Server Replication系列的第十篇,详细内容请参考原文. 复制故障排除是一项艰巨的任务.在任何复制设置中,都涉及到很多移动部件,而可用的工具并不总是很容易识别问题.Th ...
- 【译】第九篇 Replication:复制监视器
本篇文章是SQL Server Replication系列的第九篇,详细内容请参考原文. 复制监视器允许你查看复制配置组件的健康状况.这一篇假设你遵循前八篇,并且你已经有一个合并发布和事务发布.启动复 ...
- 【译】第二篇 Replication:分发服务器的作用
本篇文章是SQL Server Replication系列的第二篇,详细内容请参考原文. 分发服务器是SQL Server复制的核心组件.分发服务器控制并执行数据从一个服务器移动到另一个服务器的进程. ...
- 【译】第一篇 Replication:复制简介
本篇文章是SQL Server Replication系列的第一篇,详细内容请参考原文. 复制这个词来自拉丁语中的"replicare",意味着重复.Replication des ...
- 【译】第六篇 Replication:合并复制-发布
本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义 ...
- 解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译)
解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译) http://improve.dk/orcamdf-studio-release-feature-recap/ ...
- 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除
目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...
- 【译】第十篇 SQL Server安全行级安全
本篇文章是SQL Server安全系列的第十篇,详细内容请参考原文. 不像一些其他industrial-strength数据库服务,SQL Server缺乏一个内置保护个别数据记录的机制,称为行级安全 ...
- 【译】第十篇 Integration Services:高级事件行为
本篇文章是Integration Services系列的第十篇,详细内容请参考原文. 简介在前一篇, we introduced fault tolerance by examining method ...
随机推荐
- 不再混淆,一次搞懂!图解flexbox十余个属性
原文首发于个人博客:不再混淆,一次搞懂!图解flexbox十余个属性 flexbox的发明简直是csser的一大福音,终于可以不再需要为垂直居中一个元素而绞尽脑汁了.同时它还能够实现弹性布局,可以说没 ...
- Qt中 QString 转 char*
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...
- java 常量 因为常量不依赖对象 所以一般都会将常量设置为 类属性
- luogu P2992 [USACO10OPEN]三角形计数Triangle Counting
https://www.luogu.org/problemnew/solution/P2992 考虑包含原点,不包含原点的三角形有什么特征. 包含原点的三角形:任意找一个顶点和原点连线,一定能把另外两 ...
- P4071 [SDOI2016]排列计数
题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是稳定的 满足条 ...
- STL Set和multiset 容器
STL Set和multiset 容器 set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列. 元素插入过程是按排序规则插入,所以不能指定插入位 ...
- 【BZOJ2724】蒲公英(分块)
[BZOJ2724]蒲公英(分块) 题面 洛谷 谴责权限题的行为 题解 分块什么的都不会,根本就没写过几次. 复杂度根本不会分析,吓得我赶快来练练. 这题要求的是区间众数,显然没有什么很好的主席树之类 ...
- BZOJ5058 期望逆序对 【矩乘 + 组合数学 + 树状数组】
题目链接 BZOJ5058 题解 可以发现任意两个位置\(A,B\)最终位置关系的概率是相等的 如果数列是这样: CCCCACCCCBCCCC 那么最终有\(7\)种位置关系 \((A,B)\) \( ...
- debian包管理
常用的包管理工具有:apt.apt-get.apt-cache.apt-file.aptitude.dpkg等.功能有重复的,挑顺手的即可. 1.apt # apt --help list - lis ...
- 谷歌发布 Android 8.1 首个开发者预览版,优化内存效率
今晨,谷歌推出了 Android 8.1 首个开发者预览版,此次升级涵盖了针对多个功能的提升优化,其中包含对 Android Go (设备运行内存小于等于 1 GB)和加速设备上对机器学习的全新神经网 ...