dgbroker校验失败的一个奇怪问题(r8笔记第50天)
- 格式:doc
- 大小:17.50 KB
- 文档页数:6
503校验规则未通过在进行网络访问过程中,我们可能会遇到各种不同的错误码,其中一个常见的错误码就是503。
当我们在浏览器中访问一个网页时,如果出现503错误,就意味着服务器暂时无法处理我们的请求。
那么,为什么会出现503错误呢?这与503校验规则密切相关。
503校验规则是服务器端对请求的校验规则之一。
当服务器接收到一个请求时,会根据一定的规则进行校验。
如果校验通过,则服务器会正常处理该请求并返回相应的结果。
然而,如果校验未通过,服务器就会返回503错误,告诉客户端请求暂时无法处理。
那么,503校验规则未通过可能的原因有哪些呢?首先,服务器可能因为负载过高而无法处理请求,此时就会返回503错误。
这通常发生在访问量非常大或服务器资源不足的情况下。
其次,服务器可能正在进行维护或升级,这时也会返回503错误,告诉客户端稍后再试。
此外,服务器还可能根据一些特定的规则对请求进行限制,如果请求不符合规则,就会返回503错误。
对于用户来说,遇到503错误可能会感到困惑和不满。
然而,我们可以通过一些方法来解决这个问题。
首先,可以尝试刷新页面或重新发送请求,有时候只是服务器暂时繁忙导致的错误。
如果多次尝试后仍然无法解决,可以尝试访问其他网页或等待一段时间再试。
另外,如果我们是网站的管理员,可以考虑增加服务器资源或优化服务器配置,以提高服务器的处理能力。
总的来说,503校验规则未通过是一种常见的服务器错误,可能会给用户带来一定的不便。
然而,通过了解错误的原因和解决方法,我们可以更好地应对这个问题。
同时,对于服务器管理员来说,也要加强对服务器的管理和维护,以提高服务器的稳定性和可靠性,从而减少503错误的发生。
第1篇在数字电路设计中,时序校验是确保电路按照预定时序正常运行的重要环节。
时序校验不成功可能会导致电路功能异常、性能下降甚至完全无法工作。
本文将从多个角度分析时序校验不成功的原因,并提出相应的解决方法。
一、设计阶段的原因1. 设计错误(1)逻辑错误:设计人员在设计过程中可能因为逻辑错误导致时序校验不通过。
例如,设计时未正确处理时序约束、信号间存在竞争冒险、时序路径过长等。
(2)编码错误:在编码过程中,可能因为代码不规范、数据类型不匹配、变量未初始化等原因导致时序校验不通过。
(3)资源分配不合理:在FPGA或ASIC设计中,资源分配不合理可能导致时序校验不通过。
例如,时钟域交叉时未正确处理、资源利用率过高、时序路径过长等。
2. 设计约束错误(1)时钟域约束错误:时钟域约束设置不正确可能导致时序校验不通过。
例如,时钟域交叉时,时钟偏移、时钟抖动等参数设置错误。
(2)时序路径约束错误:时序路径约束设置不正确可能导致时序校验不通过。
例如,时序路径过长、时序路径中存在不确定性等。
(3)资源约束错误:资源约束设置不正确可能导致时序校验不通过。
例如,资源利用率过高、时序路径中存在竞争冒险等。
二、仿真阶段的原因1. 仿真环境配置错误(1)仿真库错误:仿真库中缺少关键模块或模块版本不匹配可能导致时序校验不通过。
(2)仿真工具错误:仿真工具设置不正确,如仿真时间、仿真精度等可能导致时序校验不通过。
2. 仿真激励错误(1)激励信号错误:激励信号设置不正确,如信号波形、信号幅度等可能导致时序校验不通过。
(2)激励路径错误:激励路径设置不正确,如激励信号到达目标模块的路径过长、信号经过多个模块等可能导致时序校验不通过。
3. 仿真设置错误(1)仿真参数设置错误:仿真参数设置不正确,如仿真时间、仿真精度等可能导致时序校验不通过。
(2)仿真流程错误:仿真流程设置不正确,如仿真步骤、仿真结果分析等可能导致时序校验不通过。
三、制造阶段的原因1. 制造工艺问题(1)晶圆加工缺陷:晶圆加工过程中可能存在缺陷,如缺陷、杂质等,导致时序校验不通过。
vdbench data validation error -回复Vdbench是一个自由且广泛使用的存储性能测试工具,主要用于对存储系统进行基准测试和性能调优。
然而,在使用Vdbench进行测试时,有时会遇到数据验证错误(data validation error)的问题。
本文将一步一步回答有关Vdbench数据验证错误的问题,并提供解决方法。
第一步:了解Vdbench数据验证错误的原因1.1 文件传输错误:当Vdbench在执行测试时,可能会因为网络中断或硬盘故障等原因导致文件传输错误。
1.2 操作系统和文件系统的限制:有些操作系统和文件系统对于文件大小、文件名长度或路径名长度有限制。
如果在测试过程中超出了这些限制,则可能导致数据验证错误。
1.3 快照或克隆操作:如果测试中使用了快照或克隆操作,由于源数据和克隆数据之间的差异,可能会导致数据验证错误。
1.4 存储设备问题:当存储设备本身存在故障或配置错误时,也可能导致数据验证错误。
第二步:分析数据验证错误2.1 检查测试日志:在Vdbench测试过程中,可以通过查看测试日志来了解具体的错误信息。
测试日志通常会包含与数据验证错误相关的警告或错误消息。
2.2 搜索关键字:在日志中搜索与数据验证错误相关的关键字,如"datavalidation error"、"data mismatch"等。
这些关键字通常会出现在文件传输错误或存储设备问题导致的错误信息中。
第三步:解决数据验证错误3.1 重新执行测试:如果数据验证错误是由于文件传输错误导致的,可以尝试重新执行测试。
确保网络连接稳定,并检查硬盘是否正常。
3.2 检查操作系统和文件系统限制:如果在测试中出现了超出操作系统或文件系统限制的情况,可以调整测试参数以避免这些限制,如缩短文件名长度、路径名长度或文件大小。
3.3 排除快照或克隆操作的影响:如果测试中使用了快照或克隆操作,并且出现了数据验证错误,可以尝试在不使用这些操作的情况下重新执行测试,以排除这些操作对测试结果的影响。
解决Docker容器启动失败的常见错误和故障处理技巧Docker已经成为现代软件开发和部署的必备工具之一。
它的容器化技术能够将应用程序和依赖项封装在一个隔离的环境中,提供了高度可移植性和灵活性。
然而,尽管Docker的使用相对简单,但在实际使用过程中,容器启动失败是一个常见的问题。
本文将介绍一些常见的错误和故障处理技巧,以帮助您快速解决这些问题。
错误一:端口冲突当您尝试运行一个新的容器时,可能会遇到端口冲突的错误。
这是因为Docker 使用主机上的网络资源,不同的容器可能会尝试绑定相同的端口导致冲突。
解决这个问题的方法是指定一个不冲突的端口来运行容器,或者停止占用该端口的其他容器。
错误二:内存不足大型应用程序可能会需要较大内存才能正常运行。
如果您的主机上的内存资源有限,当尝试启动一个内存需求较高的容器时,可能会遇到内存不足的错误。
这时您可以尝试限制容器使用的内存资源,或者增加主机的内存容量来解决这个问题。
错误三:镜像下载失败在运行一个新的容器之前,Docker会尝试从镜像仓库中下载相应的镜像。
但由于网络问题或镜像仓库不可用等原因,可能会导致镜像下载失败。
为了解决这个问题,您可以尝试切换到其他可用的镜像仓库,或者使用已经下载好的本地镜像。
错误四:文件权限问题有时候,容器启动失败可能是由于文件权限问题引起的。
Docker会在运行容器时将主机上的文件系统挂载到容器中,如果文件的权限设置不正确,可能会导致容器无法正常运行。
为了解决这个问题,您可以尝试更改文件的权限,或者在Dockerfile中明确设置文件权限。
故障处理技巧一:查看容器日志Docker提供了一个方便的日志功能,您可以通过查看容器的日志来快速定位问题所在。
使用docker logs命令,您可以查看容器的标准输出及错误输出。
日志中可能会显示一些有用的错误信息,帮助您判断问题的原因。
故障处理技巧二:使用调试模式Docker提供了调试模式,可以让您在容器启动过程中暂停并进入容器的命令行环境中进行调试。
vdbench data validation error -回复关于[vdbench数据验证错误]的问题,我将为你解答相关内容。
首先,我们需要了解什么是[vdbench]以及数据验证错误的含义。
[vdbench]是一个用于测试存储系统性能的工具,它能够模拟真实的工作负载并评估系统在不同条件下的性能表现。
数据验证错误是指在使用[vdbench]工具时,发现测试结果与预期不符的情况。
可能出现数据验证错误的原因有很多,下面我将逐步解释。
1. 配置错误:在使用[vdbench]工具时,系统的配置可能存在错误。
这包括存储系统的配置、网络配置、磁盘配置等。
如果其中任何一项配置存在问题,就有可能导致数据验证错误的发生。
2. 负载压力过大:当测试环境中的负载压力过大时,很容易出现数据验证错误。
这是因为系统无法承受太大的压力而导致错误的结果产生。
3. 系统资源限制:某些情况下,系统资源可能受到限制,例如内存、CPU、磁盘空间等。
如果系统资源不足,也有可能导致数据验证错误的出现。
4. 软件bug:[vdbench]作为一个复杂的工具,也有可能存在一些软件bug。
这些bug 可能会导致数据验证错误的发生,尤其是在旧版本的软件中。
解决[vdbench数据验证错误]的步骤如下:1. 检查系统配置:首先,确保系统的所有配置都正确。
查看存储系统、网络和磁盘的配置是否符合要求。
如果有错误,及时进行修正。
2. 分析测试结果:对于发生数据验证错误的测试结果,需要进行详细的分析。
查看错误信息、日志和报告,找出导致错误的原因。
3. 重新测试:如果可能的话,重新进行测试以验证数据验证错误。
确保在测试时使用正确的参数和负载配置,以保证可靠性和准确性。
4. 检查系统资源:检查系统资源是否受到限制。
如果系统资源不足,可能需要优化配置或增加资源。
5. 更新软件版本:如果发现[vdbench]存在已知的bug,建议更新为最新版本的工具。
新版本通常会修复一些已知的问题。
47个Docker常见故障的原因和解决方式本文针对Docker容器部署、维护过程中,产生的问题和故障,做出有针对性的说明和解决方案,希望可以帮助到大家去快速定位和解决类似问题故障。
Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息:1、通过docker run执行命令,或许返回信息2、通过docker logs 去获取日志,做有针对性的筛选3、通过systemctl status docker查看docker服务状态4、通过journalctl -u docker.service 查看日志以下是整理的docker容器类问题故障,分为9个类一、启动类故障原因:Docker未正常启动解决方式:systemctl start docker2、can't create unix socket /var/run/docker.sock: is a directory原因:docker.sock不能创建解决方式:rm -rf /var/run/docker.sock然后重新启动docker3、Job for docker.service failed. Failed to start Docker Application原因:Selinux引起解决方式:/etc/sysconfig/selinux , 把selinux 值改为disabled重启docker解决4、docker: Error response from daemon:/var/lib/docker/overlay/XXXXXXXXXXXXXXXXXXXXXXX: no such file or directory.原因:docker没有指定目录或文件解决方式:systemctl stop dockerrm -rf /var/lib/docker/*systemctl start docker重启run镜像启动容器5、docker: Error response from daemon: Conflict. The container name "XXX" is already in use by container "XXX". You have to remove (or rename) that container to be able to reuse that name.原因:docker name重名解决方式:改名容器或者删除重建容器6、Error: Connection activation failed: No suitable device found for this connection原因:网卡配置问题解决方式:重启网卡7、系统重启后docker无法启动报错为:docker0: iptables: No chain/target/match by that name原因:docker服务iptables问题解决方式:重启docker服务system restart docker8、Error starting daemon: error initializing graphdriver: driver not supported使用overlay2存储驱动启动docker daemon报错原因:daemon缺少配置解决方式:添加配置:/etc/docker/daemon.json{"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"]}9、Failed to start docker.service: Unit docker.service is masked.未知原因:docker 被mask解决方式:systemctl unmask docker.servicesystemctl unmask docker.socketsystemctl start docker.service10、Failed to start docker.service: Unit is not loaded properly: Invalid argument.未知原因:docker服务无法正常load解决方式:卸载docker,删除docker.service重新安装docker11、docker-compose启动容器时报错:/usr/lib/python2.7/site-packages/requests/init.py:80: RequestsDependencyWarning: urllib3 (1.22) or chardet (2.2.1) doesn't match a supported version! RequestsDependencyWarning)未知原因:pip相应组件版本不支持解决方式:pip uninstall urllib3pip uninstall chardetpip install requests12、docker容器重启故障强杀docker进程后,重启docker。
unexpected error code解决方法解决"unexpected error code"的方法取决于发生该错误的具体上下文和应用程序。
以下是一些建议,你可以尝试这些方法来排除或解决这个问题:1. 查看错误信息:首先,仔细查看错误消息,看看是否提供了有关错误的更多信息。
这可能包括堆栈跟踪或其他有关问题的详细信息。
这有助于更好地了解问题的根本原因。
2. 查看文档:检查相关应用程序或框架的文档,寻找关于特定错误代码的信息。
有时,文档可能提供了详细的解释以及可能的解决方案。
3. 网络搜索:使用搜索引擎来查找与错误代码相关的信息。
其他人可能已经遇到并解决了类似的问题,并且在论坛、博客或问答网站上分享了解决方案。
4. 检查日志文件:如果应用程序生成日志文件,查看这些文件以获取更多信息。
日志文件通常会记录发生的错误以及可能的原因。
5. 更新软件:确保你正在使用的应用程序、库或框架是最新版本。
有时,错误可能已经在较新的版本中得到修复。
6. 调试代码:如果你有访问应用程序源代码的权限,尝试使用调试器来查看代码并找到可能导致错误的地方。
这可能需要一些编程经验。
7. 检查依赖项:确保应用程序所依赖的所有库和组件都已正确安装,并且版本兼容。
8. 联系开发者支持:如果你正在使用的是第三方库或框架,考虑联系开发者或社区支持以获取帮助。
他们可能能够提供特定于你的情况的解决方案。
9. 重新安装应用程序:如果所有其他方法都失败,尝试重新安装应用程序。
有时文件损坏或配置问题可能导致错误。
10. 考虑环境问题:确保你的开发环境设置正确,并且没有冲突或配置问题。
错误排除参孝手册北京发格自动化设备有限公司目录编程错误 (3)准备功能和执行错误 (37)硬件错误 (56)PLC错误 (59)伺服错误 (60)表格数据错误 (65)MC工作模式 (68)编程错误表0001“Linea Vacia”检测时间:在CNC上进行编辑或执行通过DNC传输的程序时。
引起原因:引起这种错误的原因可能是:1当试图进入程序或执行一段空程序段或包含有标号(程序段号)时。
2在《带岛屿的不规则型腔因定循环(G66)》内,当参数“(轮廓的开始)大于参数“E”(轮廓的结束)时。
解决方案:每种情况的解决方案为:1 CNC不能进入程序或执行空程序段。
要进入程序中的空程序段,在该程序段的开始使用符号《;》。
CNC将忽略该程序段的其余部份。
2参数“S”的数值(开始定义轮廓的程序段)必须小于参数“E”的数值(轮廓定义的结束的程序段)。
0002“不合适的数据”检测时间:在CNC上进行编辑或在执行通过DNC传输的程序时。
引起原因:引起这种错误的原因可能是:1当切削条件(F、S、T或D)或M功能后台编辑轴座标时。
2当程序段跳转标志(条件段/1,/2或/3)。
3当用ISO代码格式编程时,编写的程序段号大于是9999时。
4当试图在《不规则型腔》操作的精加工(G68)中定义加工起点的座标时。
5在用高级语言编程时,RPT指令的数值大于9999。
解决方案:每种情况的解决方案为:1记住编程的顺序。
2记住编程的顺序:- 程序跳转(条件程序段/1、/2或/3)。
- 标号(N)。
-《G》功能。
- 轴座标(X、Y、Z……)。
- 加工条件(F、S、T、D)。
-《M》功能。
3更正程序段的语法错误。
程序段的标号应在0到9999之间。
在定义《不规则型腔》操作的精加工循环(G68)时,不能骗写点座标,CNC选择加工的开始点。
编程的格式为:G68B…L…Q…I…R…K…V…然后是切削条件。
1更正程序段的语法错误。
程序中的重复次数应在0到9999之间。
503校验规则未通过在互联网时代,网站的可用性和稳定性对于用户和企业来说都是至关重要的。
然而,在网络运行过程中,难免会遇到一些错误和问题。
其中之一就是503校验规则未通过的问题。
当用户访问一个网站时,服务器会根据用户的请求来处理并返回相应的信息。
而当服务器遇到503校验规则未通过的情况时,它会向用户返回一个503错误码。
这意味着服务器目前无法处理用户的请求,通常是因为服务器暂时过载或维护中。
出现503错误码可能有多种原因。
首先,服务器可能由于访问量过大或处理复杂的请求而导致负载过高,无法及时响应用户的请求。
其次,服务器可能正在进行系统升级或维护,因此无法处理用户的请求。
还有一种可能是服务器出现故障或崩溃,导致无法正常工作。
为了解决503校验规则未通过的问题,网站管理员可以采取一些措施。
首先,他们可以增加服务器的处理能力,例如增加硬件资源或使用负载均衡技术。
这样可以提高服务器的并发处理能力,减少503错误的发生。
其次,他们可以合理规划网站的维护时间,避免在高峰期进行维护,从而减少对用户的影响。
此外,定期检查服务器的运行状态,及时发现并修复潜在的问题,也是降低503错误的有效措施。
对于用户而言,当遇到503校验规则未通过的错误时,应该首先确认自己的网络连接是否正常。
如果网络连接正常,可以尝试刷新页面或稍后再试。
如果问题仍然存在,可以尝试访问其他网站或联系网站管理员寻求帮助。
503校验规则未通过是一个常见的网络错误,可能由服务器负载过高、维护或故障等原因引起。
对于网站管理员来说,增加服务器处理能力、合理规划维护时间和及时修复问题是解决该问题的关键。
对于用户来说,确认网络连接、刷新页面或联系网站管理员是解决该问题的常见方法。
通过共同的努力,我们可以提高网站的可用性和稳定性,为用户提供更好的体验。
Token验证失败的解决⽅法Token验证失败的解决⽅法⼀、问题由来在使⽤URL和Token启⽤微信公众平台开发模式消息接⼝的时候,我们会碰到下⾯三种情况1. token校验失败这样回头检查⼀下各项配置是否正确。
如果确定配置没有问题,请按下⾯的⽅法检查2. 请求URL超时你的服务器在国外,或者服务器⽹速不给⼒,⼀般多试⼏次就可以了。
如果经常这样,就需要考虑更换服务器3. 提交成功恭喜你,配置成功了。
我们来讲解⼀下第⼀种的原因及解决⽅法。
⼆、问题分析⾸先要了解的是什么是URL和Token,在这⾥,URL就是放置了接⼝程序的⽹址,这个⽹址⼀般得是你⾃⼰的服务器或空间地址。
你⾃⼰在这个空间上某个⽬录已经有接⼝程序了,你知道这个接⼝程序在互联⽹上的访问地址是什么。
⽽ Token就是⼀个令牌,该令牌是个数字或字母形式的字符串,⽤于微信服务器与你的服务器进⾏通讯的时候的⾝份验证。
防⽌⾮法数据来搞乱。
然后要了解的是开发模式为什么要使⽤Url和Token,使⽤url是为了让微信服务器和你的服务器进⾏通讯对话,从⽽达到开发模式下⾃动回复的⽬的。
⽽实现这个通讯,必须有相应的程序为你完成这个功能,⽽这个程序必须已经开发完成并且放置于url路径下⾯,当你填写完url和token的时候,微信服务器就会和你的服务器下的程序进⾏⼀次认证过程,认证通过表明这个服务器是你的并且程序没有问题。
不然你填个不存在的url或者url下⾯个没有相应的接⼝功能,那是通不过的。
你可以先⽤下⾯的测试通过三、问题解决1. 技术分析法这次我们在代码⾥⾯加⼊跟踪http记录的⽅法来查看我们⾃⼰的服务器收到了请求没有回应,还是微信根本没有发请求过来。
通过调⽤系统环境变量$_SERVER,可以查看到HTTP请求的信息,其中两项重要的是把其加⼊代上⾯的代码中,并且将其写⼊到本地⽂件中来,全部代码<?php/*⽅倍⼯作室 /txw1958/CopyRight 2013 All Rights Reserved*/traceHttp();define("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();if (isset($_GET['echostr'])) {$wechatObj->valid();}else{$wechatObj->responseMsg();}class wechatCallbackapiTest{public function valid(){$echoStr = $_GET["echostr"];if($this->checkSignature()){echo $echoStr;exit;}}private function checkSignature(){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}public function responseMsg(){$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if (!empty($postStr)){$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";if($keyword == "?" || $keyword == "?"){$msgType = "text";$contentStr = date("Y-m-d H:i:s",time());$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;}}else{echo "";exit;}}}function traceHttp(){logger("\n\nREMOTE_ADDR:".$_SERVER["REMOTE_ADDR"].(strstr($_SERVER["REMOTE_ADDR"],'101.226')? " FROM WeiXin": "Unknown IP"));logger("QUERY_STRING:".$_SERVER["QUERY_STRING"]);}function logger($log_content){if(isset($_SERVER['HTTP_APPNAME'])){ //SAEsae_set_display_errors(false);sae_debug($log_content);sae_set_display_errors(true);}else{ //LOCAL$max_size = 500000;$log_filename = "log.xml";if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);}}>这样,当我们提交之后,就会⽣成⼀个log.html⽂件在当前⽬录⽤浏览器直接打开填写的url,也会写⼀次⽂件。
dgbroker校验失败的一个奇怪问题(r8笔记第50天)
前几天碰到一个看起来有些奇怪的例子,今天抽空把分析过程整理了一下。
有一主一备的一套测试环境,之前环境在我手里,交给另外一个同事之后,重新搭建了dataguard,我检查了一圈,发现都没有问题,然后过了一个星期的样子,无意中再次查看的时候,发现这个备库竟然在dg broker中的状态是disable,当然我也不能看到这个现象就反问同事,说当时dataguard怎么有这种低级操作问题。
我想了想,根据我的印象,当时也确实是搭建成功了。
这些天这个主库也从来没有任何的操作,zabbix也一直没有相关的报警,这个问题引起了我的兴趣,我们来查一查。
大体的架构环境是这样的,有两台独立的测试环境,目前因为schema有一些重合,没有整合到一起,因为平时的负载极小,而且存在单点故障,就把原来的逻辑备份方式改成了dataguard。
这样我们基本就从这些逻辑备份校验中解放出来了。
因为平时负载小,使用率不高,所以就把备库都搭建到了同一个台服务器上。
这次dg broker校验出问题的是test1的主库现象就是:DGMGRL> show configuration;
Configuration - testdb_dg
Protection Mode: MaxPerformance
Databases:
sactvdb - Primary database
s2actvdb - Physical standby database (disabled)
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
当时的处理思路是尝试enable,结果抛错了。
DGMGRL> enable database s2actvdb;
Error: ORA-16631: operation requires shutdown of database or instance ''
Failed.
DGMGRL> show database verbose s2actvdb;
Database - s2actvdb
Role: PHYSICAL STANDBY
Intended State: OFFLINE
Transport Lag: (unknown)
Apply Lag: (unknown)
Real Time Query: OFF
Instance(s):
actvdb Properties:
DGConnectIdentifier = 's2actvdb'
ObserverConnectIdentifier = ''
LogXptMode = 'ASYNC'
DelayMins = '0'
Binding = 'optional'
MaxFailure = '0'
MaxConnections = '1'
...
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
SidName = 'actvdb'
StaticConnectIdentifier =
'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xx xx)(PORT=1528))(CONNECT_DATA=(SERVICE_NAME=s2a ctvdb_DGMGRL)(INSTANCE_NAME=actvdb)(SERVER=DE DICATED)))'
StandbyArchiveLocation =
'USE_DB_RECOVERY_'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.dbf' TopWaitEvents =
'(monitor)'Database Status:
SHUTDOWN
然后尝试设置备库为online
DGMGRL> edit database s2actvdb set state='ONLINE'; Error: ORA-16525: the Data Guard broker is not yet available Failed.
这个时候虽然抛错,dg broker的校验结果却发生了变化。
DGMGRL> show configuration;
Configuration - testdb_dg
Protection Mode: MaxPerformance
Databases:
sactvdb - Primary database
s2actvdb - Physical standby database
Error: ORA-16525: the Data Guard broker is not yet available
Fast-Start Failover: DISABLED
Configuration Status:
ERROR
然后折腾了一番,发现原因是log_archive_dest_state_2的值为RESET,重新置为ENABLE之后就没有问题了。
那么问题就来了,为什么这个地方的值变为了reset。
经过一番排查,发现这台服务器中的备库1在本周重启了,而且还是在nomount阶段。
当然这个问题还是很好定位,最后发现是同事搭建test2的备库的时候,无意中碰到了test1的备库,做了重启的操作。
那么就问题而言,就更奇怪了,先不说重启备库的操作失误,就技术角度而言,重启备库会直接导致
log_archive_dest_state_2为reset,到底是什么原因导致这种情况发生。
于是开始翻找日志的一些痕迹。
RESET相关的日志为:
TNS-12564: TNS:connection refused
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Tue Mar 22 17:53:59 2016
ALTER SYSTEM SET log_archive_dest_state_2='RESET' SCOPE=BOTH;
在置为RESET之前出现了网络连接问题,时间点就是备库重启的时间,看起来确实是备库重启导致的,为什么会有这个特殊的内部操作呢。
准备再次复现这个问题,但是重启之后再就没有出现这个问题。
问题虽然解决了。
但是这个问题就一直在脑海中萦绕,因为我还没有找到问题的根本原因。
为了进一步验证,我开始准备急需查看更多的日志,尝试复现这个问题。