Oracle Data Guard 的保護模式有提供三種Maximum Protection,Maximum Availability 和 Maximum Performance。
1.Maximum Protection 最大保護
提供最安全的保護,在此模式下資料是絕對不會遺失,因為它要求本地 Primary DB 要寫入Redo log file 之前,至少也要寫一份去 Standby Redo log file ,此筆交易才算完成,如果因為網路故障或者某些原因導致 Primary DB無法連線至 Standby DB,這時Primary DB 會強制 Shutdown DB 以確保資料不會被遺失。
這種方式 Standby DB 必須配置Standby Redo Log,而 Primary DB 傳輸方式必須使用LGWR SYNC AFFIRM 模式
2.Maximum Availability 最高可用
此種模式也是提供最大保護,也是一樣要求本地 Primary DB 要寫入Redo log file 之前,至少也要寫一份去 Standby Redo log file ,此筆交易才算完成。差別在於此模式發生斷線,Primary DB 並不會強制Shutdown DB,而是自動切換 Maximum Performance 最高性能 模式,等待網路恢復正常後才會恢復成 Maximum Availability 最高可用。
這種方式 Standby DB 也是必須配置Standby Redo Log,而 Primary DB 傳輸方式必須使用LGWR SYNC AFFIRM 模式
3.Maximum Performance 最高性能
這種模式下Primary DB不需等待 Standby Redo log file 寫入完成,所以效能上會比前兩種好,但也因為這樣資料同步上會有延遲。
這種傳輸方式可以用 LGWR ASYNC 或者 ARCH,Standby Database也不要求使用Standby Redo Log。
保護模式可以線上互相切換(除了第4種模擬之外
以下就針對上述的六種情況來做模擬
測試DB版本
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
(1.)先查看主備庫目前模式
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
(2.)查看log file 有無 standby log file
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------- ---
1 ONLINE D:\ORACLE\ORADATA\ORCL\REDO01.LOG NO
3 ONLINE D:\ORACLE\ORADATA\ORCL\REDO03.LOG NO
2 ONLINE D:\ORACLE\ORADATA\ORCL\REDO02.LOG NO
4 STANDBY D:\ORACLE\ORADATA\ORCL\REDO04.LOG NO
5 STANDBY D:\ORACLE\ORADATA\ORCL\REDO05.LOG NO
6 STANDBY D:\ORACLE\ORADATA\ORCL\REDO06.LOG NO
7 STANDBY D:\ORACLE\ORADATA\ORCL\REDO07.LOG NO
7 rows selected.
要是沒有請在Standby DB使用以下指令增加,size大小必須與原使用Redo file一致,建議比照當前Redo log再多建一組Standby Redo file 以供轉換時備用
alter database add standby logfile group 4 'D:\datafile\redo04.log' size 50m;
(3.)調整傳輸模式為 LGWR SYNC AFFIRM
(4.)進行切換, 主備庫都轉為最高可用
SQL> alter database set standby database to maximize availability;
Database altered.
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM AVAILABILITY RESYNCHRONIZATION
SQL> alter system switch logfile;
System altered.
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
SQL>
2.最高可用 > 最大保護
(1.)當前模式
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
SQL>
(2.)因為傳輸模式已經改好了 LGWR SYNC AFFIRM 所以就可以直接轉換模式
SQL> alter database set standby database to maximize protection;
Database altered.
(3.)轉換成功
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM PROTECTION MAXIMUM PROTECTION
SQL>
3.最大保護 > 最大性能
(1.)當前模式
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM PROTECTION MAXIMUM PROTECTION
(2.)因為最大性能傳輸模式可以 LGWR 也可以 ARCH 傳輸,這邊就直接下指令轉換
SQL> alter database set standby database to maximize performance;
Database altered.
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
SQL>
4.最大性能 > 最大保護
(1.)當前模式
SQL> select database_role,open_mode,protection_mode,protection_level from v$database;
DATABASE_ROLE OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- -------------------- --------------------
PRIMARY READ WRITE MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
SQL>
(2.)在轉換時出現錯誤,表示所有instance 轉換時都不能在 open 狀態
SQL> alter database set standby database to maximize protection;
alter database set standby database to maximize protection
*
ERROR at line 1:
ORA-01126: database must be mounted in this instance and not open in any instance
SQL>
(3.) 在主DB開啟到 mount 狀態下指令
SQL> startup mount;
ORACLE instance started.
Total System Global Area 313159680 bytes
Fixed Size 2175328 bytes
Variable Size 264244896 bytes
Database Buffers 41943040 bytes
Redo Buffers 4796416 bytes
Database mounted.
SQL> alter database set standby database to maximize protection;
Database altered.
(4.) 在備DB開啟到 mount 狀態下指令
SQL> startup mount;
ORACLE instance started.
Total System Global Area 313159680 bytes
Fixed Size 2175328 bytes
Variable Size 264244896 bytes
Database Buffers 41943040 bytes
Redo Buffers 4796416 bytes
Database mounted.
SQL> alter database set standby database to maximize protection;
Database altered.
(5.)主庫open 並且檢查模式
SQL> alter database open ;
Database altered.
SQL> select database_role,open_mode,protection_mode,protection_level from v$database;
DATABASE_ROLE OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- -------------------- --------------------
PRIMARY READ WRITE MAXIMUM PROTECTION MAXIMUM PROTECTION
SQL>
(6.)備庫 open read only ,並檢查模式
SQL> alter database open read only;
Database altered.
SQL> select database_role,open_mode,protection_mode,protection_level from v$database;
DATABASE_ROLE OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- -------------------- --------------------
PHYSICAL STANDBY READ ONLY MAXIMUM PROTECTION MAXIMUM PROTECTION
SQL>
5.最大保護 > 最高可用
(1). 查詢目前狀態
SQL> select database_role,open_mode,protection_mode,protection_level from v$database;
DATABASE_ROLE OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- -------------------- --------------------
PRIMARY READ WRITE MAXIMUM PROTECTION MAXIMUM PROTECTION
(2.)轉換指令
SQL> alter database set standby database to maximize availability;
Database altered.
SQL> select database_role,open_mode,protection_mode,protection_level from v$database;
DATABASE_ROLE OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- -------------------- --------------------
PRIMARY READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
SQL>
6.最高可用 > 最大性能
(1.) 這邊也是依樣直接下指令
SQL>
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
SQL>
SQL> alter database set standby database to maximize performance;
Database altered.
SQL> select database_role,protection_mode,protection_level from v$database;
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
SQL>
結論:
最大性能要轉最大保護時 DB 必須要在 Mount 才能轉換,為了避免DB還要Shutdown ,可以先從 最大性能 > 最高可用 再從 最高可用 > 最大保護..
2次轉換可以避免Shutdown 後對業務上的影響
沒有留言:
張貼留言