oracle實驗記錄 (oracle 10G dataguard(6)保護模式)

fufuh2o發表於2009-11-16

standby的 3種保護模式

 

maximum protection最高保護模式:
要求

要求
redo寫程式:LGWR
網路傳輸:sync
,磁碟i/0 :affirm ,預設(noaffirm)
需要standbylogfile
設定為這個後:
當主庫primary寫redo日誌的時候 必須同時寫入standby standbylogfile,全完後事務才會提交,如果故障導致主資料庫無法向至少一個遠端
備重做日誌寫其重做流,則主資料庫會關閉


maximum availability 最高實用性
要求:
redo寫程式:LGWR
網路傳輸 sync
磁碟i/o affirm
需要 standbylogfile
 
設定後:當主庫primary寫redo日誌時候,必須同時寫入standby standbylogfile ,完成後事務才可以提交,當有故障導致主庫無法寫重做流到備用庫的standby logfile時候,主庫會自動轉為‘最大效能’模式繼續執行 直到故障消除時候~自動轉為 最高可用性~~~~~,不會shutdown 主庫

 

 

Maximum performance 最大效能

要求
rodo寫程式: lgwr,arcn
網路傳輸:SYNC ,ASYNC
磁碟i/o affirm ,noaffirm
standbylogfile ,可以要,也可以不要
設定後:primary寫redo時候,事務就可以提交,寫入也可是不同步的,有故障導致無法寫入時候,不會shutdown 主庫

 


實驗 3種方式SQL> select protection_mode,db_unique_name,open_mode,database_role from v$databa    (standby)
se;

PROTECTION_MODE      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE
-------------------- ------------------------------ ---------- ----------------
MAXIMUM PERFORMANCE  standby1                       READ ONLY  PHYSICAL STANDBY


SQL> select protection_mode,db_unique_name,open_mode,database_role from v$databa   (primary)
se
  2  ;

PROTECTION_MODE      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE
-------------------- ------------------------------ ---------- ----------------
MAXIMUM PERFORMANCE  xh                             READ WRITE PRIMARY

預設情況是 最高效能模式

 

SQL> col dbid format a10
SQL> select dbid,group#,bytes,status ,first_change#,last_change# from v$standby (standby)
log;

DBID           GROUP#      BYTES STATUS     FIRST_CHANGE# LAST_CHANGE#
---------- ---------- ---------- ---------- ------------- ------------
3097375337          4   52428800 ACTIVE           1480745      1481300
UNASSIGNED          5   52428800 UNASSIGNED             0            0

 

SQL> show parameter log_archive_dest_2  (primary)

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2                   string      service=standby1 lgwr net_time
                                                 ut=10 db_unique_name=standby1
SQL> alter system set log_archive_dest_2='service=standby1 affirm lgwr sync db_u   (primary)
nique_name=standby1';

系統已更改。

 


最高保護模式
SQL> startup force mount  (primary)
ORACLE 例程已經啟動。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size             104858304 bytes
Database Buffers          176160768 bytes
Redo Buffers                7139328 bytes
資料庫裝載完畢。
SQL> alter database set standby database to maximize protection;  (primary)

資料庫已更改。

SQL> alter database open; (primary)

資料庫已更改。

 

SQL> select protection_mode,db_unique_name,open_mode,database_role from v$databa   (standby )
se;

PROTECTION_MODE      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE
-------------------- ------------------------------ ---------- ----------------
MAXIMUM PROTECTION   standby1                       READ ONLY  PHYSICAL STANDBY


SQL> select protection_mode,db_unique_name,open_mode,database_role from v$databa  (primary)
se;

PROTECTION_MODE      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE
-------------------- ------------------------------ ---------- ----------------
MAXIMUM PROTECTION   xh                             READ WRITE PRIMARY


現在是 最高保護模式, STANDBY 不允許 shutdown
SQL> shutdown immediate;(standby )
ORA-01154: 資料庫忙。現在不允許開啟, 關閉, 裝載和解除安裝
SQL> alter database recover managed standby database cancel;  (standby )
alter database recover managed standby database cancel  
*
第 1 行出現錯誤:
ORA-16136: 受管備用恢復未啟用


SQL> shutdown immediate; (standby )
ORA-01154: 資料庫忙。現在不允許開啟, 關閉, 裝載和解除安裝


SQL> select group# from v$standby_log;

    GROUP#
----------
         4
         5

SQL> alter database drop standby logfile group 4;
alter database drop standby logfile group 4
*
第 1 行出現錯誤:
ORA-00261: 正在歸檔或修改日誌 4 (執行緒 1)
ORA-00312: 聯機日誌 4 執行緒 1: 'E:\STANDBY\STANDBY04.LOG'

正在使用的 standby logfile 是不允許刪除的

SQL> alter database drop standby logfile group 5;

資料庫已更改。

沒使用的 standby logfile可以刪除


SQL> alter database add standby logfile group 5 'e:\standby\standby05.log' reuse
;

資料庫已更改。

SQL>

 

 


最高實用性


SQL> startup force mount(primary)
ORACLE 例程已經啟動。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size             109052608 bytes
Database Buffers          171966464 bytes
Redo Buffers                7139328 bytes
資料庫裝載完畢。


SQL> alter database set standby database to MAximize AVAILABILITY; (primary)

資料庫已更改。

SQL> alter database open; (primary)

資料庫已更改。

SQL> select protection_mode,db_unique_name,open_mode,database_role from v$databa   (primary)
se;

PROTECTION_MODE      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE
-------------------- ------------------------------ ---------- ----------------
MAXIMUM AVAILABILITY xh                             READ WRITE PRIMARY


SQL> select protection_mode,db_unique_name,open_mode,database_role from v$databa   (standby)
se;

PROTECTION_MODE      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE
-------------------- ------------------------------ ---------- ----------------
MAXIMUM AVAILABILITY standby1                       READ ONLY  PHYSICAL STANDBY


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

當standby 關閉,在最高可用性模式時候,PRIMARY 的redo傳輸不到standby,primary會自動轉換成 最高效能模式

 

 

關於日誌應用
SQL> select dest_id,status,applied_seq#,recovery_mode from v$archive_dest_status   (standby)
;

   DEST_ID STATUS    APPLIED_SEQ# RECOVERY_MODE
---------- --------- ------------ -----------------------
         1 VALID                0 IDLE
         2 VALID                0 IDLE
         3 INACTIVE             0 IDLE
         4 INACTIVE             0 IDLE
         5 INACTIVE             0 IDLE
         6 INACTIVE             0 IDLE
         7 INACTIVE             0 IDLE
         8 INACTIVE             0 IDLE
         9 INACTIVE             0 IDLE
        10 INACTIVE             0 IDLE
        11 VALID              103 IDLE

已選擇11行。

SQL> select process,client_process,status,sequence# from v$managed_standby;  (standby)

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CLOSING             110
ARCH      ARCH     CLOSING             111
RFS       LGWR     IDLE                112
RFS       ARCH     IDLE                  0
RFS       UNKNOWN  IDLE                  0
SQL> alter database recover managed standby database using current logfile disco   (standby)
nnect from session;

 這是 開啟實時應用,既應用主庫由LGWR 傳遞的日誌(經過LNSN,RFS)到standby的 standby logfile,由standby的MPR0程式應用


SQL> select dest_id,status,applied_seq#,recovery_mode from v$archive_dest_status (standby)
;

   DEST_ID STATUS    APPLIED_SEQ# RECOVERY_MODE
---------- --------- ------------ -----------------------
         1 VALID                0 MANAGED REAL TIME APPLY
         2 VALID                0 MANAGED REAL TIME APPLY
         3 INACTIVE             0 MANAGED REAL TIME APPLY
         4 INACTIVE             0 MANAGED REAL TIME APPLY~~~~~~~~~~ 狀態為 實時應用
         5 INACTIVE             0 MANAGED REAL TIME APPLY
         6 INACTIVE             0 MANAGED REAL TIME APPLY
         7 INACTIVE             0 MANAGED REAL TIME APPLY
         8 INACTIVE             0 MANAGED REAL TIME APPLY
         9 INACTIVE             0 MANAGED REAL TIME APPLY
        10 INACTIVE             0 MANAGED REAL TIME APPLY
        11 VALID              103 MANAGED REAL TIME APPLY

已選擇11行。

SQL> select process,client_process,status,sequence# from v$managed_standby; (standby)

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CLOSING             110
ARCH      ARCH     CLOSING             111
RFS       LGWR     IDLE                112
RFS       ARCH     IDLE                  0
RFS       UNKNOWN  IDLE                  0
MRP0      N/A      APPLYING_LOG        107~~~~~~~~~~~~~~~~多了mpro程式,狀態為 應用 日誌

已選擇6行。


SQL>  alter database recover managed standby database cancel;(結束 standby恢復)

資料庫已更改。

SQL> select process,client_process,status,sequence# from v$managed_standby;  (standby)

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CLOSING             110
ARCH      ARCH     CLOSING             111
RFS       LGWR     IDLE                112
RFS       ARCH     IDLE                  0
RFS       UNKNOWN  IDLE                  0

SQL> select dest_id,status,applied_seq#,recovery_mode from v$archive_dest_status   (standby)
;

   DEST_ID STATUS    APPLIED_SEQ# RECOVERY_MODE
---------- --------- ------------ -----------------------
         1 VALID                0 IDLE
         2 VALID                0 IDLE
         3 INACTIVE             0 IDLE
         4 INACTIVE             0 IDLE
         5 INACTIVE             0 IDLE
         6 INACTIVE             0 IDLE
         7 INACTIVE             0 IDLE
         8 INACTIVE             0 IDLE
         9 INACTIVE             0 IDLE
        10 INACTIVE             0 IDLE
        11 VALID              103 IDLE

已選擇11行。

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

資料庫已更改。

應用 standby接收primary的archived log (由於配置了standby logfile那麼archived log為standby logfile的歸檔)
SQL> select process,client_process,status,sequence# from v$managed_standby;

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CLOSING             110
ARCH      ARCH     CLOSING             111
RFS       LGWR     IDLE                112
RFS       ARCH     IDLE                  0
RFS       UNKNOWN  IDLE                  0
MRP0      N/A      WAIT_FOR_LOG        112  ~~~注意mpr0的狀態 為等待 archive_log,有了 新的 未應用的archive_log,狀態會為APPLYING_LOG

已選擇6行。

SQL> select dest_id,status,applied_seq#,recovery_mode from v$archive_dest_statu
;

   DEST_ID STATUS    APPLIED_SEQ# RECOVERY_MODE
---------- --------- ------------ -----------------------
         1 VALID                0 MANAGED
         2 VALID                0 MANAGED
         3 INACTIVE             0 MANAGED~~~~~~~~~~~~~~~~~~~~~~~狀態為管理模式
         4 INACTIVE             0 MANAGED
         5 INACTIVE             0 MANAGED
         6 INACTIVE             0 MANAGED
         7 INACTIVE             0 MANAGED
         8 INACTIVE             0 MANAGED
         9 INACTIVE             0 MANAGED
        10 INACTIVE             0 MANAGED
        11 VALID              103 MANAGED

已選擇11行。

SQL>  alter database recover managed standby database cancel;

資料庫已更改。

 

關於disconnect  from session 子句

SQL> alter database recover managed standby database ; 不加的話 執行恢復 standby的session將 hang住

SQL> alter database recover managed standby database cancel; (只有在standby的 另一session關閉恢復,hang住的session 才可以繼續操作)

資料庫已更改。
SQL> alter database recover managed standby database ;
alter database recover managed standby database
*
第 1 行出現錯誤:
ORA-16043: 已取消維持的恢復會話
ORA-16037: 使用者已請求取消受管恢復操作

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

相關文章