dg broker校验失败的一个奇怪问题(二)

对昨天提出的问题做了一个简单的分析和排查,也算是有了一个交代,上一篇文章在 dg broker校验失败的一个奇怪问题 http://blog.itpub.net/23718752/viewspace-2064499/
我查看了最近的日志,发现在半个月以前有一行日志引起了我的注意。
Thu Mar 03 17:32:12 2016
ALTER SYSTEM SET log_archive_dest_state_2='DEFER' SCOPE=BOTH;
关于这个DEFER的设置,让我想起了之前的一个设置。
原来的主库发生了硬件电源故障,启用备用电源之后,勉强撑了几个小时,因为数据库之前使用的异机逻辑备份,恢复起来还是需要些时间,直接就找了台机器搭建了dataguard,然后做了switchover,把数据库迁移到了新的服务器上,然后在新的备库上又搭建了一套相应的dataguard环境,在搭建新的dataguard之前,原有存在电源故障的机器还是可用,但是因为硬件已经过保,就直接做了服务器退还。为了防止后续的归档检查失败,就设置了log_archive-dest_state_2=DEFER,搭建dataguard成功之后,就把服务器从dg broker里删除了。

所以从这个不起眼的过程来看,log_archive_dest_state有了三个状态的切换,defer,reset,enable
我们能不能简单复现一下这个问题,答案是肯定的。而且可以直接用这套环境来模拟一下。
首先dg broker检查没有任何问题。
DGMGRL> show configuration
Configuration - testdb_dg
  Protection Mode: MaxPerformance
  Databases:
    sactvdb  - Primary database
    s2actvdb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
我们在主库设置归档路径状态为defer
SQL> ALTER SYSTEM SET log_archive_dest_state_2=DEFER;
System altered.
这个时候如果再次检查,dg broker就是下面的状态了。
DGMGRL> show configuration;
Configuration - testdb_dg
  Protection Mode: MaxPerformance
  Databases:
    sactvdb  - Primary database
      Error: ORA-16764: redo transport service to a standby database is not running
    s2actvdb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
ERROR
然后我们把备库停掉。来看看主库的变化。
可以从主库日志看到下面的信息,自defer的日志之后,开始有了一些网络的检查,失败几次之后,在日志最后做了一个reset的操作。
ALTER SYSTEM SET log_archive_dest_state_2='DEFER' SCOPE=BOTH;
Sat Mar 26 20:35:54 2016
***********************************************************************
Fatal NI connect error 12528, connecting to:
 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx)(PORT=1528)))(CONNECT_DATA=(SERVICE_NAME=s2actvdb_DGB)(CID=(PROGRAM=oracle)(HOST=testdb2.test.com)(USER=oracle))))

  VERSION INFORMATION:
        TNS for Linux: Version 11.2.0.3.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.3.0 - Production
  Time: 26-MAR-2016 20:35:54
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12564
    
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
***********************************************************************
Fatal NI connect error 12528, connecting to:
 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.127.130.58)(PORT=1528)))(CONNECT_DATA=(SERVICE_NAME=s2actvdb_DGB)(CID=(PROGRAM=oracle)(HOST=testdb2.test.com)(USER=oracle))))

  VERSION INFORMATION:
        TNS for Linux: Version 11.2.0.3.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.3.0 - Production
  Time: 26-MAR-2016 20:35:54
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12564
    
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
***********************************************************************
。。。
LNS: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (3135)
LNS: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
Error 3135 for archive log file 2 to 's2actvdb'
Errors in file /U01/app/oracle/diag/rdbms/sactvdb/actvdb/trace/actvdb_nsa2_20231.trc:
ORA-03135: connection lost contact
LNS: Failed to archive log 2 thread 1 sequence 10137 (3135)
Sat Mar 26 20:36:04 2016

***********************************************************************
。。。
    
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
Sat Mar 26 20:36:04 2016
ALTER SYSTEM SET log_archive_dest_state_2='RESET' SCOPE=BOTH;  

然后重启备库到open状态,稍作等待,检查dg broker的状态,一切显示就正常了。
DGMGRL> show configuration;
Configuration - testdb_dg
  Protection Mode: MaxPerformance
  Databases:
    sactvdb  - Primary database
    s2actvdb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
可以看到这个问题看起来比较清楚了,归档路径从defer变为了reset,然后变为了enable.
那么这个问题不设置defer,是否会出现reset的操作呢,能否复现,可以简单再测试一下。
再次停掉备库,然后查看主库的日志如下:
Fatal NI connect error 12514, connecting to:
 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.127.130.58)(PORT=1528)))(CONNECT_DATA=(SERVICE_NAME=s2actvdb_DGB)(CID=(PROGRAM=oracle)(HOST=testdb2.test.com)(USER=oracle))))

  VERSION INFORMATION:
        TNS for Linux: Version 11.2.0.3.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.3.0 - Production
  Time: 26-MAR-2016 20:41:48
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12564
    
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
Sat Mar 26 20:41:48 2016
ALTER SYSTEM SET log_archive_dest_state_2='RESET' SCOPE=BOTH;
可以看到,日志末尾会有reset的字样,所以说和之前的defer是没有直接关系,dg broker的配置下,这是一个状态的自动变化。
那么备库停掉之后,再次重启是否会有dg broker中备库为disable的状态呢。
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
可以简单复现问题,那就是备库在nomount状态,11g环境中,mount,open状态下都没有此类问题,也是因为这个时候备库的RFS,MRP可以正常工作。
复现过程如下:
重启备库到nomount状态
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
启动备库到mount
DGMGRL> show configuration;
Configuration - testdb_dg
  Protection Mode: MaxPerformance
  Databases:
    sactvdb  - Primary database
    s2actvdb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
所以通过以上的测试复现,可以看到这个问题其实不奇怪,备库重启,但是备库在nomount阶段导致了这个奇怪的现象,但是对于dataguard而言,归档路径的状态有defer,reset,enable几种情况,可能会以reset为一个临界点来做转换。

时间: 2024-09-17 17:22:29

dg broker校验失败的一个奇怪问题(二)的相关文章

dg broker校验失败的一个奇怪问题

前几天碰到一个看起来有些奇怪的例子,今天抽空把分析过程整理了一下. 有一主一备的一套测试环境,之前环境在我手里,交给另外一个同事之后,重新搭建了dataguard,我检查了一圈,发现都没有问题,然后过了一个星期的样子,无意中再次查看的时候,发现这个备库竟然在dg broker中的状态是disable,当然我也不能看到这个现象就反问同事,说当时dataguard怎么有这种低级操作问题.我想了想,根据我的印象,当时也确实是搭建成功了.这些天这个主库也从来没有任何的操作,zabbix也一直没有相关的报

我遇到一个奇怪的问题,php代码里面凡是含有//这样的注释,include 失败

问题描述 我遇到一个奇怪的问题,php代码里面凡是含有//这样的注释,include 失败 我遇到一个奇怪的问题,php代码里面凡是含有//这样的注释,就无法include 我是二次开发的,服务器上面原来的程序带//注释的就没有问题 但是我从服务器上面下载的代码到本地,所有的程序,导入eclipse后,每一行下面都会带一个空行 后来我把//的注释换成/*** /这样的就好了 下面是我贴出来的phpinfo信息,望大神指导 PHP Version 5.5.25 System Linux iZ238

mvc-Asp.net MVC3 一个奇怪问题,求大神们帮忙

问题描述 Asp.net MVC3 一个奇怪问题,求大神们帮忙 想在controller中访问一个外部链接,代码如下:接收到的url为www.baidu.com public ActionResult RedirectToUrl(string url) { if(url == null) { return HttpNotFound(); } return Redirect(url); } 结果肯定是失败了...求问有什么办法解决...

三星s3f9454烧写时‘数据校验’失败?检查芯片但不为空

问题描述 三星s3f9454烧写时'数据校验'失败?检查芯片但不为空 三星s3f9454烧写时'数据校验'失败?检查芯片但不为空,说明芯片连接烧录器完好吧.用keil编写的hex文件,跟烧写的文件没有关系吧?我用别人做的hex文件也是一样 解决方案 个人感觉是不是芯片的问题呢,换一个芯片试试,或者是烧写器问题,先一步一步排除!

destoon会员注册提示“数据校验失败(2)”解决方法_php实例

很多人在使用destoon建立一个B2B系统的时候,会在企业站注册企业用户的时候出现:"数据校验失败(2)"的错误提示,严重影响用户的使用.现将解决方法公布如下: 从destoon的后台进入module/member/register.inc.php 在register.inc.php文件中找到: if($submit){ 将其下的 if($action != crypt_action('register')) dalert($L['check_sign'].'(1)'); 注释掉:

struts2校验失败后,数据不存在的问题

问题描述 example: 有一个表单A中的<s:select>的list数据来自action B的list属性,但当表单A提交至action C校验失败后返回表单A所在的页面,此时会因为list数据不存在而报错,请问有什么方法可以解决这个问题呢? 解决方案 可以在Action中实现prepare方法,将list数据获取写在prepare方法中.你也可以用Ajax获取list解决方案二:可以在表单的页面中做个判断,是否为空为空就显示请选择,不为空就让list的数据显示例如:<tr>

配置dg broker的问题分析及修复

最近从同事那儿接手了一套新环境,备库因为服务器问题已经下架,重新配了一台服务器,所以需要搭一套备库,主库已经配置好了,而且同事已经把在主库把dg broker配好了. 使用dgmgrl来验证,只有主库孤零零的在那儿. DGMGRL> show configuration; Configuration - dg_test   Protection Mode: MaxPerformance   Databases:     stest  - Primary database Fast-Start F

dg broker配置的问题及分析

今天在配置一个备库的时候碰到了一些问题,话说配置dg broker真没什么特别需要注意的细节了,本身已经给DBA省了很大的事儿了. 但是有时候就是会出现一些稀奇古怪的小问题.这个环境又非常重要,备库已经因为硬件故障报废了,现在刚搭的备库就想赶紧把它跑起来. 简单添加配置之后,spfile,防火墙,端口,listener等等因素都满足了.感觉就是一蹴而就的事情了. 但是show configuration的时候就是报错. DGMGRL> show configuration; Configurat

聊聊Data Guard中的DG Broker

    DG Broker是Oracle为Data Guard维护提供的一个很不错的工具,从我的实际使用来看,早期的版本中似乎大家都还是存在一定的思维定式,认为手工维护已经足够了.这个工具就不那么需要了,我们完全可以脱离开这些工具来直观的使用命令行的方式来维护,这个观点也没错,不过从与时俱进的角度来看,本来能够让你更轻松的一个工具,如果不用实在是太可惜了.     DG Broker在数据库端需要启用一个后台进程dmon来维护,这个后台进程启动,需要设置dg_broker_start为true即