暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle | Data Guard Broker 实战及管理(五)

数据库实用技能 2021-04-19
1229




Oracle Dg Broker Fast-Start Failover配置与应用管理


      基本概念

       Fast-Start Failover是建立在broker基础上的一个快速故障转换的机制,通过fast-start failover可以自动检测primary的故障,然后自动的failover到预先指定的standby上面,这样可以最大化的减少故障时间,提高数据库的可用性。Fast-Start Failover是在broker的基础上再增加了一个单独的observer,用来监控primary和standby数据库的状态,一旦primary不可用,observer就会自动的切换到指定的standby上面。

简单的说是当primary数据库down掉后,它会自动地快速执行切换standby数据库为primary数据库操作。

       那么何时会发生fast-start failover呢,据官方文档介绍,当数据库以正常模式(shutdown immediate、shutdown normal、shutdown transactional)关闭时,系统不会触发fast-start failover的。下面的过程是使用shutdown abort关闭primary数据库的,所以这个操作触发了fast-start failover。在这里会用到observer,observer是用来监控primary数据库是否可用,当主库不可用时,系统会执行快速切换standby数据库为primary数据库。

官方建议observer不能与primary和standby数据库位于同一台主机,在另一台观察机器observer 上安装DGMGRL。就是安装一个Oracle 的客户端。 并在observer machine上配置相关的参数。包括配置监听, 使这台机器能访问主备库的实例。 然后通过这个observer来判断主备库的状态。 如果主库出现问了,那么observer 就会切换主备库。 放在另一台机器的原因也很明显,如果放在主库上,如果主库系统崩溃了,那么Observer也就失效了。

     准备工作

  1. 确保broker配置为运行在Max Availability模式。

        最高可用性(Maximum availability):这种模式在不影响Primary数据库可用前提下,提供最高级别的数据保护策略。其实现方式与最大保护模式类似,也是要求本地事务在提交前必须至少写入一台Standby数据库的Standby Redologs中,不过与最大保护模式不同的是,如果出现故障导致Standby数据库无法访问,Primary数据库并不会被Shutdown,而是自动转为最高性能模式,等Standby数据库恢复正常之后,Primary数据库又会自动转换成最高可用性模式。

Maximum protection/AVAILABILITY模式必须满足以下条件:

(1)Redo Archival Process: LGWR

(2)Network Tranmission mode: SYNC

(3)Disk Write Option: AFFIRM

(4)Standby Redo Logs: Yes

(5)standby database type: Physical Only

        即Standby Database 必须配置Standby Redo Log,而Primary Database必须使用LGWR,SYNC,AFFIRM 方式归档到Standby Database; 如:

SQL> alter system set log_archive_dest_2='service=stoms lgwr sync AFFIRM';

注意: 主库的保护模式修改之后,备库的模式也会改变,和主库保持一致。

在此对LGWR 进程的SYNC 方式做下说明:

(1)Primary Database 产生的Redo 日志要同时写道日志文件和网络。也就是说LGWR进程把日志写到本地日志文件的同时还要发送给本地的LNSn进程(Network Server Process),再由LNSn(LGWR Network Server process)进程把日志通过网络发送给远程的目的地,每个远程目的地对应一个LNS进程,多个LNS进程能够并行工作。

(2)LGWR 必须等待写入本地日志文件操作和通过LNSn进程的网络传送都成功,Primary Database 上的事务才能提交,这也是SYNC的含义所在。

(3)Standby Database的RFS进程把接收到的日志写入到Standby Redo Log日志中。

(4) Primary Database的日志切换也会触发Standby Database 上的日志切换,即Standby Database 对Standby Redo Log的归档,然后触发Standby Database 的MRP或者LSP 进程恢复归档日志。因为Primary Database 的Redo 是实时传递的,于是Standby Database 端可以使用两种恢复方法:

实时恢复(Real-Time Apply): 只要RFS把日志写入Standby Redo Log 就会立即进行恢复;

归档恢复: 在完成对Standby Redo Log 归档才触发恢复。

Primary Database默认使用ARCH进程,如果使用LGWR进程必须明确指定。使用LGWR SYNC方式时,可以同时使用NET_TIMEOUT参数,这个参数单位是秒,代表如果多长时间内网络发送没有响应,LGWR 进程会抛出错误。如:

alter system set log_archive_dest_2 = 'SERVICE=STOMS LGWR SYNC NET_TIMEOUT=30' scope=both;


  1. 在primary和standby机器上都启用flashback database,这个在reinstate failed的数据库的时候要用。(必须)

  2. 在运行observer的机器上安装DGMGRL工具,用于启动observer。

  3. 配置tnsname.ora文件,保证observer能正常的连接到primary和standby数据库上面。

    配置及启用Fast-Start Failover



  1. 在primary和standby数据库启用flashback

 将Primary设置为flashback:(主库上操作)

SQL> select name, current_scn, flashback_on from v$database;

NAME CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

OMS 130215396 NO

SQL> alter database flashback on;

数据库已更改。

SQL> select name, current_scn, flashback_on from v$database;

NAME CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

OMS 130218094 YES

SQL> show parameter DB_FLASHBACK_RETENTION_TARGET;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_flashback_retention_target integer 1440

SQL>

       将standby设置为flashback:

       在standby数据库上打开flashback之前,要先将standby数据库的intended state的状态更改为apply-off,primary数据库上不用操作。

GMGRL> show database stoms;

数据库 - stoms

角色: PHYSICAL STANDBY

预期状态: APPLY-ON

传输滞后: 0 seconds

应用滞后: 0 seconds

实时查询: OFF

实例:

oms

数据库状态:

SUCCESS

DGMGRL> edit database 'stoms' set state='apply-off';

SUCCESS

GMGRL> show database stoms;

数据库 - stoms

角色: PHYSICAL STANDBY

预期状态: APPLY-OFF

传输滞后: 0 seconds

应用滞后: 04seconds

实时查询: OFF

实例:

oms

数据库状态:

SUCCESS

在备库上操作:

SQL> select name, current_scn, flashback_on from v$database;

NAME CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

OMS 130215396 NO

备库:需要先取消recover 进程,不然会报错

SQL>ALTER DATABASE FLASHBACK ON;

ORA-01153: an incompatible media recovery is active

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> alter database flashback on;

数据库已更改。

SQL> select name, current_scn, flashback_on from v$database;

NAME CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

OMS 130218094 YES

打开flashback之后,要将standby数据库的intended state的状态更改为apply-on。

DGMGRL> edit database 'stoms' set state='apply-on';

SUCCESS

GMGRL> show database stoms;

数据库 - stoms

角色: PHYSICAL STANDBY

预期状态: APPLY-ON

传输滞后: 0 seconds

应用滞后: 2 minutes 25 seconds

实时查询: OFF

实例:

oms

数据库状态:

SUCCESS

2、配置每个数据库Failover的目标,这一步是决定当数据库出问题之后会自动failover到那个standby。

DGMGRL> edit database oms set property 'FastStartFailoverTarget'='stoms';

已更新属性 "FastStartFailoverTarget"

DGMGRL> edit database stoms set property 'FastStartFailoverTarget'='oms';

已更新属性 "FastStartFailoverTarget"

DGMGRL>

3、配置和启用observer

首先创建一个observer.log文件,里面包含了系统切换信息:

[@oms ~]$ dgmgrl -logfile ./observer.log

DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production

Copyright (c) 2000, 2009, Oracle. All rights reserved.

欢迎使用 DGMGRL, 要获取有关信息请键入 "help"。

DGMGRL> connect

已连接。

DGMGRL> show configuration;

配置 - dg_oms

保护模式: MaxPerformance

数据库:

oms - 主数据库

stoms - 物理备用数据库

快速启动故障转移: DISABLED

配置状态:

SUCCESS

查看fast_start failover的状态:

DGMGRL> show fast_start failover;

快速启动故障转移: DISABLED

阈值: 30 秒

目标: (无)

观察程序: (无)

滞后限制: 30 秒

关闭主数据库: TRUE

自动恢复: TRUE

可配置的故障转移条件

健康状况:

Corrupted Controlfile YES

Corrupted Dictionary YES

Inaccessible Logfile NO

Stuck Archiver NO

Datafile Offline YES

Oracle 错误条件:

(无)

DGMGRL>

启用fast_start failover和启动observer:

DGMGRL> enable fast_start failover;

Enabled.

DGMGRL> start observer;

observer started

DGMGRL>

现在可以通过tail –f observer.log查看observer的日志信息,可以看到observer started.

查看fast_start failover是否已经启用成功:

DGMGRL> show fast_start failover;

快速启动故障转移: DISABLED

阈值: 30 秒

目标: stoms

观察程序: oms

滞后限制: 30 秒

关闭主数据库: TRUE

自动恢复: TRUE

可配置的故障转移条件

健康状况:

Corrupted Controlfile YES

Corrupted Dictionary YES

Inaccessible Logfile NO

Stuck Archiver NO

Datafile Offline YES

Oracle 错误条件:

(无)

DGMGRL> show configuration verbose

Configuration
Name: FSF
Enabled: YES
Protection Mode: MaxAvailability
Fast-Start Failover: ENABLED
Databases:
oms - Primary database
stoms - Physical standby database
- Fast-Start Failover target

Fast-Start Failover
Threshold: 30 seconds
observer: orainst.desktop.mycompany.com

Current status for "FSF":
SUCCESS

也可用通过查询v$database视图,获取有关observer的信息.官方有如下解释:

如果observer不存在,会是如下结果:

如果observer启动失败,会产生以下ORA错误信息:

至此,fast_start_failover配置完成。

Fast-Start Failover管理测试



      在启用了fast-start failover和observer之后,broker会来监控primary和standby数据库的状态,一旦primary数据库出现故障,observer会根据一定的程序来执行自动的failover操作。

  1. 当发生下列情形是observer会尝试启动failover操作

  • observer和primary数据库之间连接出现故障时

  • 当primary数据库故障或者是RAC环境中所有instance都故障时

  • 执行SHUTDOWN ABORT之后,特别注意正常的SHUTDOWN操作(NORMAL,IMMEDIATE,TRANSACTIONAL)不会引发failover操作

  • 数据库文件OFFLINE。除了最后一个数据库文件OFFLINE的情形,其他的情况下observer都会尝试在FastStartFailoverThreshold制定的时间之内重新连接数据库,如果还是无法连接之后才会执行自动failover操作。

   2、在FastStartFailoverThreshold指定的时间内重新连接数据库,在RAC环境中会尝试连接其他的instance。

   3、尝试时间结束后,observer将确定目标standby可用。下面的这些情形会导致failover失败

  • fast-start failover没有启用

  • observer无法连接到standby数据库

  • standby与observer中记录的状态不一致

  • observer在primary fail的时候正好没有运行,再次启动之后只能找到一个standby

  • 目标standby没有和primary完成同步

  • 目标standby是逻辑standby时,在V$DATABASE中显示LOADING DICTIONARY时

  • 目标standby还能和primary正常通讯时

  • 在V$DATABASE的列FS_FAILOVER_STATUS中显示了其他无法进行failover操作时

  • 有手工failover正在进行时

  4、执行failover操作,使目标standby变成新的primary。

  5、reinstate之前失败的primary


Fast-Start Failover具体测试过程



先看看当前的primary,确定是oms

DGMGRL> show configuration

Configuration
        Name: FSF
        Enabled: YES
        Protection Mode: MaxAvailability
        Fast-Start Failover: ENABLED
        Databases:
        oms - Primary database
        stoms - Physical standby database
        - Fast-Start Failover target
        Current status for "FSF":
        SUCCESS

        然后登录到oms上,执行一个SHUTDOWN ABORT命令

[@oms ~]$ sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 5月 15 17:05:32 2012

Copyright (c) 1982, 2009, Oracle. All rights reserved.

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>shutdown abort

ORACLE instance shut down

       然后在observer里面可以看到自动failover了

DGMGRL> start observer;

observer started

17:08:24.47 Tuesday, September 01, 2012

Initiating fast-start failover to database "stoms"...

Performing failover NOW, please wait...

Failover succeeded, new primary is "stoms"

17:09:33.49 Tuesday, September 05, 2012

      再看此时的状态,primary已经换成stms了,不过此时oms是不可用的

DGMGRL> show configuration

Configuration

Name: FSF

Enabled: YES

Protection Mode: MaxAvailability

Fast-Start Failover: ENABLED

Databases:

oms - Physical standby database (disabled)

- Fast-Start Failover target

stoms - Primary database

Current status for "FSF":
        Warning: ORA-16608: one or more databases have warnings

       再将oms启动到mount,接着就能看到observer会自动的reinstate oms

       DGMGRL> start observer;

       observer started
       17:11:13.45 Tuesday, September 05, 2012

        Initiating reinstatement for database "oms"...

Reinstating database "oms", please wait...
        Operation requires shutdown of instance "oms" on database "oms"
        Shutting down instance "oms"...
        ORA-01109: database not open

         Database dismounted.
         ORACLE instance shut down.
        Operation requires startup of instance "oms" on database "oms"
       Starting instance "oms"...
       ORACLE instance started.
       Database mounted.
       Continuing to reinstate database "oms" ...
        Reinstatement of database "oms" succeeded
        17:12:20.07 Tuesday, September 05, 2012


查看Fast-Start Failover状态



       通过SHOW CONFIGURATION VERBOSE命令可以查看Fast-Start Failover的基本运行状态

       DGMGRL> SHOW CONFIGURATION VERBOSE

       Configuration
       Name: FSF
       Enabled: YES
        Protection Mode: MaxAvailability
        Fast-Start Failover: ENABLED
        Databases:
         oms - Primary database
        stoms - Physical standby database
        - Fast-Start Failover target

        Fast-Start Failover
       Threshold: 30 seconds
       observer:

        Current status for "FSF":
         SUCCESS

       要查看Fast-Start Failover更多的信息就要查看V$DATABASE视图中的相关的列了。

以下对参数说明:

FS_FAILOVER_STATUS

这个列显示了Fast-Start Failover的状态,通过查看这个列可以知道数据库时处于什么状态之中,详细的状态信息在这里。

FS_FAILOVER_CURRENT_TARGET

当前数据库的failover的目标数据库

FS_FAILOVER_THRESHOLD

执行自动failover的时间超时值

FS_FAILOVER_observer_PRESENT

是否启动了observer,通过查看这个列可以知道是否有observer在监控着这个数据库

FS_FAILOVER_observer_HOST

监控此数据库的observer所在的位置

SYS@stoms>select FS_FAILOVER_STATUS,FS_FAILOVER_CURRENT_TARGET, FS_FAILOVER_THRESHOLD,FS_FAILOVER_observer_PRESENT, FS_FAILOVER_observer_HOST from v$database;

FS_FAILOVER_STATUS FS_FAILOVE FS_FAILOVER_THRESHOLD FS_F FS_FAILOVER_observer_HOST
------------------------- ---------- --------------------- ---- ------------------------------
SYNCHRONIZED stoms 30 YES stoms

禁用Fast-Start Failover



       禁用Fast-Start Failover的命令为

 DISABLE FAST_START FAILOVER [FORCE]

加上FORCE之后将会强行在执行DISABLE命令的数据库以及这个数据库可连通的其他数据库上面上禁用Fast-Start Failover,而其他无法连接上的数据库将保持原来的状态;不加FROCE时如果有那个数据库暂时无法连接的话那么DISABLE操作将会失败。所以在当primary和standby数据库的网络连接良好的情况下要使用不带FORCE的命令。

通常需要使用FORCE的情形如下:

  • 当因为网络问题造成primary无法和observer及那些已完成同步的standby通讯时,primary将会停止工作,如果primary的恢复时间可期,且想要primary继续工作的话就需要使用FORCE选项暂时在primary上禁用fast-start failover,不过之前一定要检查看数据库有没有自动failover。

  • 当primary和standby没有完成同步的时候想要手工的执行failover的命令,在fast-start failover启用的时候是无法执行的,这时候也需要使用FORCE选项强行禁用fast-start failover。

  • 在fast-start failover失败之后还想将数据库failover到其他可用的standby上时也需要先使用FORCE强制禁用fast-start failover然后在手工进行failover操作。

  • 如果确定有问题的primary可以很快的恢复,此时不想让fast-start failover自动failover,也可以使用FORCE选项强行禁用fast-start failover。

Observer管理



启用observer的操作很简单,使用DGMGRL连接到数据库,然后执行START OBSERVER命令就行了。要启动observer的话必须使用SYS连接到DGMGRL,同一时间只能启动一个observer,如果尝试启动多个observer将会收到这样的消息

ORA-16647: could not start more than one observer

要停止一个observer的话只需要用DGMGRL连接到数据库,然后执行STOP OBSERVER命令就行了。

要确定一个数据库是否在observer的监视中必须要去查看V$DATABASE视图中的FS_FAILOVER_OBSERVER_PRESENT和FS_FAILOVER_OBSERVER_HOST。只有当FS_FAILOVER_OBSERVER_PRESENT为YES的时候才说明这个数据库时处于observer的监控之中。

       同时数据库是否有observer监视这个信息也可以从DGMGRL中查看到:

         DGMGRL> show database oms statusreport
         STATUS REPORT

         INSTANCE_NAME SEVERITY ERROR_TEXT

         ERROR ORA-16820: Fast-Start Failover observer is no longer observing this          database

         在启动observer的时候,observer会自动的在当前目录中生成一个默认名字为fsfo.dat的二进制文件,这个文件里面保存了fast-start failover的配置信息,同时也包含了到primary和standby的连接方式。也可以在启动observer的时候使用FILE参数指定配置文件的位置,命令如下:

         START OBSERVER [FILE=<observer configuration file>];

        至此,整个fast_start failover配置过程结束。某些具体参数的意义请参考官方文档。


 

文章转载自数据库实用技能,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论