主备切换方式:
1. switch:用户主动切换; 2. failover:主库出现故障,强行切换; switch 切换过程:先主库再备库
switchover_status值详解:
NOT ALLOWED 当前的数据库不是带有备用数据库的主数据库 PREPARING DICTIONARY 该逻辑备用数据库正在向一个主数据库和其他备用数据库发送它的重做数据,以便为切换做准备 PREPARING SWITCHOVER 接受用于切换的重做数据时,逻辑备用配置会使用它 RECOVERY NEEDED 备用数据库还没有接收到切换请求 SESSIONS ACTIVE 在主数据库中存在活动的SQL会话;在继续执行之前必须断开这些会话 SWITCHOVER PENDING 适用于那些已收到主数据库切换请求但是还没有处理该请求的备用数据库 SWITCHOVER LATENT 切换没有完成并返回到主数据库 TO LOGICAL STANDBY 主数据库已经收到了来自逻辑备用数据库的完整的字典 TO PRIMARY 该备用数据库可以转换为主数据库 TO STANDBY 该主数据库可以转换为备用数据库
一、switchover
--主库先切换,若是集群,请现先关闭其他实例,留下一个实例进行操作 --查看角色、状态 select name,database_role,switchover_status from v$database; --检查归档日志是否有中断 select status.gap_status from v$archive_dest_status where dest_id=2; --查询切换前主库的状态,状态为to standby、session active均可以切换为备库 --to standby状态切换操作 alter database commit to switchover to physical standby; --session active切换操作 alter database commit to switchover to physical standby with session shutdown; --切换完成后数据库为关闭状态,将新备库启动到mount状态 shutdown immediate; startup nomount; alter database mount standby database; --再切换备库,查询切换状态、角色 select name,database_role,switchover_status from v$database; --查询切换前主库的状态,状态为to standby、session active均可以切换为备库 --to primary状态切换操作 alter database commit to switchover to physical primary; --session active切换操作 alter database commit to switchover to physical primary with session shutdown; --调整参数文件,若主库为集群需删除集群相关参数避免打开数据库时出现报错 shutdown immediate; startup pfile='/home/oracle/initdbjgxt.ora'; create spfile from pfile;
二、Failover
--停止日志应用 alter database recover managed standby database cancel; --关闭standby日志传输 alter database recover managed standby database finish force; --切换到primary alter database commit to switchover to primary with session shutdown; --做这一步的时候,若存在gap,则会报ORA-16139:Switchover: Media recovery required - standby not in limbo 错误。 --做测试的时候,若先起主库再起备库,且未等待备库相关日志传输完毕,就会出现这个问题。此时需要强制切换 alter database activate physical standby database; --重启数据库到open状态 alter database open;
--原文地址:https://www.cnblogs.com/ss-33/p/14858063.html