原文如下,防止连接过期,拷贝出来了:
http://blog.csdn.net/lichangzai/article/details/7949222
前面的文章提到,当用grid contorl中的broker页面配置的dataguard,进行switchover切换时,只需在页面中点击“切换”按钮,主备切换操作就会自动在后台完成,方便快捷。但是当我们无法登录grid control页面,而又需要紧急进行切换时,这就是手工进行切换操作。
初始环境:
主库:oracle11gR2 RAC rac1,rac2(racdb1,racdb2)
备库:oracle11gR2单实例 single (racstd)
1.下面就是手动switchover切换的步骤及注意的问题:
假设需要在rac2实例上进行switchover操作
--在rac2上直接进行切换操作,
--报如下错误
SQL> alter database commit to switchover to standby;
alter database commit to switchover to standby
*
第 1行出现错误:
ORA-01105:装载操作与其他实例的装载操作不兼容
--查询RAC环境其它活动实例
SQL> Select Instance_Name, Host_Name From Gv$instance
2 Where Inst_Id <> (Select Instance_Number From V$instance);
INSTANCE_NAME HOST_NAME
---------------- ----------------------------------------------------------------
racdb2 rac2.localdomain
错误问题原因:
在RAC+dataguard环境手动主备切换时,主库和备库都必需只保留一个活动实例,才能完成切换操作(通过broker管理页面则不需要这步手动关闭实例操作,则在后台自动完成),所以切换前首先要关闭其它不需要切换操作的实例,切换完成后再重新启动即可。
--关闭rac1实例(racdb1)
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
--然后再回到rac2,此时进行切换操作
SQL> alter database commit to switchover to standby;
alter database commit to switchover to standby
*
第 1行出现错误:
ORA-01093: ALTER DATABASE CLOSE仅允许在没有连接会话时使用
--切换为备库操作
SQL> alter database commit to switchover to standby with session shutdown;
数据库已更改。
SQL> select name,open_mode,DATABASE_ROLE,PROTECTION_MODE from v$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE
--------- -------------------- ---------------- --------------------
RACDB READ WRITE PHYSICAL STANDBY MAXIMUM PERFORMANCE
--转换操作完成后,racdb2实例会自己关闭
SQL> shutdown immediate
ORA-01092: ORACLE instance terminated. Disconnection forced
SQL> select name,open_mode,DATABASE_ROLE,PROTECTION_MODE from v$database;
ERROR:
ORA-03114:未连接到 ORACLE
--rac2的alert日志:
Process (ospid 31592) is suspended due to switchover to physical standby operation.
Wed Sep 05 12:17:45 2012
Performing implicit shutdown abort due to switchover to physical standby
Shutting down instance (abort)
--在rac2重新启动原主库实例(racdb2)
SQL> startup
ORACLE例程已经启动。
Total System Global Area 1235959808 bytes
Fixed Size 2227904 bytes
Variable Size 922747200 bytes
Database Buffers 301989888 bytes
Redo Buffers 8994816 bytes
数据库装载完毕。
数据库已经打开。
SQL> select name,open_mode,DATABASE_ROLE,PROTECTION_MODE from v$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE
--------- -------------------- ---------------- --------------------
RACDB READ ONLY PHYSICAL STANDBY MAXIMUM PERFORMANCE
--在single racstd实例,切换为主库操作
SQL> alter database commit to switchover to primary with session shutdown;
数据库已更改。
--重新启动原备库
SQL> select name,open_mode,DATABASE_ROLE,PROTECTION_MODE from v$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE
--------- -------------------- ---------------- --------------------
RACDB MOUNTED PRIMARY MAXIMUM PERFORMANCE
SQL> shutdown immediate
ORA-01109:数据库未打开
已经卸载数据库。
ORACLE例程已经关闭。
SQL> startup mount
ORACLE例程已经启动。
Total System Global Area 1235959808 bytes
Fixed Size 2227904 bytes
Variable Size 805306688 bytes
Database Buffers 419430400 bytes
Redo Buffers 8994816 bytes
数据库装载完毕。
SQL> select name,open_mode,DATABASE_ROLE,PROTECTION_MODE from v$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE
--------- -------------------- ---------------- --------------------
RACDB MOUNTED PRIMARY MAXIMUM PERFORMANCE
SQL> alter database open;
数据库已更改。
SQL> select name,open_mode,DATABASE_ROLE,PROTECTION_MODE from v$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE
--------- -------------------- ---------------- --------------------
RACDB READ WRITE PRIMARY MAXIMUM PERFORMANCE
--在rac2打开实时应用查询功能
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
数据库已更改。
SQL> select name,open_mode,DATABASE_ROLE,PROTECTION_MODE from v$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE
--------- -------------------- ---------------- --------------------
RACDB READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE
SQL>
--最后再启动rac1实例:
SQL> startup
ORACLE例程已经启动。
Total System Global Area 1235959808 bytes
Fixed Size 2227904 bytes
Variable Size 922747200 bytes
Database Buffers 301989888 bytes
Redo Buffers 8994816 bytes
数据库装载完毕。
数据库已经打开。
SQL>
SQL> select name,open_mode,DATABASE_ROLE,PROTECTION_MODE from v$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE
--------- -------------------- ---------------- --------------------
RACDB READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE
--最后可以检查切换是否成功,可以单实例数据库端建测试表,然后在RAC数据库端查看表是否同步,不再测试。
下面这篇文章也不错,放在这里备查:
http://blog.itpub.net/26736162/viewspace-1328050/