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

前几天碰到一个看起来有些奇怪的例子,今天抽空把分析过程整理了一下。
有一主一备的一套测试环境,之前环境在我手里,交给另外一个同事之后,重新搭建了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=xxxx)(PORT=1528))(CONNECT_DATA=(SERVICE_NAME=s2actvdb_DGMGRL)(INSTANCE_NAME=actvdb)(SERVER=DEDICATED)))'
    StandbyArchiveLocation          = 'USE_DB_RECOVERY_FILE_DEST'
    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之前出现了网络连接问题,时间点就是备库重启的时间,看起来确实是备库重启导致的,为什么会有这个特殊的内部操作呢。
准备再次复现这个问题,但是重启之后再就没有出现这个问题。
问题虽然解决了,但是这个问题就一直在脑海中萦绕,因为我还没有找到问题的根本原因。为了进一步验证,我开始准备急需查看更多的日志,尝试复现这个问题。

时间: 2024-09-21 03:24:03

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

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的设置,让我想起了之前的一

我遇到一个奇怪的问题,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即