dataguard手动switchover切换步骤及注意的问题 转

原文如下,防止连接过期,拷贝出来了:

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

 

--rac2alert日志:

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/

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