利用STANDBY将单实例数据库升级为RAC环境(三)

利用OracleSTANDBY技术,可以将单实例数据库升级到RAC数据库。这种方式可以有效的降低单实例迁移到RAC环境的停机时间。

这篇文章描述单实例环境与RAC环境的SWITCHOVER过程。

利用STANDBY将单实例数据库升级为RAC环境(一):http://yangtingkun.itpub.net/post/468/494736

利用STANDBY将单实例数据库升级为RAC环境(二):http://yangtingkun.itpub.net/post/468/494766

 

 

前面已经成功搭建了单实例数据库TEST11GRAC环境STANDBY数据库TEST11GRSTANDBY数据库的两个实例可以同时以READ ONLY方式启动。

下面为了执行SWITCHOVER操作,可以先关闭实例2

bash-3.00$ export ORACLE_SID=test11gr2
bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期五 7 17 19:44:11 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;

INSTANCE_NAME    STATUS
---------------- ------------
test11gr2        OPEN

SQL> SELECT INSTANCE_NAME, STATUS FROM GV$INSTANCE;

INSTANCE_NAME    STATUS
---------------- ------------
test11gr2        OPEN
test11gr1        OPEN

SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE
例程已经关闭。
SQL> EXIT
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
断开

回到节点1上,将数据库置于RECOVER状态,确保应用最新的归档数据:

SQL> alter database close;

数据库已更改。

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

数据库已更改。

SQL> select pid, status, client_process, group#, resetlog_id, thread#, sequence#
  2  from v$managed_standby;

       PID STATUS       CLIENT_P GROUP#     RESETLOG_ID    THREAD#  SEQUENCE#
---------- ------------ -------- ---------- ----------- ---------- ----------
     13916 CONNECTED    ARCH     N/A                  0          0          0
     13918 CONNECTED    ARCH     N/A                  0          0          0
     13920 CONNECTED    ARCH     N/A                  0          0          0
     13922 CONNECTED    ARCH     N/A                  0          0          0
       476 WAIT_FOR_GAP N/A      N/A          683602501          1        159
     16679 IDLE         UNKNOWN  N/A                  0          0          0
     16689 IDLE         UNKNOWN  N/A                  0          0          0
     16691 IDLE         UNKNOWN  N/A                  0          0          0

已选择8行。

检查主库的归档情况。

SQL> select name, dest_id, thread#, sequence#, creator
  2  from v$archived_log
  3  where sequence# = 158;

NAME                                                   DEST_ID   THREAD#  SEQUENCE# CREATOR
----------------------------------------------------- -------- --------- ---------- -------
/data/oradata/test11g/archivelog/1_158_683602501.dbf         1         1        158 ARCH
TEST11GR                                                     2         1        158 ARCH

确认主库和备库归档应用已经同步。

在进行DATA GUARD的物理STANDBY切换前需要注意:

确认主库和从库间网络连接通畅;

确认没有活动的会话连接在数据库中;

PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;

确保STANDBY数据库处于ARCHIVELOG模式;

如果设置了REDO应用的延迟,那么将这个设置去掉;

确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。

由于RAC环境STANDBYSWITCHOVER时,很容易由于设置DB_RECOVERY_FILE_DEST导致bug的出现,具体描述可以参考:

SWITCHOVER RAC数据库出现ORA-600(kcctrdf_2)错误:http://yangtingkun.itpub.net/post/468/418311

因此在STANDBY数据库建立初始化参数文件的时候就没有加载DB_RECOVERY_FILE_DEST等参数,这里将主库的相应参数也去掉:

SQL> show parameter db_recovery_file_dest

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest                string                 /data/oracle/flash_recovery_area
db_recovery_file_dest_size           big integer            4G
SQL> alter system reset db_recovery_file_dest scope = spfile;

系统已更改。

SQL> alter system reset db_recovery_file_dest_size scope = spfile;

系统已更改。

下面关闭主数据库,断开所有的连接,确保重新启动后,没有业务会话连接到数据库上:

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE
例程已经关闭。
SQL> startup
ORACLE
例程已经启动。

Total System Global Area 5279498240 bytes
Fixed Size                  2094528 bytes
Variable Size            3192597056 bytes
Database Buffers         2080374784 bytes
Redo Buffers                4431872 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter db_recovery_file_dest

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest                string
db_recovery_file_dest_size           big integer            0

SQL> select name, db_unique_name, database_role, switchover_status
  2  from v$database;

NAME       DB_UNIQUE_ DATABASE_ROLE   SWITCHOVER_STATUS
---------- ---------- --------------- ----------------------------------------
TEST11G    TEST11G    PRIMARY         TO STANDBY

数据库处于TO STANDBY状态,下面执行SWITCHOVER操作:

SQL> alter database commit to switchover to physical standby;

数据库已更改。

SQL> shutdown immediate
ORA-01507:
未装载数据库


ORACLE
例程已经关闭。
SQL> startup mount
ORACLE
例程已经启动。

Total System Global Area 5279498240 bytes
Fixed Size                  2094528 bytes
Variable Size            3192597056 bytes
Database Buffers         2080374784 bytes
Redo Buffers                4431872 bytes
数据库装载完毕。
SQL> select name, db_unique_name, database_role, switchover_status
  2  from v$database;

NAME       DB_UNIQUE_ DATABASE_ROLE        SWITCHOVER_STATUS
---------- ---------- -------------------- ----------------------------------------
TEST11G    TEST11G    PHYSICAL STANDBY     TO PRIMARY

下面切换到RAC环境的STANDBY数据库,检查状态:

SQL> select name, db_unique_name, database_role, switchover_status
  2  from v$database;

NAME      DB_UNIQUE_NAME       DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ---------------- --------------------
TEST11G   TEST11GR             PHYSICAL STANDBY TO PRIMARY

执行SWITCHOVER切换到主库,并打开数据库:

SQL> alter database commit to switchover to primary;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> select name, db_unique_name, database_role, switchover_status
  2  from v$database;

NAME      DB_UNIQUE_NAME       DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ---------------- --------------------
TEST11G   TEST11GR             PRIMARY          NOT ALLOWED

切换成功。

在原主数据库,也就是切换完成后的STANDBY主库执行:

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

数据库已更改。

使得STANDBY数据库应用主库的归档。

在新的主数据库的节点2上,启动实例:

bash-3.00$ export ORACLE_SID=test11gr2
bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期五 7 17 20:35:50 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup pfile=/export/home/oracle/inittest11gr2.ora
ORACLE
例程已经启动。

Total System Global Area 7418036224 bytes
Fixed Size                  2095808 bytes
Variable Size            3250758976 bytes
Database Buffers         4160749568 bytes
Redo Buffers                4431872 bytes
数据库装载完毕。
数据库已经打开。
SQL> select instance_name, status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
test11gr2        OPEN

SQL> select instance_name, status from gv$instance;

INSTANCE_NAME    STATUS
---------------- ------------
test11gr2        OPEN
test11gr1        OPEN

SQL> select name, db_unique_name, database_role
  2  from v$database;

NAME      DB_UNIQUE_NAME                 DATABASE_ROLE
--------- ------------------------------ ----------------
TEST11G   TEST11GR                       PRIMARY

至此,单实例数据库到RAC环境STANDBYSWITCHOVER操作完成。同时,单实例数据库升级到RAC环境数据库的操作也完成了。

如果愿意,现在可以设置RAC环境的DB_RECOVERY_FILE_DEST参数。

使用这种办法升级RAC环境,所需要的停机时间非常短。如果前期准备工作顺利,只需要530分钟的停机时间。

而且采用这种方法,原数据库环境作为RAC环境的STANDBY数据库。如果一旦升级后RAC环境出现问题,或者不适应系统的压力。可以通过SWITCHOVER的方法快速的切换为原始环境,且不会丢失任何的数据。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-622299/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-622299/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值