Data Guard实现故障自动切换(二)(r11笔记第39天)

   今天下午我的一个朋友碰到了一个Data Guard的问题,大体是主备网络出现问题,因为环境中配置了自动切换,结果备库就自动切换为了主库,这样就成了“双主”,我帮忙看了下,对备库做了闪回,然后直接转换主库为备库角色,一个看似繁琐的修复工作就完成了。

   在一个一主多备的环境中,的确需要一个强大的工具来支持,所以最后朋友说DG Broker真是个好东西,我回了句 用好了DG Broker,手工管理Data Guard就是小米加步枪啊。

   就如同我昨天文章Data Guard故障自动切换的想法(r11笔记第39天)所说,自动切换也是故障自愈的一个关键环节。而其中Oracle自带的Fast-Start
Failover就是一个相对不错的选择,如果你的环境网络层面做了统一的管理规划,只关注数据层面的自动切换,这个自带的方案其实很强悍,完全可以实现一些较为复杂的自动化切换需求。

    我们先来示范一下,看看它的好,然后说说它的限制和改进之处。

首先就是DG Broker最基础的两个命令了。

第一个命令是创建配置,添加主节点

DGMGRL> create configuration dg_dataguru as
>  primary database is dataguru
>  connect identifier is dataguru;
Configuration "dg_dataguru" created with primary database "dataguru"启用一下配置

DGMGRL> enable configuration;
第二个命令是添加备库节点

DGMGRL> add database sdataguru as
>  connect identifier is sdataguru
>  maintained as physical;
Database "sdataguru" added
DGMGRL> enable database sdataguru
Enabled.剩下的命令都主要是围绕这两个命令来服务的,查看一下配置成功后的信息情况。

DGMGRL> show configuration;
Configuration - dg_dataguru
  Protection Mode: MaxPerformance
  Databases:
    dataguru  - Primary database
    sdataguru - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS正如红色字体标识的,目前的主备是在最大性能模式下,我看很多文章说要配置Fast-Start Failover需要在最大高可用模式下,这是错误的,实际上在最大性能模式和最大高可用模式下均可。
   如果要开启Fast-Start Failover,单单使用enable选项是不够的。

DGMGRL> enable fast_start failover;
Error: ORA-16651: requirements not met for enabling fast-start failover
Failed查看oerr ora 16651你会看到一屏幕的提示信息,把要点都说全了。我点几个主要的点

1.主备库需要开启闪回数据库

主库开启在open状态下即可,非常方便,至于为什么主库需要开启,主要是作为reinstate来铺垫的,是故障自愈的一个环节。

SQL> alter database flashback on;
Database altered.

备库开启闪回数据库略有不同,大体步骤如下:

SQL> recover managed standby database cancel;
Media recovery complete.
SQL> alter database flashback on;
Database altered.
SQL> recover managed standby database disconnect from session;
Media recovery complete.   --最后的步骤或者使用enable database的方式也可以2.主备库的网络配置
这个其实根据我的了解,绝大多数的系统中都是会忽略掉这个配置,因为对于基本的Switchover,Failover来说也够用了,所以有的同学也会偷懒不配置了。

一个简单的listener.ora的配置如下:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = newtest.oracle.com)(PORT = 1521))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =  
 (SID_DESC =
      (GLOBAL_DBNAME = dataguru)
      (ORACLE_HOME = /U01/app/oracle/product/11.2.0.4)
      (SID_NAME = dataguru)
    )
 (SID_DESC =
      (GLOBAL_DBNAME=DATAGURU_DGMGRL)
      (ORACLE_HOME = /U01/app/oracle/product/11.2.0.4)
      (SID_NAME = dataguru)
    )
  )重点就是红色的部分,基本格式就是<DB_Unique_Name>_DGMGRL

配置后要确保监听的服务正确注册了,重启对应的监听保证服务使用无误。

备库的配置也是类似的形式,就不重复贴出了。
2.主备延迟,Failover的一些触发条件

设置数据库的切换优先级,可以配置FastStartFailoverTarget

如果我要设置数据库sdataguru的Failover对象为dataguru,就可以使用如下的命令。

edit database sdataguru set property FastStartFailoverTarget=dataguru;

如果主备的设置为最大高可用保护模式,则需要设置LogXptMode为sync

如果主备的设置为最大性能保护模式,则需要设置LogXptMode为async

启用FastStart Failover

DGMGRL> enable fast_start failover;
Enabled.
DGMGRL> start observer ;
Observer started查看状态的信息如下,有几点需要注意的就是我们可以设置Lag Limit,Observer Reconnect等属性。

DGMGRL> show fast_start failover;
Fast-Start Failover: ENABLED
  Threshold:          30 seconds
  Target:             dataguru
  Observer:           snewtest2.cyou.com
  Lag Limit:          30 seconds
  Shutdown Primary:   TRUE
  Auto-reinstate:     TRUE
  Observer Reconnect: (none)
  Observer Override:  FALSE
Configurable Failover Conditions
  Health Conditions:
    Corrupted Controlfile          YES
    Corrupted Dictionary           YES
    Inaccessible Logfile            NO
    Stuck Archiver                  NO
    Datafile Offline               YES

  Oracle Error Conditions:
    (none)

在此你可能对故障自愈没有深刻的体验,我们就来实验一下。

主库直接shutdown abort
DG Broker中的observer的日志如下:

22:36:07.60  Tuesday, January 10, 2017
Initiating Fast-Start Failover to database "sdataguru"...
Performing failover NOW, please wait...
Failover succeeded, new primary is "sdataguru"
22:36:16.52  Tuesday, January 10, 2017可以清晰的看到,是做了Failover的操作。
对于故障自愈,如果主库已经修复,可以正常启动,那么就会自动触发由主库调整为备库,也就是我们开头所说的reinstate.

我们只需要把数据库启动到mount阶段,然后静观日志变化。
22:37:34.67  Tuesday, January 10, 2017
Initiating reinstatement for database "dataguru"...
Reinstating database "dataguru", please wait...
Operation requires shutdown of instance "dataguru" on database "dataguru"
Shutting down instance "dataguru"...
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance "dataguru" on database "dataguru"
Starting instance "dataguru"...
ORACLE instance started.
Database mounted.
Continuing to reinstate database "dataguru" ...
Reinstatement of database "dataguru" succeeded
22:38:24.08  Tuesday, January 10, 2017

就这样一个看似复杂的reinstate工作就自动修复了,无需手工干预和处理。

当然你要说这个过程中还有什么特别的研制,数据库层面来说,这种方式是非常好的,可以在这个基础上去借鉴更多的有点和细节之处。

    而这个方案的一个瓶颈就在于这个完全自动化的部分,如果出现了误判的情况,可能这时候问题就会很尴尬,会导致一些数据库切换的难解问题。

   从实践的角度和通用的角度来说,我们需要定义更多的规则和逻辑。这种方式可以作为一种非常好的参考理念。

时间: 2024-10-26 00:50:54

Data Guard实现故障自动切换(二)(r11笔记第39天)的相关文章

Oracle Data Guard延迟的几个可能(r11笔记第69天)

     Oracle Data Guard中很可能出现延迟的情况,而数据一旦出现延迟就意味着丢数据.退一步来说丢数据总比数据乱了好,但是回过头来,能不丢数据但是丢了,这就有些说不过去了.     因为预防人为误操作等,可能有些环境中会特意设置一个延迟,基本就是下面的设置方法: 方法1: alter database recover managed standby database delay 120 disconnect from session;方法2: alter system set l

keepalive之mysql故障自动切换shell脚本

MySQL架构为master-slave(主从),master故障自动切换到slave上.当然也可以设置为双master,但这里有个弊端:就是当主的压力很大时,从上延时很大,比如落后2000秒,此时主挂了,从接管(VIP漂移到从),用户刚才发表的文章,此时因为同步延时大,还没复制过来,于是用户又发表了一篇文章,当原来的master修好后,因从的IO和SQL线程还在开启状态,还会继续同步刚才没有同步复制完的数据,这时有可能把用户新发表的文章更改掉,造成用户数据丢失.  考虑到这种情况,我这里还是用

Data Guard故障自动切换的想法(r11笔记第40天)

    大概在2年前,我写过一篇文章,当时也算是随感.由Gavin King的故事所做的感悟 (r4笔记第24天),年轻嘛,都是意气风发,想好好撸起袖子大干一场.     但是可能很多人都会碰到了这样一个问题,那就是在公司内造轮子的情况非常普遍,而且很多时候一个脚本,工具,系统只是适用于具体的业务,脱离了系统平台,部门之外,公司之外都无法适用.很多应用要联系具体场景,这个无可厚非,就如同一个表test,含有3个字段,里面可以存放100条应用数据,也可以存放200条,这个是根据具体业务具体对待的.

Oracle Data Guard压缩归档测试(二)(r12笔记第27天)

昨天对Data Guard的归档压缩进行了一个初步的测试,我今天又做了一些补充.    1.昨天测试的是默认50M的redo,如果redo增大,在IO bound的场景中,是否有很大的变化    2.对于归档压缩来说,数据量如果增大,是否会有较大的抖动,昨天测试的是20G的数据量,初始化了50%    3.对于整个数据初始化的过程中,主备的延迟到底有多大,是否有延迟回落的现象.    我们一个一个来做解答. 首先是redo的大小调整,我们需要设置redo大小为200M,备库的standby lo

【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置

[DATAGUARD]物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置 1.1  BLOG文档结构图       1.2  前言部分   1.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Data Guard Broker 的配置 ② Fast-Start Failover 的配置 ③ Oracle DataGuard 之客户端TAF 配置 ④ 使用DGMGRL 来管理数据库 ⑤

10秒自动切换 浪潮服务器让深交所新一代交易系统不惧风险

早在2008年,美国NMS修正法案要求建立全国统一的证券市场,在任何一个交易所挂牌上市的股票可以在其他交易所进行撮合交易于是,全球各大证券交易所开始更新交易系统,采用开放平台,打造更快速度,更低延时的证券交易系统. 面对激烈的国际竞争和国内证券市场的新需求,深交所提出了采用开放平台建设新一代交易系统的设想.经过长达8年的努力,2016年6月,深圳证券交易所(以下简称"深交所")第五代交易系统正式上线运行,这套交易系统由深交所基于开放平台自主研发,可容纳超过3亿个投资者账户,证券数量从原

数据库主备切换-Oracle Data Guard 切换数据库无成功反馈

问题描述 Oracle Data Guard 切换数据库无成功反馈 Oracle Data Guard 切换数据库 切换主库为备库输入 Alter database commit to switchover to physical standby with session shutdown; 后不出现Database altered提示 没有任何反馈信息 这是什么原因? 解决方案 http://wenku.baidu.com/link?url=SgdMwsixAP6-wPLqV99ulf6qbi

Data Guard Broker系列之二:Data Guard Broker配置实战

配置之前DG环境状态 测试的DG环境安装在同一个机器上,当前两个数据库处于同步的状态,两个实例的名字分别是TORCLA和TORCLB,数据库的名字TORCL,数据库DB_DOMAIN设置为mycompany,其他的设置如下. listener.ora设置 L_dg=    (address=         (protocol=tcp)(host=orainst.desktop.mycompany.com)(port=8000)(queuesize=32)    )log_file_L_torc

半自动化搭建Data Guard的想法和实践(二)

关于半自动化搭建Data Guard,自己花了一些时间,总算是把这件事情继续推进了一下,还是再啰嗦一句,为什么不自动化,因为安全.主库就是主库,任何变更都要手工检查审核,自动化的工作在备库和中控端来完成.我希望自己的脚本能够只知道主库的IP,不用一次又一次连过去配置和检查,当然要完成自动化还是半自动化,有些网友也提醒的极是,那就是规范和标准. 预先条件: 1.目前的设计是基于11.2.0.4的版本,当然这个很容易定制,在此是作为一个基本的标准,作为环境的初始化和Data Guard对的搭建的基线