Oracle DG Switchover 切换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leo__1990/article/details/91402455

     在做DG switchover 切换 之前做好备份,以防止在切换失败可以进行数据库恢复。

1 查看主库switchover 状态

如果是 TO STANDBY 或者 SESSION ACTIVE,表示主库可以切换成备库。

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE

2 将主库切换成备库

SQL> Alter database commit to switchover to physical standby with session shutdown;

Database altered.

3 关闭原主库

SQL> shutdown abort
ORACLE instance shut down.

4 查看原备库 switchover 
这里如果是TO PRIMARY 或者session active,表明备库可以切换成主库。

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

5 将原备库切换成主库,然后关闭

SQL> alter database recover managed standby database cancel;

Database altered.

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown;

Database altered.

SQL> shutdown immediate
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.

6 启动新备库。 这里的启动顺序不能错,先启动备库,在启动主库,不然主库识别不了备库。

SQL> startup
ORACLE instance started.

Total System Global Area 1043886080 bytes
Fixed Size		    2259840 bytes
Variable Size		  889193600 bytes
Database Buffers	  146800640 bytes
Redo Buffers		    5632000 bytes
Database mounted.
Database opened.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Database altered.

7 启动新主库

SQL> startup
ORACLE instance started.

Total System Global Area 1043886080 bytes
Fixed Size		    2259840 bytes
Variable Size		  889193600 bytes
Database Buffers	  146800640 bytes
Redo Buffers		    5632000 bytes
Database mounted.
Database opened.

SQL> alter system switch logfile;

System altered.

8 在新主库查看log_archive_dest 参数的状态,是否有效。

因为这里与监听和启动顺序有关,如果值为error,则归档不能传送到备库。
 

SQL> select status,database_mode from v$archive_dest_status;

STATUS	  DATABASE_MODE
--------- ---------------
VALID	  OPEN

Status状态为valid即可。 如果有错误,一般都是启动顺序和监听问题。 如果启动顺序没有问题,那么就把主库重新启动一下。
9 验证同步状态

SQL> alter system switch logfile;

System altered.

后在新主备库分别运行:select sequence#,applied from v$archived_log; 
确保applied都为YES。

如果用:select max(sequence#) from v$archived_log; 

SQL> select sequence#,applied from v$archived_log; 

 SEQUENCE# APPLIED
---------- ---------
	 9 YES

如果用:select max(sequence#) from v$archived_log;

SQL> select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------
	    57

查看,如果主备库显示的一致,则只能表明归档已经传送到了备库,并不能表明该归档已经应用。 而applied 状态为YES,就表明该归档已经应用到了备库。
如果主库库显示不一致可以尝试使用alter system switch logfile; 切换使之达到一致
如果等了很长时间applied 都无法应用,可以尝试一下方法:
alter database recover managed standby database cancel; 
alter database recover managed standby database disconnect from session; 
这2个语句是取消recover manager,在启动它。 
通过以上步,switchover 切换完成。 

猜你喜欢

转载自blog.csdn.net/leo__1990/article/details/91402455