Fast-Start Failover
基本概念
Fast-Start Failover是建立在broker基础上的一个快速故障转换的机制,通过fast-start failover可以自动检测primary的故障,然后自动的failover到预先指定的standby上面,这样可以最大化的减少故障时间,提高数 据库的可用性。
结构
Fast-Start Failover是在broker的基础上再增加了一个单独的observer,用来监控primary和standby数据库的状态,一旦primary不可用,observer就会自动的切换到指定的standby上面。
准备工作
- 确保broker配置为运行在Max Availability模式。
- 在primary和standby机器上都启用flashback database,这个在reinstate failed的数据库的时候要用。
- 在运行observer的机器上安装DGMGRL工具,用于启动observer。
- 配置tnsname.ora文件,保证observer能正常的连接到primary和standby数据库上面。
配置及启用Fast-Start Failover
在满足上面的条件之后在经过下面少许的配置就可以启用Fast-Start Failover了。
- 配置每个数据库Failover的目标,这一步是决定当数据库出问题之后会自动failover到那个standby。
edit database torcla set property ' FastStartFailoverTarget ' = ' torclb ' ;
-- 配置torclb failover的目标
edit database torclb set property ' FastStartFailoverTarget ' = ' torcla ' ;
- 设定FastStartFailoverThreshold值,这个设置是决定了primary坏了多长时间之后会执行自动的failover操作,这里我们设置的是30s。
- 启用Fast-Start Failover。
Enabled .
- 启动observer。
$ dgmgrl sys / 12345 @ torcla . mycompany
DGMGRL for Linux : Version 10.2.0.2.0 - Production
Copyright ( c ) 2000 , 2005 , Oracle . All rights reserved .
Welcome to DGMGRL , type " help " for information .
Connected .
DGMGRL > start observer ;
observer started
- 现在可以看看我们环境的状态了。
Configuration
Name : FSF
Enabled : YES
Protection Mode : MaxAvailability
Fast - Start Failover : ENABLED
Databases :
torcla - Primary database
torclb - Physical standby database
- Fast - Start Failover target
Fast - Start Failover
Threshold : 30 seconds
observer : orainst . desktop . mycompany . com
Current status for " FSF " :
SUCCESS
Fast-Start Failover的管理
Fast-Start Failover的工作过程
在启用了fast-start failover和observer之后,broker会来监控primary和standby数据库的状态,一旦primary数据库出现故障,observer会根据一定的程序来执行自动的failover操作。
- 当发生下列情形是observer会尝试启动failover操作
- observer和primary数据库之间连接出现故障时
- 当primary数据库故障或者是RAC环境中所有instance都故障时
- 执行SHUTDOWN ABORT之后,特别注意正常的SHUTDOWN操作(NORMAL,IMMEDIATE,TRANSACTIONAL)不会引发failover操作
- 数据库文件OFFLINE
除了最后一个数据库文件OFFLINE的情形,其他的情况下observer都会尝试在FastStartFailoverThreshold制定的时间之内重新连接数据库,如果还是无法连接之后才会执行自动failover操作。
- 在FastStartFailoverThreshold指定的时间内重新连接数据库,在RAC环境中会尝试连接其他的instance。
- 尝试时间结束后,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正在进行时
- 执行failover操作,使目标standby变成新的primary。
- reinstate之前失败的primary
下面来个实际的failover例子.
先看看当前的primary,确定是torcla
Configuration
Name : FSF
Enabled : YES
Protection Mode : MaxAvailability
Fast - Start Failover : ENABLED
Databases :
torcla - Primary database
torclb - Physical standby database
- Fast - Start Failover target
Current status for " FSF " :
SUCCESS
然后登录到torcla上,执行一个SHUTDOWN ABORT命令
ORACLE instance shut down .
然后在observer里面我们可以看到自动failover了
observer started
06 : 08 : 24.47 Tuesday , September 01 , 2009
Initiating fast - start failover to database " torclb " ...
Performing failover NOW , please wait ...
Failover succeeded , new primary is " torclb "
06 : 08 : 33.49 Tuesday , September 01 , 2009
再看此时的状态,primary已经换成torclb了,不过此时torcla是不可用的
Configuration
Name : FSF
Enabled : YES
Protection Mode : MaxAvailability
Fast - Start Failover : ENABLED
Databases :
torcla - Physical standby database ( disabled )
- Fast - Start Failover target
torclb - Primary database
Current status for " FSF " :
Warning : ORA - 16608 : one or more databases have warnings
再将torcla启动到mount,接着就能看到observer会自动的reinstate torcla
observer started
06 : 11 : 13.45 Tuesday , September 01 , 2009
Initiating reinstatement for database " torcla " ...
Reinstating database " torcla " , please wait ...
Operation requires shutdown of instance " torcla " on database " torcla "
Shutting down instance " torcla " ...
ORA - 01109 : database not open
Database dismounted .
ORACLE instance shut down .
Operation requires startup of instance " torcla " on database " torcla "
Starting instance " torcla " ...
ORACLE instance started .
Database mounted .
Continuing to reinstate database " torcla " ...
Reinstatement of database " torcla " succeeded
06 : 12 : 20.07 Tuesday , September 01 , 2009
查看Fast-Start Failover状态
通过SHOW CONFIGURATION VERBOSE命令可以查看Fast-Start Failover的基本运行状态
Configuration
Name : FSF
Enabled : YES
Protection Mode : MaxAvailability
Fast - Start Failover : ENABLED
Databases :
torcla - Primary database
torclb - Physical standby database
- Fast - Start Failover target
Fast - Start Failover
Threshold : 30 seconds
observer : orainst . desktop . mycompany . com
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 @ torclb > col FS_FAILOVER_CURRENT_TARGET for a10
SYS @ torclb > col FS_FAILOVER_THRESHOLD for 999
SYS @ torclb > col FS_FAILOVER_observer_PRESENT for a4
SYS @ torclb > col FS_FAILOVER_observer_HOST for a30
SYS @ torclb > 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_FAILOVER_CURRENT_TARGET FS_FAILOVER_THRESHOLD FS_FAILOVER_observer_PRESENT FS_FAILOVER_observer_HOST
----------------------- -- ---------- --------------------- ---- ------------------------------
SYNCHRONIZED torclb 30 YES orainst . desktop . mycompany . com
禁用Fast-Start Failover
禁用Fast-Start Failover的命令为
加上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将会收到这样的消息
要停止一个observer的话只需要用DGMGRL连接到数据库,然后执行STOP OBSERVER命令就行了。
要确定一个数据库是否在observer的监视中必须要去查看V$DATABASE视图中的 FS_FAILOVER_OBSERVER_PRESENT和FS_FAILOVER_OBSERVER_HOST。只有当 FS_FAILOVER_OBSERVER_PRESENT为YES的时候才说明这个数据库时处于observer的监控之中。
同时数据库是否有observer监视这个信息我们也可以从DGMGRL中查看到
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参数指定配置文 件的位置,命令如下
参考至:http://www.dbabeta.com/2009/learn-data-guard-broker_fast-start-failover.html
如有错误,欢迎指正
邮箱:czmcj@163.com