9204RAC到单实例的SWITCHOVER切换

以前做过9i DATA GUARDSWITCHOVER,也做过10gRAC环境到单实例的SWITCHOVER,但是9204RAC环境到单实例DATA GUARDSWITCHOVER还是第一次。

 

 

这个9204上的RAC环境到单实例的STANDBY环境是我前一段时间搭建的,RAC到单实例的DATA GUARD环境配置其实和普通的DATA GUARD环境区别不是很大。

而对于9204RAC环境到单实例的SWITCHOVER而言,和以往记录的SWITCHOVER都有明显的区别,因此简单记录一下步骤。

首先仍然是进行DATA GUARD的物理STANDBY切换前的常规检查:

确认主库和备库间网络连接通畅;

确认没有活动的会话连接在数据库中;

PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;

确保STANDBY数据库处于ARCHIVELOG模式;

如果设置了REDO应用的延迟,那么将这个设置去掉;

确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。

对于RAC环境而言,还需要注意,需要关闭其他节点,在切换过程中仅保留一个实例。

登录节点2服务器,关闭数据库实例:

[oracle@db2 ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on 星期六 115 09:58:10 2011

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

下面登录节点1服务器:

SQL> select count(*) from v$session;

  COUNT(*)
----------
       303

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1545149056 bytes
Fixed Size                   453248 bytes
Variable Size             704643072 bytes
Database Buffers          838860800 bytes
Redo Buffers                1191936 bytes
Database mounted.
Database opened.
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------
SESSIONS ACTIVE

SQL> select count(*) from v$session where username is not null;
  COUNT(*)
----------
        12

SQL> select username, program from v$session where username is not null;

USERNAME                       PROGRAM
------------------------------ ------------------------------------------------
SYS                            sqlplus@db1 (TNS V1-V3)

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------
TO STANDBY

由于数据库中存在大量的会话,为了快速的关闭所有的会话选择了关闭数据库并重新启动。

如果数据库中除了当前会话外,还有其他的非系统的活动会话,数据库的SWITCHOVER_STATUS列的值是SESSION_ACTIVE,而如果除了当前连接外,数据库中已经没有非系统活动会话,数据库的SWITCHOVER_STATUS状态会变为TO STANDBY,这说明主数据库已经做好了SWITCHOVERSTANDBY数据库的准备了。

SQL> alter database commit to switchover to physical standby;

Database altered.

SQL> shutdown immediate
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.

Total System Global Area 1545149056 bytes
Fixed Size                   453248 bytes
Variable Size             704643072 bytes
Database Buffers          838860800 bytes
Redo Buffers                1191936 bytes
SQL> alter database mount standby database;

Database altered.

SQL> select switchover_status from v$database;

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

执行主库的SWITCHOVER切换操作,然后启动到NOMOUNT状态,利用ALTER DATABAE MOUNT STANDBY DATABASE命令加载数据库,检查数据库的切换状态,这时数据库已经处于STANDBY角色,因此切换状态变为TO PRIMARY

下面登录原STANDBY数据库:

执行切换到主库的操作:

SQL> select open_mode, database_role, switchover_status from v$database;

OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
---------- ---------------- ------------------
MOUNTED    PHYSICAL STANDBY TO PRIMARY

SQL> alter database commit to switchover to primary;

Database altered.

SQL> shutdown immediate
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1545149056 bytes
Fixed Size                   453248 bytes
Variable Size             704643072 bytes
Database Buffers          838860800 bytes
Redo Buffers                1191936 bytes
Database mounted.
Database opened.
SQL> select open_mode, database_role, switchover_status from v$database;

OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
---------- ---------------- ------------------
READ WRITE PRIMARY          TO STANDBY

检查数据库的切换状态,数据库状态为TO PRIMARY,说明STANDBY数据库做好了切换到主库的准备,如果这里的状态是SWITCHOVER PENDING,说明备库接收到了SWITCHOVER切换的命令,但是还没有作出处理,这多半是由于数据库没有处于应用日志的状态,执行ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION语句后,正常情况下,数据库将会处于TO PRIMARY状态。

执行SWITCHOVER到主库的操作,然后需要关闭数据库。这和10g有所区别,在10g中这时主库就可以直接打开了,但是9i必须关闭数据库然后重新启动。之所以先shutdown immediate然后shutdown abort,是因为9i这种状态下可能实例无法完全关闭,当然也可以直接使用shutdown abort来关闭实例。

重启后数据库处于PRIMARY角色。

下面登录原来的主库也就是新的备库,将数据库恢复打开:

SQL> alter database recover managed standby database disconnect from session;

Database altered.

最后检查DATA GUARD应用日志是否正常,检查alert文件是否存在错误,确认SWITCHOVER操作后,DATA GUARD环境工作正常。

 

请使用浏览器的分享功能分享到微信等