DG的主备角色转换分为:Switchover和Failover。Switchover适用于某些场合,需要将备库转为主库,Failover则是在主库故障无法使用情况下,将备库提升为主库。
大致步骤为主库先转换为备库,在此阶段可能看到原先的主备皆为备库状态,然后再将原备库设置为主库
--standby redo log数量应等于redo数量 +1
select * from v$standby_log
--SWITCHOVER_STATUS转换状态:to standby和session active(有会话连接),这两种状态可以转换
select NAME,DATABASE_ROLE,SWITCHOVER_STATUS from v$database;
--dest_id:1主库 2备库
select STATUS, GAP_STATUS from v$archive_dest_status t where DEST_ID = 2;
alter database commit to switchover to physical standby;
--当有会话连接的情况下,执行上面命令会失败,需要用这一条
alter database commit to switchover to physical standby with session shutdown;
startup;
--检查当前数据库状态,此时应看到已经是read only,且是PHYSICAL STANDBY状态
select open_mode,database_role from v$database;
--开启实时应用
alter database recover managed standby database using current logfile disconnect;
--同主库一样,SWITCHOVER_STATUS是to primary或session active就可以切换
select NAME,DATABASE_ROLE,SWITCHOVER_STATUS from v$database;
alter database commit to switchover to primary;
alter database commit to switchover to primary with session shutdown;
alter database recover managed standby database cancel;
alter database recover managed standby database finish force;
--主备之间有gap的情况下,使用上一条语句可能会不成功,则需要执行这条语句
alter database active physical standby database;
alter database commit to switchover to primary with session shutdown;
shutdown immediate
select open_mode,database_role from v$database;
简单讲就是可以将备库置于可读写的模式,可以用于模拟上线测试等,测试完成可以再切回备库模式,测试阶段产生的数据以及做的修改都会还原回去。
需要注意的是:
操作步骤:
快照数据库需要快速恢复区来存储一些信息
--先设置db_recovery_file_dest_size,再设置db_recovery_file_dest,提前创建好路径
alter system set db_recovery_file_dest_size=5g;
alter system set db_recovery_file_dest='/oracle/flash';
alter database recover managed standby database cancel;
--设置后数据库会变成mount状态,
alter database convert to snapshot standby;
alter database open
select open_mode,database_role from v$database;
--关闭备库并置于mount状态
shutdown immediate
startup mount
--执行命令
alter database convert to physical standby;
shutdown immediate
startup
--实时应用,现在查看之前操作过的数据都变回修改前了
alter database recover managed standby database using current logfile disconnect