ORACLE10G DG角色轉換

dayong2015發表於2014-06-04
本文章參考於:http://www.cnblogs.com/landexia/archive/2012/08/03/2621561.html 和ORACLE 10G官方文件
一個DG配置包含一個主資料庫和一個或多個備用資料庫,在主資料庫正常執行的情況下,不會發生角色轉換;當主資料庫需要維護時,需要在某一備用資料庫之間發生角色轉換,使其暫時接替主庫的功能對外提供服務。

角色轉換前的準備工作:
檢查各資料庫的初始化引數,主要確認對不同角色相關的初始化引數都進行了正確的配置
確保可能成為primary 資料庫的standby 伺服器已經處於archivelog 模式
確保standby 資料庫的臨時檔案存在並匹配primary 資料庫的臨時檔案
檢查主備資料庫的standby redo log檔案(最大保護和最高可用性模式)

確保standby 資料庫的RAC 例項只有一個處於open 狀態。(對於rac 結構的standby 資料庫,在角色轉換時只能有一個例項startup。其它rac例項必須統統shutdown,待角色轉換結束後再startup)
切換又分為:switchover和failover,前者是無損切換,不會丟失資料,而後者則有可能會丟失資料,並且切換後原primary 資料庫也不再是該data guard 配置的一部分了.針對不同standby(邏輯或物理)的處理方式也不盡相同。
物理Standby的switchover
1.檢查primary database 是否支援switchover操作,如下:

SQL> select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;

NAME      SWITCHOVER_STATUS    OPEN_MODE  PROTECTION_MODE      DATABASE_ROLE
--------- -------------------- ---------- -------------------- ----------------
MYORCL    SESSIONS ACTIVE      READ WRITE MAXIMUM PERFORMANCE  PRIMARY

批註:出現session active這種狀態不代表不能轉換,可能是某些會話正在連線。
刪除連線會話如下:
SQL> select sid,serial# from gv$session where username is not null;

       SID    SERIAL#
---------- ----------
       159          3

SQL> alter system kill session '159,3';
alter system kill session '159,3'
*
ERROR at line 1:
ORA-00027: cannot kill current session           --出現這種情況我們選擇本地連線,關閉此遠端會話終端
2.將primary轉換為standby角色,如下:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;

Database altered.
批註:使用WITH SESSION SHUTDOWN 子句,專門用來處理前步操作中有遠端使用者的連線,附加該子句,就會自動斷開仍在連線該例項的無關會話。
SQL> shutdown immediate           --將原主資料庫重新啟動到mount狀態
SQL> startup mount;
SQL> select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;

NAME      SWITCHOVER_STATUS    OPEN_MODE  PROTECTION_MODE      DATABASE_ROLE
--------- -------------------- ---------- -------------------- ----------------
MYORCL    TO PRIMARY           MOUNTED    MAXIMUM PERFORMANCE  PHYSICAL STANDBY

3.檢查備庫的switchover
SQL> select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;

NAME      SWITCHOVER_STATUS    OPEN_MODE  PROTECTION_MODE      DATABASE_ROLE
--------- -------------------- ---------- -------------------- ----------------
MYORCL    TO PRIMARY           MOUNTED    MAXIMUM PERFORMANCE  PHYSICAL STANDBY

4.將備庫由standby轉換為primary ,如下:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

Database altered.

SQL> select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;

NAME      SWITCHOVER_STATUS    OPEN_MODE  PROTECTION_MODE      DATABASE_ROLE
--------- -------------------- ---------- -------------------- ----------------
MYORCL    TO STANDBY           MOUNTED    MAXIMUM PERFORMANCE  PRIMARY

SQL> alter database open;

Database altered.

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
orcl             OPEN

SQL> select name,open_mode from v$database;

NAME      OPEN_MODE
--------- ----------
MYORCL    READ WRITE
5.驗證

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;    --開啟新的備庫redo應用

Database altered.
新主庫操作如下:
SQL> conn scott/tiger;
Connected.
SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        50 ORACLE         JAVA
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> insert into dept values (60,'dayong','xiaoru');

1 row created.

SQL> commit;

Commit complete.

SQL> conn / as sysdba
Connected.
SQL> alter system switch logfile;

System altered.
新備庫操作如下:
SQL> recover managed standby database cancel;       --首先取消redo apply
Media recovery complete.
SQL> alter database open;

Database altered.

SQL> select * from scott.dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        50 ORACLE         JAVA
        60 dayong         xiaoru
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

6 rows selected.

物理Standby的failover
1.檢查歸檔檔案是否連線
查詢待轉換standby 資料庫的V$ARCHIVE_GAP 檢視,確認歸檔檔案是否連線
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

no rows selected
批註:如果返回的有記錄,按照列出的記錄號複製對應的歸檔檔案到行轉換的standby伺服器,必須確保所有已生成的歸檔檔案均已存在於standby伺服器,不然可能會資料不一致造成轉換時報錯

檔案複製之後,透過下列命令將其加入資料字典:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
2.檢查歸檔檔案是否完整
在主、備資料庫執行如下語句,查詢檢視V$ARCHIVED_LOG

SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;

    THREAD       LAST
---------- ----------
         1         15

批註:該語句取得當前資料庫各執行緒已歸檔檔案最大序號,如果primary 與standby 最大序號不相同,必須將多出的序號對應的歸檔檔案複製到待轉換的standby 伺服器。不過既然是failover,有可能primary 資料庫此時已經無法開啟,甚至無法訪問.
3.啟動failover
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;     --備庫執行

Database altered.

批註:FORCE 關鍵字將會停止當前活動的RFS 程式,以便立刻執行failover。
4.切換物理角色standby為primary
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;       --備庫操作

Database altered.

5.啟動新的primary資料庫
SQL> shutdown immediate;
SQL> startup
SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
myorcl           OPEN

SQL> select name,open_mode from v$database;

NAME      OPEN_MODE
--------- ----------
MYORCL    READ WRITE

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

相關文章