switchover
切换:主库与备库数据同步正常情况下的切换,主要用于
主备维护、切换演练等;
failover
切换:主库与备库在数据未同步情况下的强制切换,主要用
于主库宕机、故障情况下切换;
一、switchover切换
主库与备库数据同步,且正常运行,将主库与备库的角色互换;
切换前,务必检查当前主库与备库的归档是否是同步的,确认同步后再执行切换
switchover切换 主库操作
第1步、主库停止监听
lsnrctlstop
(理论上是不需要停止主库监听的,但是实际上如果切换时数据库繁忙,还有大量会话连接操作数据库,在执行切换操作的时候需要等待oracle执行sessionshutdown,有时会很慢,这里建议直接停止监听,停止后,还可以通过查ps-ef|grep"LOCAL=NO",查看进行,LOCAL=NO是客户端连接进程,并kill-9杀掉这些没有释放的连接,再执行下面的切换)
ps-ef|grep"LOCAL=NO" | grep -v grep | awk '{print $2}' | xargs kill -9
第2步、主库执行切换
主库状态角色确认
selectswitchover_statusfromv$database;
查询结果分两种情况:
第一种情况
sql>selectswitchover_statusfromv$database;
SWITCHOVER_STATUS
--------------------
SESSIONSACTIVE
如果查询结果是SESSIONSACTIVE:执行下面的:
sql>alterdatabasecommittoswitchovertophysicalstandbyw
ithsessionshutdown;
第二种情况
sql>selectswitchover_statusfromv$database;
SWITCHOVER_STATUS
--------------------
TOSTANDBY
如果查询结果是:TOSTANDBY执行下面的:
sql>alterdatabasecommittoswitchovertophysicalstandby;
第3步、关闭主库
sql>shutdownimmediate
ORA-01507:databasenotmounted
ORACLEinstanceshutdown.
第4步、主库启动到mount状态
sql>startupmount
ORACLEinstancestarted.
TotalSystemGlobalArea9646899200bytes
FixedSize2087000bytes
VariableSize822085544bytes
DatabaseBuffers8808038400bytes
RedoBuffers14688256bytes
Databasemounted.
第5步、主库确定切换后的状态
sql>selectopen_mode,database_role,switchover_statusfromv$database;
OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS
----------------------------------------------------------
------------------------
MOUNTEDPHYSICALSTANDBYSESSIONSACTIVE
数据库角色变成了PHYSICALSTANDBY(物理备库),完成了主库的角色转换;
第6步、主库启动监听
lsnrctlstart
switchover切换备库操作
备库执行切换为主库模式
第1步、备库状态角色确认
sql>selectswitchover_statusfromv$database;
第一种情况
sql>selectswitchover_statusfromv$database;
SWITCHOVER_STATUS
--------------------
TOPRIMARY
如果状态为TOPRIMARY则执行下面的语句:
sql>alterdatabasecommittoswitchovertoprimary;
第二种情况
sql>selectswitchover_statusfromv$database;
SWITCHOVER_STATUS
---------------------------------
SESSIONSACTIVE
如果状态是SESSIONSACTIVE则执行下面的语句:
alterdatabasecommittoswitchovertoprimarywithsessionshutdown;
第2步、备库打开
alterdatabaSEOpen;
第3步、备库状态角色确认
sql>selectopen_mode,switchover_statusfromv$database;
OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS
----------------------------------------------------------
--------------------------
READWRITEPRIMARY
SESSIONSACTIVE
第4步、原主库启动同步
在原主库上执行:
sql>ALTER DATABASE OPEN;
sql>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
switchover切换完成;