oracle dg主备切换
出现主备切换一般两种原因,一是做主、备库维护,需要用户手动去切换,而是主库发生了故障,需要强行去切换。
1.查看库状态
v$database Switchover_Status 值的含义
NOT ALLOWED 当前的数据库不是带有备用数据库的主数据库
PREPARING DICTIONARY 该逻辑备用数据库正在向一个主数据库和其他备用数据库发送它的重做数据,以便为切换做准备
PREPARING SWITCHOVER 接受用于切换的重做数据时,逻辑备用配置会使用它
RECOVERY NEEDED 备用数据库还没有接收到切换请求
SESSIONS ACTIVE 在主数据库中存在活动的SQL会话;在继续执行之前必须断开这些会话
SWITCHOVER PENDING 适用于那些已收到主数据库切换请求但是还没有处理该请求的备用数据库
SWITCHOVER LATENT 切换没有完成并返回到主数据库
TO LOGICAL STANDBY 主数据库已经收到了来自逻辑备用数据库的完整的字典
TO PRIMARY 该备用数据库可以转换为主数据库
TO STANDBY 该主数据库可以转换为备用数据库
2.switch:用户主动切换;
2.1:查看主库状态
select database_role, switchover_status from v$database;
如果是to standby:
alter database commit to switchover to physical standby;
其他:(等待会话断开,也可以主动去kill掉这些会话)
alter database commit to switchover to physical standby with session shutdown;
2.2:重启主库(现在是备库身份了)
shutdown immediate;
startup nomount;
alter database mount standby database;
alter database open read only;
alter database recover managed standby database using current logfile disconnect;
2.3:查看备库状态(原本是NOT ALLOWED,主库改备库后,会自动变成TO PRIMARY)
select database_role, switchover_status from v$database;
如果是to primary:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
其他:(等待会话断开,也可以主动去kill掉这些会话)
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
2.4:重启备库(现在是主库身份了)
shutdown immediate;
startup;
3.failover:主库出现故障,强行切换(备库操作,主库坏了)
3.1:模拟主库宕掉
shutdown abort;
3.2:备库停止日志应用
alter database recover managed standby database cancel;
//关闭日志传输
alter database recover managed standby database finish force;
3.3:查看备库状态
//此时应该是TO PRIMARY
select switchover_status from v$database;
3.4:备库切换到主库
alter database commit to switchover to primary with session shutdown;
//这里如果存在gap,会报ORA-16139,需要强制切换
alter database activate physical standby database;
3.5:开启新主库
alter database open;
//查看新主库状态
select open_mode,database_role,switchover_status from v$database;