您的位置:首页 > 大数据 > 人工智能

Fast-Start Failover工作过程及实例

2016-04-25 18:23 375 查看
Fast-StartFailover工作过程及实例在启用了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 FSFO实例:--查看当前状态DGMGRL> show configuration 配置 - htdb1 保护模式: MaxAvailability 数据库: htdb1 - 主数据库 htdb2 - (*) 物理备用数据库 htdb3 - 物理备用数据库 快速启动故障转移: ENABLED 配置状态:SUCCESS --然后登录到主库htdb1上,执行一个SHUTDOWN ABORT命令SQL> shutdown abortORACLE 例程已经关闭。 --然后在前面htdb2启动observer的会话里面我们可以看到自动failover信息了DGMGRL> start observer观察程序已启动 --在前面开启的会话里会一直停在这里……15:39:40.14 2011年9月30日 星期五正在为数据库 "htdb2" 启动快速启动故障转移...立即执行故障转移, 请稍候...故障转移成功, 新的主数据库为 "htdb2"15:40:18.15 2011年9月30日 星期五…… --再看下状态,主库变成了htdb2,htdb1是禁用状态DGMGRL> show configuration verbose 配置 - htdb1 保护模式: MaxAvailability 数据库: htdb2 - 主数据库 警告: ORA-16817:快速启动故障转移配置不同步 htdb1 - (*) 物理备用数据库 (禁用) ORA-16661: 需要恢复备用数据库 htdb3 - 物理备用数据库 (*) 快速启动故障转移目标 属性: FastStartFailoverThreshold = '30' OperationTimeout = '30' FastStartFailoverLagLimit = '30' CommunicationTimeout = '180' FastStartFailoverAutoReinstate = 'TRUE' FastStartFailoverPmyShutdown = 'TRUE' BystandersFollowRoleChange = 'ALL' 快速启动故障转移: ENABLED 阈值: 30 秒 目标: htdb1 观察程序: hotel02 滞后限制: 30 秒 (未使用) 关闭主数据库: TRUE 自动恢复: TRUE 配置状态:WARNING --启动htdb1到mount状态,SQL> startup mountORACLE 例程已经启动。 Total System Global Area 2438529024 bytesFixedSize 2228920 bytesVariableSize 1828719944 bytesDatabaseBuffers 587202560 bytesRedoBuffers 20377600 bytes数据库装载完毕。 --此时再观察前面htdb2启动observer的会话的信息DGMGRL> start observer观察程序已启动 15:39:40.14 2011年9月30日 星期五正在为数据库 "htdb2" 启动快速启动故障转移...立即执行故障转移, 请稍候...故障转移成功, 新的主数据库为 "htdb2"15:40:18.15 2011年9月30日 星期五 --下面是mount htdb1时observer会话的信息15:54:24.50 2011年9月30日 星期五正在为数据库 "htdb1" 启动恢复过程...正在恢复数据库 "htdb1", 请稍候...操作要求关闭实例 "htdb1" (在数据库 "htdb1" 上)正在关闭实例 "htdb1"...ORA-01109: 数据库未打开 已经卸载数据库。ORACLE 例程已经关闭。操作要求启动实例 "htdb1" (在数据库 "htdb1" 上)正在启动实例 "htdb1"...无法连接到数据库ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 失败。警告: 您不再连接到 ORACLE。 请完成以下步骤并重新发出 REINSTATE 命令: 启动并装载实例 "htdb1"(属于数据库"htdb1") 15:55:04.92 2011年9月30日 星期五 --再次启动htdb1到mount状态SQL> startup mountORACLE 例程已经启动。 Total System Global Area 2438529024 bytesFixedSize 2228920 bytesVariableSize 1828719944 bytesDatabaseBuffers 587202560 bytesRedoBuffers 20377600 bytes数据库装载完毕。 --执行reinstate操作(在htdb2上)DGMGRL> reinstate database htdb1正在恢复数据库 "htdb1", 请稍候...已成功恢复数据库 "htdb1" --查看状态已经成功failoverDGMGRL> show configuration verbose配置 - htdb1 保护模式: MaxAvailability 数据库: htdb2 - 主数据库 htdb1 - (*) 物理备用数据库 htdb3 - 物理备用数据库 (*) 快速启动故障转移目标 属性: FastStartFailoverThreshold = '30' OperationTimeout = '30' FastStartFailoverLagLimit = '30' CommunicationTimeout = '180' FastStartFailoverAutoReinstate = 'TRUE' FastStartFailoverPmyShutdown = 'TRUE' BystandersFollowRoleChange = 'ALL'快速启动故障转移: ENABLED 阈值: 30 秒 目标: htdb1 观察程序: hotel02 滞后限制: 30 秒 (未使用) 关闭主数据库: TRUE 自动恢复: TRUE配置状态:SUCCESS --DG管理页面状态 查看Fast-StartFailover状态通过SHOW CONFIGURATION VERBOSE命令可以查看Fast-Start Failover的基本运行状态DGMGRL> show configuration verbose 配置 - htdb1 保护模式: MaxAvailability 数据库: htdb1 - 主数据库 htdb2 - (*) 物理备用数据库 htdb3 - 物理备用数据库 (*) 快速启动故障转移目标 属性: FastStartFailoverThreshold = '30' OperationTimeout = '30' FastStartFailoverLagLimit = '30' CommunicationTimeout = '180' FastStartFailoverAutoReinstate = 'TRUE' FastStartFailoverPmyShutdown = 'TRUE' BystandersFollowRoleChange = 'ALL' 快速启动故障转移: ENABLED 阈值: 30 秒 目标: htdb2 观察程序: hotel02 滞后限制: 30 秒 (未使用) 关闭主数据库: TRUE 自动恢复: TRUE 配置状态: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所在的位置

禁用Fast-StartFailover

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

通常需要使用FORCE的情形

Ø 当因为网络问题造成primary无法和observer及那些已完成同步的standby通讯时,primary将会停止工作,如果primary的恢复时间可期,且想要primary继续工作的话就需要使用FORCE选项暂时在primary上禁用fast-startfailover,不过之前一定要检查看数据库有没有自动failover。
Ø 当primary和standby没有完成同步的时候想要手工的执行failover的命令,在fast-startfailover启用的时候是无法执行的,这时候也需要使用FORCE选项强行禁用fast-startfailover。
Ø 在fast-startfailover失败之后还想将数据库failover到其他可用的standby上时也需要先使用FORCE强制禁用fast-startfailover然后在手工进行failover操作。
Ø 如果确定有问题的primary可以很快的恢复,此时不想让fast-startfailover自动failover,也可以使用FORCE选项强行禁用fast-startfailover。

Observer管理

启用observer的操作很简单,使用DGMGRL连接到数据库,然后执行STARTOBSERVER命令就行了。

要启动observer的话必须使用SYS连接到DGMGRL,同一时间只能启动一个observer,如果尝试启动多个observer将会收到这样的消息

ORA-16647:could not start more than one observer
要停止一个observer的话只需要用DGMGRL连接到数据库,然后执行STOPOBSERVER命令就行了。

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

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

DGMGRL>show database htdb2 statusreportSTATUSREPORT INSTANCE_NAME SEVERITY ERROR_TEXT * ERROR ORA-16820: 快速启动故障转移观察程序不再对此数据库进行观察
在启动observer的时候,observer会自动的在当前目录中生成一个默认名字为fsfo.dat的二进制文件,这个文件里面保存了fast-startfailover的配置信息,同时也包含了到primary和standby的连接方式。也可以在启动observer的时候使用FILE参数指定配置文件的位置,命令如下

STARTOBSERVER [FILE=<observerconfigurationfile>];--内容如下
[oracle@hotel01~]$ ls -l fsfo.dat-rw-------1 oracle oinstall 322 09-30 15:07 fsfo.dat[oracle@hotel01~]$ cat fsfo.datvE懑_贪#htdb1htdb2t(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hotel01)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=htdb1)(SERVER=DEDICATED)))t(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hotel02)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=htdb2)(SERVER=DEDICATED)))vE懑_贪
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: