如下文章是根据“做之前要想好,做的时候不要再想”的原则基础上总结出来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 |
转载于:https://blog.51cto.com/xiaoliutolaoliu/1340832