【DataGuard】Oracle 11g DataGuard 角色轉換(一)物理備庫Switchover

dbasdk發表於2014-08-18
Oracle 11g DataGuard 角色轉換(一)
——Switchover to a Physical Standby Database


Data Guard環境下,資料庫分為主庫(primary) 和備庫(standby) 兩種角色。可以使用SQL語句進行資料庫角色的動態轉換。Oracle Data Guard支援Switchover和Failover兩種角色轉換。其中switchover角色轉換,允許主庫與它的一個備庫進行角色轉換,在switchover轉換過程中可以沒有資料丟失。在角色轉換之後,每個資料庫都繼續執行它在Data Guard 配置中的新角色。在系統、硬體升級或滾動升級oracle資料庫軟體及補丁包過程中,Switchover 角色轉換可以縮短主庫的當機時間。


【實驗環境】

Red Hat Enterprise Linux Server release 5.4
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0

【Switchover前 DG主庫、物理備庫結構資訊】



【實驗過程】

切換前:主庫:beijing 綠色。物理備庫:shanghai 黃色
切換後:新主庫:shanghai 黃色。新物理備庫:beijing 綠色



1、切換前準備

為了更好的體現DataGuard搭建過程中,主庫、備庫各引數的意義,在前面搭建DG環境時,特意將主庫、備庫的db_name和db_unique_name以及主、備庫的檔案存放位置等進行了不同設定。同時在搭建的過程中,主、備庫的引數修改上也使用了最小化的更改,以便區分遠端歸檔目錄、FAL等在DG中的真正作用。在當前DG環境下,主庫引數檔案中有本地、遠端兩個歸檔路徑、無FAL配置,主庫中未新增standby日誌組。備庫引數檔案中只有本地歸檔路徑,有FAL配置,備庫中有4個standby日誌組。

所以在switchover前,首先對主、備庫引數檔案、日誌組配置以及網路配置做同步。

1.1、主庫新增standby日誌組


檢視當前主庫日誌組情況

select sequence#,group#,bytes/1024/1024 MB from v$log;

select member from v$logfile;



新增4個standby日誌組

alter database add standby logfile group 4 '/u01/app/oracle/oradata/DGDB/redo04.std' size 50m;

alter database add standby logfile group 5 '/u01/app/oracle/oradata/DGDB/redo05.std' size 50m;

alter database add standby logfile group 6 '/u01/app/oracle/oradata/DGDB/redo06.std' size 50m;

alter database add standby logfile group 7 '/u01/app/oracle/oradata/DGDB/redo07.std' size 50m;



新增standby日誌後,主、備庫日誌組配置相同
select member from v$logfile;

 


1.2、初始化引數檔案

主庫、新增FAl、目錄轉換(紅色),特別注意FAL Server與Client的配置值,對應tnsnames.ora中的名稱



  1. DB_UNIQUE_NAME=beijing
  2. LOG_ARCHIVE_CONFIG='DG_CONFIG=(beijing,shanghai)'
  3. LOG_ARCHIVE_DEST_1=
  4. 'LOCATION=/home/oracle/beijing/
  5. VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  6. DB_UNIQUE_NAME=beijing'
  7. LOG_ARCHIVE_DEST_2=
  8. 'SERVICE=sh LGWR SYNC AFFIRM
  9. VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  10. DB_UNIQUE_NAME=shanghai'
  11. LOG_ARCHIVE_DEST_STATE_1=ENABLE
  12. LOG_ARCHIVE_DEST_STATE_2=ENABLE

  13. FAL_SERVER=sh
  14. FAL_CLIENT=bj
  15. DB_FILE_NAME_CONVERT='/u02/oradata/sh','/u01/app/oracle/oradata/DGDB'
  16. LOG_FILE_NAME_CONVERT='/u02/oradata/sh','/u01/app/oracle/oradata/DGDB'
  17. STANDBY_FILE_MANAGEMENT=AUTO


備庫新增遠端歸檔路徑(紅色)

  1. DB_NAME=DGDB
  2. DB_UNIQUE_NAME=shanghai
  3. LOG_ARCHIVE_CONFIG='DG_CONFIG=(beijing,shanghai)'
  4. LOG_ARCHIVE_DEST_1=
  5. 'LOCATION=/u02/arch/sh/
  6. VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  7. DB_UNIQUE_NAME=shanghai'
  8. LOG_ARCHIVE_DEST_STATE_1=ENABLE

  9. LOG_ARCHIVE_DEST_2=
  10. 'SERVICE=sh LGWR SYNC AFFIRM
  11. VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  12. DB_UNIQUE_NAME=beijing'
  13. LOG_ARCHIVE_DEST_STATE_2=ENABLE
  14. FAL_SERVER=bj
  15. FAL_CLIENT=sh
  16. DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/DGDB','/u02/oradata/sh'
  17. LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/DGDB','/u02/oradata/sh'
  18. STANDBY_FILE_MANAGEMENT=AUTO

 1.3、主庫、備庫 tnsnames

more $ORACLE_HOME/network/admin/tnsnames.ora

sh =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = shanghai.lxh.net)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = shanghai)

    )

  )

bj =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = beijing.lxh.net)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = beijing)

    )

  )

 


1.4、重啟驗證引數配置

主庫重啟檢視引數
show parameter fal
show parameter convert
show parameter standby


備庫重啟到mount檢視引數
show parameter log_archive_dest_2

 

2、主庫切物理備庫


2.1、切換前主庫檢視是否有gap

select status,gap_status from v$archive_dest_status where dest_id=2;


2.2、主庫設定為 最大效能模式

alter database set standby database to maximize performance;
select database_role,protection_mode,protection_level from v$database;

          

2.3、備庫 取消日誌應用

alter database recover managed standby database cancel;


2.4、檢視主備庫角色和狀態

此時主庫switchover_status顯示“TO STANDBY”,即表示主庫此時可以切換為備庫

select database_role,switchover_status from v$database;





2.5、主庫切物理備庫

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

切換完畢後檢視主庫角色,已經是:PHYSICAL STANDBY 物理備庫

select database_role,switchover_status from v$database;



此時切換的第一個環節完成,主庫成功切換為物理備庫



3、原備庫切換為新主庫

3.1、備庫切換前應用日誌、檢視狀態

原備庫shanghai切換主庫前,要先應用日誌,switchover_status 顯示“TO PRIMARY”表示可以切換為主庫

select database_role,switchover_status from v$database;

alter database recover managed standby database disconnect;

select database_role,switchover_status from v$database;



3.2、原備庫 切換為 新主庫


alter database commit to switchover to primary;

切換完成後檢視,已經是PRIMARY狀態
select database_role,switchover_status from v$database
;


3.3、新備庫 (原主庫)關閉遠端歸檔、重啟到mount狀態應用日誌

此時備庫已經成功切換為新的主庫,需禁用原來主庫的遠端歸檔


alter database recover managed standby database disconnect;


3.4、新主庫開庫、切換模式驗證

alter database open;

alter database set standby database to maximize availability;


新備庫開庫,驗證模式

alter database open;

select database_role,open_mode,protection_mode,protection_level from v$database;




至此switchiover角色轉換第二步也已經完成,新的主庫shanghai(原備庫)已經與原來的主庫beijing完成了角色切換。





如果要使用11g DataGuard日誌應用與資料讀取同步進行,新的備庫上可以使用Real-Time Apply方式應用日誌。

alter database recover managed standby database using current logfile disconnect;

select database_role,open_mode,protection_mode,protection_level from v$database;




此時檢視新主庫的switchover狀態,是“TO STANDBY”狀態,即可以切換為備庫。
我們可以對原來的主庫進行升級等操作,升級結束後,再次進行switchover角色切換,就恢復到原來的主備關係。



【實驗總結】

1、DataGuard環境下,如果需要對資料庫進行軟體、硬體升級等操作,使用Switchover主備切換,可以最大限度減少主庫當機對生產業務的影響。Switchover角色切換後,原來的主庫角色已經是切換到備庫狀態,生產環境的業務可以在新的主庫上進行,可以對原主庫進行升級等操作而不必擔心當機時間太長對業務產生影響。在原主庫升級完成後,再進行一次switchover主備切換,就在最少的當機時間下,完成了對主庫的升級工作。
2、Switchover角色切換兩個步驟:主庫切物理備庫、備庫切為新的主庫。切換之前要配置好主備庫初始化引數、standby日誌組、檢視監聽和tnsnames等準備工作。還需要檢視是否有GAP,要在沒有GAP的情況下切換,確保切換過程中資料不會丟失。



呂星昊
2014.8.17


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

相關文章