转自:RAC和Dataguard环境下主备库切换演练模板


如下文章是根据“做之前要想好,做的时候不要再想”原则基础上总结出来RAC+DataGuard切换模板。因为根据个人经验,在切换过程中如果遇到什么异常,有时紧张得脑子都不转的感觉。因此有必要提前写好自己熟悉一点实施方案。

具体环境如下:

数据库版:Oracle 10g,数据库名rac

节点1实例名:rac1IP: 192.168.1.2

节点2实例名:rac2IP: 192.168.1.3

灾备中心备库实例名:racIP:192.168.1.6

生产库( 主库)切换为备用库

序号

操作步骤

IP

用户名

服务或进程

1

DATA GUARD环境是否正常

192.168.1.2

192.168.1.6

oracle

1. 在执行SWITCHOVER操作前,首先确认DATA GUARD环境工作是否正常。

1.1 常规检查包括:

a) 检查主库上V$ARCHIVE_DEST视图

SELECT * FROM V$ARCHIVE_DEST;

b) 检查备库上V$MANAGED_STANDBY视图

SELECT * FROM V$MANAGED_STANDBY;

c) 检查主库和备库上的V$ARCHIVED_LOG视图

SELECT * FROM V$ARCHIVED_LOG;

d) 检查主库和备库对应的alert告警日志中是否存在错误。

2. 如果DATA GUARD环境正常,就需要进行SWITCHOVER切换前的常规检查:

2.1确认主库和备库间网络连接通畅;(可以通过ping、ftp等系统工具检查)

2.2确认没有活动的会话连接在数据库中;(登录数据库查询V$SESSION视图,检查是否存在USERNAME IS NULL的会话)

SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL;

3. PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;(检查V$DATABASE视图的OPEN_MODE)

SELECT SWITCHOVER_STATUS FROM V$DATABASE;

4. 确保STANDBY数据库处于ARCHIVELOG模式;(检查V$DATABASE视图的LOG_MODE)

SELECT LOG_MODE FROM V$DATABASE;

2

关闭节点数据库节点实例2

192.168.1.3

oracle

> srvctl stop instance -d rac -i rac2

3

登Primary数据库节点1

切换预备操作

192.168.1.2

oracle

查询会话切换状态:

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

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

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS

------------------

TO STANDBY

4

登Primary数据库节点1

进行切换

192.168.1.2

oracle

执行主库的SWITCHOVER切换操作,然后关闭数据库,启动到NOMOUNT状态。

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

SQL> shutdown immediate

SQL> startup nomount




oracle

SQL> alter database mount;

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS

------------------

TO PRIMARY

5

登录STANDBY数据库

192.168.1.6

oracle

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

OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS

---------- ---------------- ----------------MOUNTEDPHYSICAL STANDBY TO PRIMARY





SQL> alter database commit to switchover to primary;

Database altered.





SQL> shutdown immediate





SQL> startup

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

OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS

---------- ---------------- ----------------READ WRITE PRIMARYTO STANDBY

6

登陆原Primary数据库节点1

192.168.1.2

oracle

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



切回生产库(主库)


序号

操作步骤

IP

用户名

服务或进程

1

DATA GUARD环境是否正常

192.168.1.6

192.168.1.2

oracle

1. 在执行SWITCHOVER操作前,首先确认DATA GUARD环境工作是否正常。

1.1 常规检查包括:

a) 检查主库上V$ARCHIVE_DEST视图

SELECT * FROM V$ARCHIVE_DEST;

b) 检查备库上V$MANAGED_STANDBY视图

SELECT * FROM V$MANAGED_STANDBY;

c) 检查主库和备库上的V$ARCHIVED_LOG视图

SELECT * FROM V$ARCHIVED_LOG;

d) 检查主库和备库对应的alert告警日志中是否存在错误。

2. 如果DATA GUARD环境正常,就需要进行SWITCHOVER切换前的常规检查:

2.1确认主库和备库间网络连接通畅;(可以通过ping、ftp等系统工具检查)

2.2确认没有活动的会话连接在数据库中;(登录数据库查询V$SESSION视图,检查是否存在USERNAME IS NULL的会话)

SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL;

3. PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;(检查V$DATABASE视图的OPEN_MODE)

SELECT SWITCHOVER_STATUS FROM V$DATABASE;

4. 确保STANDBY数据库处于ARCHIVELOG模式;(检查V$DATABASE视图的LOG_MODE)

SELECT LOG_MODE FROM V$DATABASE;

3

登Primary数据库

切换预备操作

192.168.1.6

oracle

查询会话切换状态:

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

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

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS

------------------

TO STANDBY

4

登Primary数据库

进行切换

192.168.1.6

oracle

执行主库的SWITCHOVER切换操作,然后关闭数据库,启动到NOMOUNT状态。

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

SQL> shutdown immediate

SQL> startup nomount




oracle

SQL> alter database mount;

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS

------------------

TO PRIMARY

5

登录STANDBY数据库

192.168.1.2

oracle

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

OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS

---------- ---------------- ----------------MOUNTEDPHYSICAL STANDBY TO PRIMARY





SQL> alter database commit to switchover to primary;

Database altered.





SQL> shutdown immediate





SQL> startup

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

OPEN_MODEDATABASE_ROLESWITCHOVER_STATUS

---------- ---------------- ----------------READ WRITE PRIMARYTO STANDBY

6

登录Primary数据库

192.168.1.6

oracle

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

7

启动数据库节点实例2

192.168.1.3

oracle

$ srvctl start instance -d rac -i rac2