利用STANDBY將單例項資料庫升級為RAC環境(三)

yangtingkun發表於2009-12-12

利用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章