本文为墨天轮数据库管理服务团队第149期技术分享,内容原创,作者为技术顾问达世德,如需转载请联系小墨(VX:modb666)并注明来源。如需查看更多文章可关注【墨天轮】公众号。
当ADG发生故障时的切换,我们称之为高烈度切换。因为这个和你的生产系统是息息相关的。
模拟故障前建立保障(强制)还原点
查看主库状态
select database_role,protection_mode,open_mode from v$database;查看数据库的归档模式及是否启用flashback database
archive log list;
select flashback_on from v$database;创建保障(强制)还原点
create restore point orcl_rest_01 guarantee flashback database;如果创建还原点有以下报错的话:
SQL> create restore point orcl_rest_01 guarantee flashback database;
create restore point orcl_rest_01 guarantee flashback database
*
ERROR at line 1:
ORA-38784: Cannot create restore point 'ORCL_REST_01'.
ORA-38786: Recovery area is not enabled.你需要创建一个数据库恢复文件目录:
创建数据库文件恢复目录
mkdir -p /u01/app/oracle/oradata/ORCL/dfa指定数据库文件恢复目录的大小(最大空间使用量)
alter system set DB_RECOVERY_FILE_DEST_SIZE=5G scope=both;在数据库中指定数据库文件恢复目录的位置(用我们刚才创建出来的那个目录)
alter system set db_recovery_file_dest='/u01/app/oracle/oradata/ORCL/dfa' scope=both;再次查看一下状态:
select flashback_on from v$database;
FLASHBACK_ON
------------------
RESTORE POINT ONLY检查备库状态
select database_role,protection_mode,open_mode from v$database;从这里开始试验:
在主库中我们直接使用shutdown abort来创造主库意外崩溃:
shutdown abort主库执行如下操作,先保证主库可已经入到mount:
startup mount从oracle 11g开始有一个新特性叫flush redo,就是说如果主库挂了,只要能mount,就可以将没传到备库的online redo log信息刷到备库去,
这样就不会有数据丢失。
alter system flush redo to 'orclsd'; --这里的是数据库唯一名称 在备库查看备库是否有gap
所谓的GAP就是当redo data 传送发生中断时就会产生redo gap。当redo传送恢复正常以后,redo transport service 会自动检测redo gap并发送缺失的redo 到destination。解决redo gap的时间与gap 的数量和网络有一定的关系。 Gap越少,网络越好,解决gap就会越快。
select thread#, low_sequence#, high_sequence# from v$archive_gap;
#######################################################如果有GAP就需要把查询出来的归档日志给发送到备库上。
比如说:
select thread#, low_sequence#, high_sequence# from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
----------- ------------- --------------
1 8 11主库查询确认一下
SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 7 AND 11;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/arch/arcr_1_8.arc
/u01/app/oracle/oradata/ORCL/arch/arcr_1_9.arc
/u01/app/oracle/oradata/ORCL/arch/arcr_1_10.arcTHREAD根据SELECT * FROM V$ARCHIVE\_GAP;这条语句定义
- DEST\_ID=1 你定义的第一个归档目录本地的那个
- BETWEEN后的值尽量用SELECT * FROM V$ARCHIVE\_GAP;得到的LOW\_SEQUENCE#的值-1
- AND后的值就是SELECT * FROM V$ARCHIVE\_GAP;得到的HIGH\_SEQUENCE#的值
然后把找到的归档发送到备库,并使用ALTER DATABASE REGISTER LOGFILE应用这些归档:
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/oradata/ORCL/arch/arcr_1_8.arc';
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/oradata/ORCL/arch/arcr_1_9.arc';
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/oradata/ORCL/arch/arcr_1_10.arc';
###########################################################备库切换成主库
在备库上发生的:
取消和停止日志应用
alter database recover managed standby database cancel;
alter database recover managed standby database finish;注意:如果主库和备库之间的网络中断了,那么备库的RFS(remote file server)进程就会等待网络的连接,直到TCP超时。此时需要加上force关键字
alter database recover managed standby database finish force;(网络没有问题就不用执行了)查看可切换状态
select open_mode, switchover_status from v$database;
OPEN_MODE SWITCHOVER_STATUS
-------------------- --------------------
READ ONLY TO PRIMARY切换成主库
alter database commit to switchover to primary with session shutdown;
select open_mode, switchover_status from v$database;
OPEN_MODE SWITCHOVER_STATUS
-------------------- --------------------
MOUNTED NOT ALLOWED尝试关闭数据库
shutdown immediate;重新启动数据库
startup检查可切换状态
select open_mode, switchover_status from v$database;
OPEN_MODE SWITCHOVER_STATUS
-------------------- --------------------
READ WRITE FAILED DESTINATION恢复主库
关闭主库
shutdown immediate重新开启主库到mount状态
startup mount;查看还原点信息
select flashback_on from v$database;
FLASHBACK_ON
------------------
RESTORE POINT ONLY使用还原点闪回还原数据库
flashback database to restore point orcl_rest_01;还原成功后可以删除该还原点,但是建议保留一会
drop restore point orcl_rest_01;切换到物理备库
alter database convert to physical standby;关闭数据库
shutdown immediate;重新打开数据库
startup开启实时日志应用
alter database recover managed standby database using current logfile disconnect from session;如果上一步你删除了还原点这里可以检查是否删除干净,没有的话以后再说
select flashback_on from v$database;
FLASHBACK_ON
------------------
NO检查主库状态
select database_role,protection_mode,open_mode from v$database;
DATABASE_ROLE PROTECTION_MODE OPEN_MODE
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM PERFORMANCE READ ONLY WITH APPLY最后别忘记再检查一下备库状态
select database_role,protection_mode,open_mode from v$database;
墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。
墨天轮数据库服务官网:https://www.modb.pro/service
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。