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博客 ” ,链接:https://blog.itpub.net/12020513/viewspace-619715/ ,如需转载,请注明出处,否则将追究法律责任。