9204RAC到單例項的SWITCHOVER切換

yangtingkun發表於2011-01-24

以前做過9i DATA GUARDSWITCHOVER,也做過10gRAC環境到單例項的SWITCHOVER,但是9204RAC環境到單例項DATA GUARDSWITCHOVER還是第一次。

 

 

這個9204上的RAC環境到單例項的STANDBY環境是我前一段時間搭建的,RAC到單例項的DATA GUARD環境配置其實和普通的DATA GUARD環境區別不是很大。

而對於9204RAC環境到單例項的SWITCHOVER而言,和以往記錄的SWITCHOVER都有明顯的區別,因此簡單記錄一下步驟。

首先仍然是進行DATA GUARD的物理STANDBY切換前的常規檢查:

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

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

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

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

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

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

對於RAC環境而言,還需要注意,需要關閉其他節點,在切換過程中僅保留一個例項。

登入節點2伺服器,關閉資料庫例項:

[oracle@db2 ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on 星期六 115 09:58:10 2011

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

下面登入節點1伺服器:

SQL> select count(*) from v$session;

  COUNT(*)
----------
       303

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1545149056 bytes
Fixed Size                   453248 bytes
Variable Size             704643072 bytes
Database Buffers          838860800 bytes
Redo Buffers                1191936 bytes
Database mounted.
Database opened.
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------
SESSIONS ACTIVE

SQL> select count(*) from v$session where username is not null;
  COUNT(*)
----------
        12

SQL> select username, program from v$session where username is not null;

USERNAME                       PROGRAM
------------------------------ ------------------------------------------------
SYS                            sqlplus@db1 (TNS V1-V3)

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------
TO STANDBY

由於資料庫中存在大量的會話,為了快速的關閉所有的會話選擇了關閉資料庫並重新啟動。

如果資料庫中除了當前會話外,還有其他的非系統的活動會話,資料庫的SWITCHOVER_STATUS列的值是SESSION_ACTIVE,而如果除了當前連線外,資料庫中已經沒有非系統活動會話,資料庫的SWITCHOVER_STATUS狀態會變為TO STANDBY,這說明主資料庫已經做好了SWITCHOVERSTANDBY資料庫的準備了。

SQL> alter database commit to switchover to physical standby;

Database altered.

SQL> shutdown immediate
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.

Total System Global Area 1545149056 bytes
Fixed Size                   453248 bytes
Variable Size             704643072 bytes
Database Buffers          838860800 bytes
Redo Buffers                1191936 bytes
SQL> alter database mount standby database;

Database altered.

SQL> select switchover_status from v$database;

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

執行主庫的SWITCHOVER切換操作,然後啟動到NOMOUNT狀態,利用ALTER DATABAE MOUNT STANDBY DATABASE命令載入資料庫,檢查資料庫的切換狀態,這時資料庫已經處於STANDBY角色,因此切換狀態變為TO PRIMARY

下面登入原STANDBY資料庫:

執行切換到主庫的操作:

SQL> select open_mode, database_role, switchover_status from v$database;

OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
---------- ---------------- ------------------
MOUNTED    PHYSICAL STANDBY TO PRIMARY

SQL> alter database commit to switchover to primary;

Database altered.

SQL> shutdown immediate
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1545149056 bytes
Fixed Size                   453248 bytes
Variable Size             704643072 bytes
Database Buffers          838860800 bytes
Redo Buffers                1191936 bytes
Database mounted.
Database opened.
SQL> select open_mode, database_role, switchover_status from v$database;

OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
---------- ---------------- ------------------
READ WRITE PRIMARY          TO STANDBY

檢查資料庫的切換狀態,資料庫狀態為TO PRIMARY,說明STANDBY資料庫做好了切換到主庫的準備,如果這裡的狀態是SWITCHOVER PENDING,說明備庫接收到了SWITCHOVER切換的命令,但是還沒有作出處理,這多半是由於資料庫沒有處於應用日誌的狀態,執行ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION語句後,正常情況下,資料庫將會處於TO PRIMARY狀態。

執行SWITCHOVER到主庫的操作,然後需要關閉資料庫。這和10g有所區別,在10g中這時主庫就可以直接開啟了,但是9i必須關閉資料庫然後重新啟動。之所以先shutdown immediate然後shutdown abort,是因為9i這種狀態下可能例項無法完全關閉,當然也可以直接使用shutdown abort來關閉例項。

重啟後資料庫處於PRIMARY角色。

下面登入原來的主庫也就是新的備庫,將資料庫恢復開啟:

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

Database altered.

最後檢查DATA GUARD應用日誌是否正常,檢查alert檔案是否存在錯誤,確認SWITCHOVER操作後,DATA GUARD環境工作正常。

 

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

相關文章