以前做过9i DATA GUARD的SWITCHOVER,也做过10g的RAC环境到单实例的SWITCHOVER,但是9204上RAC环境到单实例DATA GUARD的SWITCHOVER还是第一次。
这个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 星期六 1月 15 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,这说明主数据库已经做好了SWITCHOVER到STANDBY数据库的准备了。
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环境工作正常。