切换前准备
1,检查DG参数配置
2,检查日志应用
3,如果是集群环境,请保留一个实例,关闭其他实例(主备库)
srvctl stop instance -d db_name -i instance_name
切换步骤
1,确认主库状态是否可以切换为备库
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO STANDBY
1 row selected
select db_unique_name,database_role, protection_mode,switchover_status from v$database;
2,主库启动切换
若数据库状态为TO STANDBY进行下一步
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
若数据库状态为session active的时候表示还有活动的session,则运行
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
若数据库状态为not allowed(包括其他状态)时,官方文档说转换会不成功
3,关闭并启动原主库到mount
SQL> SHUTDOWN ABORT;
SQL> STARTUP MOUNT;
4,验证原备库状态是否可切换为primary
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO_PRIMARY
1 row selected
如果数据库状态为TO PRIMARY or SESSIONS ACTIVE,说明可以切换,否则需要检查日志应用是否正常,查看日志传输是否工作,直到状态成为TO PRIMARY or SESSIONS ACTIVE方可切换。
5,切换原备库为主库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
如果数据库状态为TO PRIMARY,则可省略 WITH SESSION SHUTDOWN。
6,启动新主库
SQL> ALTER DATABASE OPEN;
7,启动新DG的日志应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE -
> DISCONNECT FROM SESSION;
8,检查
查看DG状态
set linesize 300
set pagesize 1000
col message for a100
select to_char(timestamp,'DD-mm-YYYY HH24:MI:SS') time,message FROM v$dataguard_status;
查看DG环境进程的状态
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
注册日志
alter database register physical logfile '/arch/归档文件名’
switchover三部曲
1,切换前数据库环境,旧金山的主库及波士顿的备库
2,切换中,两个备库
3,切换完成,主备角色转换
部分报错处理
1,ORA-01105: mount is incompatible with mounts by other instances
集群环境切换前,请关闭实例仅保留一个实例运行