dataguard 三种保护模式

1、最大保护
          这种保护模式在主库出现问题时不会有数据的丢失,为了提供这种保护模式,一个事物必须同时写本地的online redo log,和至少一个备库的redo log同步,才能commit;
  为了确保数据不会丢失,如果备库至少有一个日志不能写入,那么主库不会继续处理其他事物,而是关闭。
          在主库上的事物会尽快写入到备库上的日志后,会立刻通知主库,继续处理其他的事物,最大可能的减小主库同步的吞吐和响应时间。为了在备库上通过完整的验证,最好用real time apply
     这样备库在接受到日志后,会尽可能快的应用日志,dataguard会通知他所遇到的损坏,并快速处理
   这种数据保护模式比最高可用的数据保护模式要优先一些,oracle推荐最少有两个备库保护主库在最大保护模式,来阻止单备库故障,导致主库关闭




2、最大可用
         这种保护模式提供了最高模式,不会影响主库的可用性,但是事物在主库写本地的online redo log和至少一个备库的redo log同步才会commit;如果主库的日志不能同步到至少一个备库,为了最大可用,那么就会转换成最大性能,
          直到主库可以同步日志到至少一个备库,那么会恢复到最大可用
    这种模式,确定没有数据丢失,如果主库的出的故障,但是几秒的故障不会阻止主库完全的数据集发送的备库去


3、最大性能
这种模式提供了最高级别的数据保护,他不会影响主库的性能,他是通过事物提交后快速写日志,这些日志会通过异步传输到一个多个备库中去,所以主库的性能是不会受到影响
最大性能保护模式比最大可用在数据保护略显不足,可能会有数据丢失,但是不会影响主库的性能,这是默认的保护模式






三种保护模式的不同:
日志同步方式不同:
maximum Availability Maximum Performance Maximum Protection
磁盘写操作 AFFIRM                 NOAFFIRM                           AFFIRM
SYNC                         ASYNC                           SYNC
DB_UNIQUE_NAME DB_UNIQUE_NAME   DB_UNIQUE_NAME
standby log                 无     ,推荐最好有                               standby log


commit条件不同:
最大保护:Primary Database上的每个事务的Redo日志必须在本地和Standby Database上都写入日志文件后才能提交(如果不能写入STANDBY DATABASE,PRIMARY DATABASE 自动挂起,防止丢数据)
最高可用:Primary Database每个事务的Redo日志要写到本地和Standby Database中才能提交(与最大保护不同的是:写入STANDBY DATABASE失败,PRIMARY DATABASE不会挂起,会自动转成最大性能模式,等待问题解决后自动转成最大可用模式)
最大性能:Primary Database上的事务的Redo日志只要写到本地日志文件就可以提交,不必等待到Standby Database的传递完成




数据一致性不同:
最大保护:完全一致
最高可用:尽可能的避免数据的丢失,但不能绝对保证数据完全一致
最大性能:可以异步同步日志,可能有数据的丢失




默认是最大性能是模式保护模式




日志的传输模式:
arch:这是默认的传输日志的模式,主库在日志切换后,完成归档,才能通过arch进程传输给standby的RFS进程,这种传输日志的模式只能在最大性能模式使用
lgwr:使用lgwr方式即时传输日志给standby,主库产生事物后,会通过lgwr进程去写本地的redo和本地的lns进程,通过本地的lns进程传输日志给standby的lns进程,然后通过RFS进程写standby redo,MPR进程应用日志。
            这种方式不需要等到归档才传输日志,减少了数据的丢失,这种日志传输方式适合三种模式,但是备库必须有standby redo log


主库查看使用哪种方式进行日志传输:
SQL> select dest_name,archiver from v$archive_dest;


DEST_NAME     ARCHIVER
-------------------- ----------
LOG_ARCHIVE_DEST_1   ARCH
LOG_ARCHIVE_DEST_2   LGWR
LOG_ARCHIVE_DEST_3   ARCH
LOG_ARCHIVE_DEST_4   ARCH
LOG_ARCHIVE_DEST_5   ARCH
LOG_ARCHIVE_DEST_6   ARCH
LOG_ARCHIVE_DEST_7   ARCH
LOG_ARCHIVE_DEST_8   ARCH
LOG_ARCHIVE_DEST_9   ARCH
LOG_ARCHIVE_DEST_10  ARCH
LOG_ARCHIVE_DEST_11  ARCH
LOG_ARCHIVE_DEST_12  ARCH
LOG_ARCHIVE_DEST_13  ARCH
LOG_ARCHIVE_DEST_14  ARCH
LOG_ARCHIVE_DEST_15  ARCH
LOG_ARCHIVE_DEST_16  ARCH
LOG_ARCHIVE_DEST_17  ARCH
LOG_ARCHIVE_DEST_18  ARCH
LOG_ARCHIVE_DEST_19  ARCH
LOG_ARCHIVE_DEST_20  ARCH
LOG_ARCHIVE_DEST_21  ARCH
LOG_ARCHIVE_DEST_22  ARCH
LOG_ARCHIVE_DEST_23  ARCH
LOG_ARCHIVE_DEST_24  ARCH
LOG_ARCHIVE_DEST_25  ARCH
LOG_ARCHIVE_DEST_26  ARCH
LOG_ARCHIVE_DEST_27  ARCH
LOG_ARCHIVE_DEST_28  ARCH
LOG_ARCHIVE_DEST_29  ARCH
LOG_ARCHIVE_DEST_30  ARCH
LOG_ARCHIVE_DEST_31  ARCH


31 rows selected.




一般而言,standby redo 日志文件组数要比primary 数据库的online redo 日志文件组数至少多一个。推荐standby redo 日志组数量基于primary 数据库的线程数(这里的线程数可以理解为rac 结构中的rac节点数)。
有一个推荐的公式可以做参考:(每线程的日志组数+1)*最大线程数




备库添加standby log:
SQL> alter database drop standby logfile '/archive/1_0_815224926.arc';


Database altered.


SQL> select * from v$logfile;


   GROUP# STATUS  TYPE    MEMBER    IS_
---------- ------- ------- ---------------------------------------- ---
3   ONLINE  /u01/app/oracle/oradata/redo03.log    NO
2   ONLINE  /u01/app/oracle/oradata/redo02.log    NO
1   ONLINE  /u01/app/oracle/oradata/redo01.log    NO


SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby01.log' size 50M;


Database altered.


SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby02.log' size 50M;


Database altered.


SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby03.log' size 50M;


Database altered.


SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby04.log' size 50M;


Database altered.


SQL> select * From v$logfile;


   GROUP# STATUS  TYPE    MEMBER    IS_
---------- ------- ------- ---------------------------------------- ---
3   ONLINE  /u01/app/oracle/oradata/redo03.log    NO
2   ONLINE  /u01/app/oracle/oradata/redo02.log    NO
1   ONLINE  /u01/app/oracle/oradata/redo01.log    NO
4   STANDBY /u01/app/oracle/oradata/standby01.log    NO
5   STANDBY /u01/app/oracle/oradata/standby02.log    NO
6   STANDBY /u01/app/oracle/oradata/standby03.log    NO
7   STANDBY /u01/app/oracle/oradata/standby04.log    NO


7 rows selected.

为了防止出现什么切换过程中的问题,所以开启了闪回
SQL> alter database FLASHBACK ON;
Database altered.
SQL>  select FLASHBACK_ON from v$database;


FLASHBACK_ON
------------------
YES


SQL> select current_scn from v$database;
CURRENT_SCN
-----------
    2337163


从低到高:
最大性能----》 最大可用-----》最最大保护
需要在mount状态一步的切换,但是反过来不需要在mount下切换,open状态就可以
              1、查看参数文件
                         *.DB_NAME=rac
*.DB_UNIQUE_NAME=rac
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(rac,orcl)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/archive  VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac'
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.FAL_SERVER=rac
*.fal_client=orcl
*.DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/','/u01/app/oracle/oradata/rac/'
*.LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/','/u01/app/oracle/oradata/rac/'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.STANDBY_ARCHIVE_DEST='/archive'
              2、修改参数文件
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
参数没有问题,是lgwr async affirm或者lgwr sync affirm都可以
通过动态修改: 在主库
alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr SYNC affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' scope=both







三种保护模式的切换:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(rac,orcl)';


在主库执行:只需要在主库执行,备库就会跟这改变
SQL> ALTER DATABASE  SET STANDBY DATABASE TO MAXIMIZE {AVAILABILITY | PERFORMANCE | PROTECTION};
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS  from v$database;
OPEN_MODE     PROTECTION_MODE  PROTECTION_LEVEL     SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE     MAXIMUM AVAILABILITY RESYNCHRONIZATION    TO STANDBY


正常情况下  PROTECTION_LEVEL 是 MAXIMUM AVAILABILITY




出了点问题 , RESYNCHRONIZATION  ,需要重新同步
SQL> select thread#, sequence#, status from v$log;


   THREAD#  SEQUENCE# STATUS
---------- ---------- ----------------
1  412 INACTIVE
1  413 ACTIVE
1  414 CURRENT


在备库执行:


SQL> select thread#, max(sequence#) from v$archived_log where applied='YES' group by thread#;
   THREAD# MAX(SEQUENCE#)
---------- --------------
1      410


SQL> alter database recover managed standby database disconnect from session;
Database altered.
最后发现参数文件让我给修改错误了,DB_UNIQUE_NAME是备库的名称
alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr SYNC affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' scope=both


SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS  from v$database;


OPEN_MODE     PROTECTION_MODE  PROTECTION_LEVEL     SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE     MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY TO STANDBY


查看备库:
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS  from v$database;


OPEN_MODE     PROTECTION_MODE  PROTECTION_LEVEL     SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
MOUNTED     MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY NOT ALLOWED


主库查看产生的最大归档号:
SQL>  select max(sequence#) from v$archived_log;


MAX(SEQUENCE#)
--------------
  422


备库查看产生的归档:
SQL> select sequence#,thread#,resetlogs_id from v$archived_log;


 SEQUENCE#    THREAD# RESETLOGS_ID
---------- ---------- ------------
       403    1 815224926
       404    1 815224926
       405    1 815224926
       406    1 815224926
       407    1 815224926
       408    1 815224926
       409    1 815224926
       410    1 815224926
       411    1 815224926
       412    1 815224926
       413    1 815224926
       414    1 815224926
       415    1 815224926
       416    1 815224926
       417    1 815224926
       418    1 815224926
       419    1 815224926
       420    1 815224926
       421    1 815224926
       422    1 815224926


20 rows selected.
SQL> 


从高到低:
最大性能-《--- 最大可用《-----最最大保护


直接在主库进行切换,不用修改参数文件
在主库执行:


SQL> alter database set standby database to maximize availability;


Database altered.


SQL>  select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS  from v$database;


OPEN_MODE     PROTECTION_MODE  PROTECTION_LEVEL     SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE     MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY TO STANDBY


SQL> alter database set standby database to maximize performance;


Database altered.


SQL>  select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS  from v$database;


OPEN_MODE     PROTECTION_MODE  PROTECTION_LEVEL     SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE     MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  TO STANDBY

















































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值