RAC環境STANDBY的SWITCHOVER切換

yangtingkun發表於2009-08-01

介紹一下RAC環境下STANDBY資料庫的SWITCHOVER切換。

 

 

PRIMARY資料庫和STANDBY資料庫採用的都是RAC 11.1.0.6 for Solaris10 sparc,共享儲存PRIMARY資料庫採用VOLUMN CLUSTER MANAGER,而STANDBY資料庫使用ASM

STANDBY資料庫環境已經建立完成,下面準備實施SWITCHOVER切換:

SWITCHOVER切換是計劃中的切換,在切換後不會丟失任何的資料,而且過程可逆,整個DATA GUARD環境不會被破壞,原來DATA GUARD環境中的所有物理和邏輯STANDBY都可以繼續工作。

在進行DATA GUARD的物理STANDBY切換前需要注意:

確認主庫和從庫間網路連線通暢;

確認沒有活動的會話連線在資料庫中;

PRIMARY資料庫處於開啟的狀態,STANDBY資料庫處於MOUNT狀態;

確保STANDBY資料庫處於ARCHIVELOG模式;

如果設定了REDO應用的延遲,那麼將這個設定去掉;

確保配置了主庫和從庫的初始化引數,使得切換完成後,DATA GUARD機制可以順利的執行。

檢查主資料庫,確保所有的會話全部斷開:

SQL> select inst_id,          
  2     username,
  3     program,
  4     module
  5  from gv$session
  6  where username is not null;

   INST_ID USERNAME        PROGRAM                        MODULE
---------- --------------- ------------------------------ ------------------------------
         1 SYS             sqlplus@newtrade1 (TNS V1-V3)  sqlplus@newtrade1 (TNS V1-V3)
         1 SYSMAN          OMS                            OEM.SystemPool
         1 SYSMAN          OMS                            OEM.DefaultPool
         1 SYS             oracle@newtrade1 (PZ99)        sqlplus@newtrade1 (TNS V1-V3)
         1 SYS             racgimon@newtrade1 (TNS V1-V3) racgimon@newtrade1 (TNS V1-V3)
         1 SYS             racgimon@newtrade1 (TNS V1-V3) racgimon@newtrade1 (TNS V1-V3)
         1 SYSMAN          OMS                            OEM.SystemPool
         1 SYS             racgimon@newtrade1 (TNS V1-V3) racgimon@newtrade1 (TNS V1-V3)
         1 DBSNMP          emagent@newtrade1 (TNS V1-V3)  emagent@newtrade1 (TNS V1-V3)
         1 DBSNMP          emagent@newtrade1 (TNS V1-V3)  emagent@newtrade1 (TNS V1-V3)
         1 SYS             racgimon@newtrade1 (TNS V1-V3) racgimon@newtrade1 (TNS V1-V3)
         2 SYS             sqlplus@newtrade2 (TNS V1-V3)  sqlplus@newtrade2 (TNS V1-V3)
         2 SYS             racgimon@newtrade2 (TNS V1-V3) racgimon@newtrade2 (TNS V1-V3)
         2 SYS             racgimon@newtrade2 (TNS V1-V3) racgimon@newtrade2 (TNS V1-V3)
         2 SYSMAN          OMS                            OEM.DefaultPool
         2 SYSMAN          OMS                            OEM.BoundedPool
         2 SYS             oracle@newtrade2 (PZ99)        sqlplus@newtrade1 (TNS V1-V3)
         2 SYS             racgimon@newtrade2 (TNS V1-V3) racgimon@newtrade2 (TNS V1-V3)
         2 SYSMAN          OMS                            OEM.SystemPool

已選擇19行。

上面的sqlplus程式是當前使用者連線,racgimon程式是檢測RAC環境的,也沒有關係,需要關閉的是SYSMAN使用者的連線,可以透過emctl命令進行關閉。

bash-3.00$ emctl stop dbconsole
Oracle Enterprise Manager 11g Database Control Release 11.1.0.6.0
Copyright (c) 1996, 2007 Oracle Corporation.  All rights reserved.

Stopping Oracle Enterprise Manager 11g Database Control ...
 ...  Stopped.

對於RAC資料庫來說,切換的時候只能保留一個例項,其他的例項必須關閉:

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
rac11g2

SQL> select name,
  2     open_mode,
  3     database_role,
  4     guard_status,
  5     db_unique_name,
  6     primary_db_unique_name
  7  from v$database;

NAME      OPEN_MODE  DATABASE_ROLE    GUARD_S DB_UNIQUE_NAME  PRIMARY_DB_UNIQUE_NAME
--------- ---------- ---------------- ------- --------------- -------------------------
RAC11G    READ WRITE PRIMARY          NONE    rac11g

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。

下面再次檢查主資料庫:

SQL> select instance_name from gv$instance;

INSTANCE_NAME
----------------
rac11g1

SQL> select name, switchover_status from v$database;

NAME      SWITCHOVER_STATUS
--------- --------------------
RAC11G    SESSIONS ACTIVE

SQL> select inst_id,
  2     username,
  3     program,
  4     module
  5  from gv$session
  6  where username is not null;

   INST_ID USERNAME        PROGRAM                        MODULE
---------- --------------- ------------------------------ ------------------------------
         1 SYS             sqlplus@newtrade1 (TNS V1-V3)  sqlplus@newtrade1 (TNS V1-V3)
         1 SYS             racgimon@newtrade1 (TNS V1-V3) racgimon@newtrade1 (TNS V1-V3)
         1 SYS             racgimon@newtrade1 (TNS V1-V3) racgimon@newtrade1 (TNS V1-V3)
         1 SYS             racgimon@newtrade1 (TNS V1-V3) racgimon@newtrade1 (TNS V1-V3)
         1 SYS             racgimon@newtrade1 (TNS V1-V3) racgimon@newtrade1 (TNS V1-V3)

現在主庫只剩下一個例項了,雖然資料庫的狀態仍然是SESSIONS ACTIVE,但是會話中只有racgimon程式和當前的sqlplus程式,已經可以進行切換了。

下面檢查STANDBY資料庫:

bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期四 9 11 14:32:08 2008

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 from v$instance;

INSTANCE_NAME
----------------
rac11g2

SQL> select name,
  2     open_mode,
  3     database_role,
  4     guard_status,
  5     db_unique_name,
  6     primary_db_unique_name
  7  from v$database;

NAME      OPEN_MODE  DATABASE_ROLE    GUARD_S DB_UNIQUE_NAME  PRIMARY_DB_UNIQUE_NAME
--------- ---------- ---------------- ------- --------------- -------------------------
RAC11G    READ ONLY  PHYSICAL STANDBY NONE    rac11g_s        rac11g

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。

關閉例項二之後,將例項一取消應用日誌,置於MOUNT狀態下:

SQL> select instance_name from gv$instance;

INSTANCE_NAME
----------------
rac11g1

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> startup mount
ORACLE
例程已經啟動。

Total System Global Area 1.7108E+10 bytes
Fixed Size                  2101632 bytes
Variable Size            3344420480 bytes
Database Buffers         1.3757E+10 bytes
Redo Buffers                4431872 bytes
資料庫裝載完畢。

下面可以開始正式切換,首先登陸到PRIMARY資料庫:

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

資料庫已更改。

SQL> shutdown immediate
ORA-01507:
未裝載資料庫


ORACLE
例程已經關閉。
SQL> startup mount
ORACLE
例程已經啟動。

Total System Global Area 1.7108E+10 bytes
Fixed Size                  2101632 bytes
Variable Size            3545747072 bytes
Database Buffers         1.3556E+10 bytes
Redo Buffers                4431872 bytes
資料庫裝載完畢。
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

下面在STANDBY資料庫執行:

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
SWITCHOVER PENDING

SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
1 行出現錯誤:
ORA-16139:
需要介質恢復

由於RAC環境的特殊性,造成了這個問題,下面只需要執行一下RECOVER MANAGED STANDBY DATABASE語句,確保所有的日誌都已經應用就可以了:

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

資料庫已更改。

SQL> select sequence#, thread#, name, applied from v$archived_log;

 SEQUENCE#    THREAD# NAME                                                         APP
---------- ---------- ------------------------------------------------------------ ---
       533          1 +DATA/rac11g/1_533_660235173.dbf                             YES
       198          2 +DATA/rac11g/2_198_660235173.dbf                             YES
       532          1 +DATA/rac11g/1_532_660235173.dbf                             YES
       199          2 +DATA/rac11g/2_199_660235173.dbf                             YES
       534          1 +DATA/rac11g/1_534_660235173.dbf                             YES
       535          1 +DATA/rac11g/1_535_660235173.dbf                             YES
       536          1 +DATA/rac11g/1_536_660235173.dbf                             YES
       537          1 +DATA/rac11g/1_537_660235173.dbf                             YES
       538          1 +DATA/rac11g/1_538_660235173.dbf                             YES
       539          1 +DATA/rac11g/1_539_660235173.dbf                             YES
       540          1 +DATA/rac11g/1_540_660235173.dbf                             YES
       541          1 +DATA/rac11g/1_541_660235173.dbf                             YES
       200          2 +DATA/rac11g/2_200_660235173.dbf                             YES
       542          1 +DATA/rac11g/1_542_660235173.dbf                             YES
       201          2 +DATA/rac11g/2_201_660235173.dbf                             YES
       543          1 +DATA/rac11g/1_543_660235173.dbf                             YES
       202          2 +DATA/rac11g/2_202_660235173.dbf                             YES
       203          2 +DATA/rac11g/2_203_660235173.dbf                             YES
       204          2 +DATA/rac11g/2_204_660235173.dbf                             YES
       205          2 +DATA/rac11g/2_205_660235173.dbf                             YES
       544          1 +DATA/rac11g/1_544_660235173.dbf                             YES
       207          2 +DATA/rac11g/2_207_660235173.dbf                             YES
       206          2 +DATA/rac11g/2_206_660235173.dbf                             YES
       545          1 +DATA/rac11g/1_545_660235173.dbf                             YES
       546          1 +DATA/rac11g/1_546_660235173.dbf                             YES
       547          1 +DATA/rac11g/1_547_660235173.dbf                             YES

已選擇26行。

SQL> alter database recover managed standby database cancel;
alter database recover managed standby database cancel
*
1 行出現錯誤:
ORA-16136:
受管備用恢復未啟用


SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

Oracle應用了所有日誌後,自動停止了恢復,且此時資料庫已經變為TO PRIMARY狀態,下面就可以切換到PRIMARY了:

SQL> alter database commit to switchover to primary;

資料庫已更改。

SQL> alter database open;

資料庫已更改。

下面回到原來的PRIMARY資料庫,也就是切換後的STANDBY資料庫:

SQL> select instance_name, status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
rac11g1          MOUNTED

SQL> select name,
  2     open_mode,
  3     database_role,
  4     guard_status,
  5     db_unique_name,
  6     primary_db_unique_name
  7  from v$database;

NAME      OPEN_MODE  DATABASE_ROLE    GUARD_S DB_UNIQUE_NAME       PRIMARY_DB_UNIQUE_NAME
--------- ---------- ---------------- ------- -------------------- ----------------------
RAC11G    MOUNTED    PHYSICAL STANDBY NONE    rac11g               rac11g_s

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

資料庫已更改。

至此SWITCHOVER切換已經完成,檢查一下遠端的歸檔能否應用到本地環境即可。

首先啟動例項2,執行日誌的切換:

SQL> startup
ORACLE
例程已經啟動。

Total System Global Area 1.7108E+10 bytes
Fixed Size                  2101632 bytes
Variable Size            3478638208 bytes
Database Buffers         1.3623E+10 bytes
Redo Buffers                4431872 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
rac11g2

SQL> select name,
  2     open_mode,
  3     database_role,
  4     guard_status,
  5     db_unique_name,
  6     primary_db_unique_name
  7  from v$database;

NAME      OPEN_MODE  DATABASE_ROLE    GUARD_S DB_UNIQUE_NAME  PRIMARY_DB_UNIQUE_NAME
--------- ---------- ---------------- ------- --------------- -------------------------
RAC11G    READ WRITE PRIMARY          NONE    rac11g_s        rac11g

SQL> select group#, thread#, sequence#, status from v$log;

    GROUP#    THREAD#  SEQUENCE# STATUS
---------- ---------- ---------- ----------------
         1          1        548 INACTIVE
         2          1        549 CURRENT
         3          2        208 INACTIVE
         4          2        209 CURRENT

SQL> alter system archive log current;

系統已更改。

SQL> select group#, thread#, sequence#, status from v$log;

    GROUP#    THREAD#  SEQUENCE# STATUS
---------- ---------- ---------- ----------------
         1          1        550 CURRENT
         2          1        549 ACTIVE
         3          2        210 CURRENT
         4          2        209 ACTIVE

下面檢查新的STANDBY資料庫是否可以正常接收歸檔:

SQL> select sequence#, thread#, name, applied from v$archived_log
  2  where (thread# = 1 and sequence# = 549)
  3  or (thread# = 2 and sequence# = 209);

 SEQUENCE#    THREAD# NAME                                                            APP
---------- ---------- --------------------------------------------------------------- ---
       209          2 /data/oracle/oradata/rac11g/archivelog/2_209_660235173.dbf      YES
       549          1 /data/oracle/oradata/rac11g/archivelog/1_549_660235173.dbf      NO

至此SWITCHOVER切換完成。

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-611058/,如需轉載,請註明出處,否則將追究法律責任。

相關文章