RAC環境LOGICAL STANDBY的SWITCHOVER切換

yangtingkun發表於2009-09-30

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

 

 

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

在部署之前,首先檢查目前的PRIMARY資料庫是否滿足切換後邏輯STANDBY的角色,發現目前PRIMARY資料庫還沒有建立STANDBY LOGFILE,因此首先建立PRIMARY資料庫的STANDBY LOGFILE

root@newtrade1 # cd /dev/vx/rdsk/datavg
root@newtrade1 # vxassist -g datavg make rac11g_standby_redo1_1_1_1g 1025m user=oracle group=oinstall mode=660
root@newtrade1 # vxassist -g datavg make rac11g_standby_redo1_2_1_1g 1025m user=oracle group=oinstall mode=660
root@newtrade1 # vxassist -g datavg make rac11g_standby_redo1_3_1_1g 1025m user=oracle group=oinstall mode=660
root@newtrade1 # vxassist -g datavg make rac11g_standby_redo2_1_1_1g 1025m user=oracle group=oinstall mode=660
root@newtrade1 # vxassist -g datavg make rac11g_standby_redo2_2_1_1g 1025m user=oracle group=oinstall mode=660
root@newtrade1 # vxassist -g datavg make rac11g_standby_redo2_3_1_1g 1025m user=oracle group=oinstall mode=660
root@newtrade1 # su - oracle
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期四 9 18 14:45:14 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> alter database add standby logfile group 5 '/dev/vx/rdsk/datavg/rac11g_standby_redo1_1_1_1g' size 1g; 

資料庫已更改。

SQL> alter database add standby logfile group 6 '/dev/vx/rdsk/datavg/rac11g_standby_redo1_2_1_1g' size 1g;

資料庫已更改。

SQL> alter database add standby logfile group 7 '/dev/vx/rdsk/datavg/rac11g_standby_redo1_3_1_1g' size 1g;

資料庫已更改。

SQL> alter database add standby logfile group 8 '/dev/vx/rdsk/datavg/rac11g_standby_redo2_1_1_1g' size 1g;

資料庫已更改。

SQL> alter database add standby logfile group 9 '/dev/vx/rdsk/datavg/rac11g_standby_redo2_2_1_1g' size 1g;

資料庫已更改。

SQL> alter database add standby logfile group 10 '/dev/vx/rdsk/datavg/rac11g_standby_redo2_3_1_1g' size 1g;

資料庫已更改。

下面準備實施SWITCHOVER切換。

首先檢查主庫的狀態:

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                         rac11g_s

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
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        oracle@newtrade1 (PZ99)        sqlplus@newtrade1 (TNS V1-V3)
         1 SYS        racgimon@newtrade1 (TNS V1-V3) racgimon@newtrade1 (TNS V1-V3)
         2 SYS        oracle@newtrade2 (PZ99)        sqlplus@newtrade1 (TNS V1-V3)
         2 SYS        racgimon@newtrade2 (TNS V1-V3) racgimon@newtrade2 (TNS V1-V3)

已選擇6行。

雖然SWITCHOVER的狀態為SESSION ACTIVE,但是剩下的會話已經沒有其它使用者的會話了,需要注意的是,目前例項2仍然啟動,在執行SWITCHOVER的時候,應該只保留一個例項:

SQL> select instance_name from v$instance;

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

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

檢查STANDBY資料庫狀態,確保LOGICAL STANDBY資料庫開啟,且處於應用SQL的狀態:

SQL> select instance_name, status from gv$instance;

INSTANCE_NAME    STATUS
---------------- ------------
rac11g1          OPEN
rac11g2          OPEN

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_L  READ WRITE LOGICAL STANDBY  ALL     rac11g_s        rac11g

SQL> select * from v$logstdby_state;

PRIMARY_DBID SESSION_ID REALTIME_APPLY  STATE
------------ ---------- --------------- ------------------------------
  1712482917          1 Y               IDLE

關閉例項2

SQL> select instance_name from v$instance;

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

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

下面回到PRIMARY資料庫,準備切換:

SQL> alter database prepare to switchover to logical standby;

資料庫已更改。

SQL> select name, switchover_status from v$database;

NAME      SWITCHOVER_STATUS
--------- --------------------
RAC11G    PREPARING SWITCHOVER

STANDBY庫進行準備切換:

SQL> alter database prepare to switchover to primary;

Database altered.

SQL> select name, switchover_status from v$database;

NAME      SWITCHOVER_STATUS
--------- --------------------
RAC11G_L  PREPARING SWITCHOVER

再次檢查主庫,switchover_status應該變成TO LOGICAL STANDBY

SQL> select name, switchover_status from v$database;

NAME      SWITCHOVER_STATUS
--------- --------------------
RAC11G    TO LOGICAL STANDBY

將主庫切換為LOGICAL STANDBY資料庫:

SQL> alter database commit to switchover to logical standby;

資料庫已更改。

檢查邏輯STANDBY資料庫的狀態是否為TO PRIMARY

SQL> select name, switchover_status from v$database;

NAME      SWITCHOVER_STATUS
--------- --------------------
RAC11G_L  TO PRIMARY

下面可以將STANDBY資料庫切換為PRIMARY資料庫:

SQL> alter database commit to switchover to primary;

Database altered.

最後開啟新邏輯STANDBY資料庫的SQL應用即可:

SQL> alter database start logical standby apply immediate;

資料庫已更改。

檢查邏輯STANDBY執行情況:

SQL> select * from v$logstdby_state;

PRIMARY_DBID SESSION_ID REALTIME_APPLY  STATE
------------ ---------- --------------- ------------------------------
  3515162368          1 Y               IDLE

下面可以將主庫和STANDBY資料庫的第二例項啟動:

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, status from gv$instance;

INSTANCE_NAME    STATUS
---------------- ------------
rac11g2          OPEN
rac11g1          OPEN

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_L  READ WRITE PRIMARY          NONE    rac11g_s        rac11g

STANDBY資料庫開啟第二例項後:

SQL> startup
ORACLE
例程已經啟動。

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

INSTANCE_NAME    STATUS
---------------- ------------
rac11g2          OPEN
rac11g1          OPEN

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 LOGICAL STANDBY  ALL     rac11g          rac11g_s

至此,RAC環境的LOGICAL STANDBYSWICHOVER切換完成。

 

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

相關文章