zoukankan      html  css  js  c++  java
  • oracle data guard --理论知识回顾01

    之前搭建了rac到单实例的dg环境,最近又在windows下搭建了dg,这一篇关于dg的一些理论知识回顾

    官方文档

    https://docs.oracle.com/cd/E11882_01/nav/portal_14.htm

    data guard服务
    1 redo传输服务 (redo transport services)
    redo传输服务不仅控制传输redo数据到指定归档路径下,同时还管理解决由于网络中断造成的归档文件未接收的过程

    --1 如何发送数据
    在primary数据库中,dg使用归档进程ARCn或者日志写进程(LGWR)收集redo数据并传输到standby数据库,这2个
    进程都由一个核心参数来控制,LOG_ARCHIVE_DEST_n
    LOG_ARCHIVE_DEST_n(n值1~10)定义发送redo的目的地,通过location或service关键字指明归档文件的路径(同时
    只能设置一个属性),其中指定location时表示归档路径为本地路径,指定service时,则指向一个net service name,
    即接收redo数据的standby数据库。
    对于每一个LOG_ARCHIVE_DEST_n都有一个对应的LOG_ARCHIVE_DEST_STATE_n参数来指定是否生效
    --ENABLE,默认值,表示允许传输服务
    --DEFER,指定对应的LOG_ARCHIVE_DEST_n参数有效,但暂时不使用该归档路径
    --ALTERNATE:禁止传输,但是如果其他相关的目的地都连接失败,它将边长ENABLE
    --RESET:功能与defer类型,不过如果传输目的地之前有过错误,会清除其所有错误信息

    *.log_archive_dest_1='location=C:appAdministratorfast_recovery_areaorclbkARCHIVELOG'
    *.log_archive_dest_2='service=orcl_192.168.19.197'
    *.log_archive_dest_state_1='ENABLE'
    *.log_archive_dest_state_2='ENABLE'

    可以使用视图V$ARCHIVE_DEST查看参数配置

    standby > select dest_name,db_unique_name,destination from v$archive_dest
    LOG_ARCHIVE_DEST_1    orclbk    C:appAdministratorfast_recovery_areaorclbkARCHIVELOG
    LOG_ARCHIVE_DEST_2    orcl    orcl_192.168.19.197

    2 使用ARCn进程发送redo数据
    默认情况,redo传输服务使用ARCn进程发送redo数据,不过ARCn归档进程只支持最高性能保护模式,如果standby数据库处于
    其他类型的保护模式,必须使用LGWR传输redo数据
    --初始化参数控制ARCn进程归档行为
    ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=N;
    0<N<=30
    --ARCn的归档过程
    主库日志发送切换时就会启用归档过程,其中归档操作可以分在主库端和备库端
    --1在primary数据库(假设有2个归档进程)端操作,一旦ARC0进程完成online redologs的归档,ARC1进程即开始传输该归档中的redo
    数据到standby数据库指定的路径
    --2在standby数据库端操作,RFS(remote file server)进程将redo数据写入standby redologs(如果创建了standby redologs的话),再有
    standby数据库中的ARCn进程将其写入归档,然后通过redo应用或者sql应用将数据应用到standby数据库。

    3 使用LGWR归档redo数据
    使用LGWR进程与使用ARCn进程有明显的的不同,LGWR进程并不需要等待online redologs完成切换归档
    standby数据库的LGWR进程会先选择一个standby redologs文件映射primary数据库中当前活动的online redologs;
    如果standby数据库没有创建standby redologs文件,则standby数据库会自动在默认的location归档路径下创建一个归档文件,替代
    standby redologs的功能,一旦primary数据库有redo数据产生,视log_archive_dest_n初始化参数中SYNC或ASYNC属性设置,以
    同步或者非同步方式传输到standby数据库
    --如果选择lgwr传输redo,log_archive_dest_1中指定server和lgwr两个属性,SYNC(同步-默认)/ASYNC(异步)方式传输
    --指定ASYNC,primary数据库的操作会先记录在本地的redo log,然后在传输到standby数据库。
    --SYNC,primary数据库任何会产生redo数据的操作都会同步触发网络I/O,并且等到网络I/O全部完成才会继续下面的提交。
    --1 LGWR同步归档的流程

    *.log_archive_dest_1='location=C:appAdministratorfast_recovery_areaorclbkARCHIVELOG'
    *.log_archive_dest_2='service=orcl_192.168.19.197 LGWR SYNC NET_TIMEOUT=30'
    *.log_archive_dest_state_1='ENABLE'
    *.log_archive_dest_state_2='ENABLE'

    LGWR进程以同步模式传输redo
    primary库LGWR写online redologs的同时,同步传输redo到standby数据库,解读:
    --在primary端,LGWR提交的redo数据由LNSn(LGWR network server process,n>0)进程,发送至远端的standby数据库
    --standby端的RFS(remote file server)进程将接受到的redo 数据写入standby redologs。特别注意,在此期间,primary数据库
    的事务会一直保持,知道含LGWR SYNC属性的log_archive_dest_n指定路径完成接收。
    如果由于某些原因导致standby端无法正常接收redo数据(网络闪断),那么连primary数据库也会受到影响,提交的事务一直等待,
    正因如此,前面提到SYNC方式传输redo时,建议同时设置NET_TIMEOUT属性

    --2 LGWR异步归档流程

    *.log_archive_dest_1='location=C:appAdministratorfast_recovery_areaorclbkARCHIVELOG'
    *.log_archive_dest_2='service=orcl_192.168.19.197 LGWR ASYNC'
    *.log_archive_dest_state_1='ENABLE'
    *.log_archive_dest_state_2='ENABLE'

    ASYNC方式归档就不再需要指定NET_TIMEOUTl ,因为LGWR和LNSn之间没有关联。

    4 安全传输redo数据
    除了正确设置log_archive_dest_n等相关参数,确保redo数据传输到适当数据库外,dg还提供了密码验证的方式确保
    redo数据不被错误的传输到其他机器,
    redo传输服务在传输reod数据时,要使用认证的网络会话信息,经过认证的会话信息来自密钥文件,一定要确保primary
    和standby的sys密码相同。

    什么时候发送
    1 valid_for属性指定传输及其接收对象
    log_archive_dest_n参数中的valid_for属性,用来指定传输的内容
    --redo_log_type:online_logfile,standby_logfile,all_logfiles
    --database_role: primary_role,standby_role,all_roles
    默认值valid_for(all_logfiles,all_roles)
    通过db_unique_name属性指定数据库
    db_unique_name是10g版本新增加的一个关键字,作用是指定唯一的oracle数据库名称

    出错了这么办
    对于归档失败的问题,log_archive_dest_n参数有几个属性,可以用来控制归档过程中出现故障时应该采取的措施
    1 reopen指定时间后再次尝试归档
    使用reopen=seconds(默认300秒),在指定时间重复尝试向归档目的地进程归档操作

    log_archive_dest_2='SERVER=orcl_192.168.19.197 LGWR ASYNC REOPEN=100'

    2 alternate指定替补的归档目的地

    *.log_archive_dest_1='location=C:appAdministratorfast_recovery_areaorclbkARCHIVELOG'
    *.log_archive_dest_state_1='ENABLE'
    *.log_archive_dest_2='location=C:appAdministratorfast_recovery_areaorclbkARCHIVELOG_2'
    *.log_archive_dest_state_2='ALTERNATE'

    当log_archive_dest_1路径下无法归档时,自动尝试向log_archive_dest_2路径下归档文件
    3 MAX_FAILURE控制失败尝试次数

    log_archive_dest_2='SERVER=orcl_192.168.19.197 LGWR ASYNC REOPEN=100 MAX_FAILURE=3'

    管理日志文件
    1 指定临时归档路径
    默认情况下,接收到的归档都是写到log_archive_dest_1中指定的location路径下,对于standby数据库,
    还有另外一个用来指定standby接收到的归档路径standby_archive_dest

    select dest_name,archived_thread#,archived_seq#,applied_thread#,applied_seq#,db_unique_name,destination from v$archive_dest_status where status='VALID';
    STANDBY_ARCHIVE_DEST    1    1847    1    1847    NONE    C:appAdministratorfast_recovery_areacadbkARCHIVELOG

    2 重用online redologs文件
    对于standby下的online redologs能否重用不仅仅依赖归档是否完成,还受属性制约
    log_archive_dest_2中可选的属性:OPTIONAL或者MANDATORY(表示日志文件必须成功归档到指定的路径下,否则该日志文件不能被重用)
    OPTIONAL,表示无论是否成功归档到指定路径,要被归档的日志文件都可以重用,默认属性OPTIONAL

    3 设置控制文件中记录重用及增长规则
    归档文件产生的记录也会保存在控制文件中,控制文件的大小是有限的,一旦控制文件达到最大值,alert就会
    产生krcpwnc:following controlfile record wirtten over
    控制文件最大不超过20000个数据块,大小不超过320M

    SYS@ orcl >select type,records_total,records_used from v$controlfile_record_section where type='ARCHIVED LOG';
    
    TYPE                 RECORDS_TOTAL RECORDS_USED
    ---------------------------- ------------- ------------
    ARCHIVED LOG                   308        200

    control_file_record_keep_time 默认7天,最大值不超过365

    4 多个standby间共享文件路径
    如,两个standby数据库orclbk1和orclbk2在同一台服务器上,primary数据端只要设置就能实现

    *.log_archive_dest_2='service=orclbk1 LGWR ASYNC'
    *.log_archive_dest_3='service=orclbk2 LGWR ASYNC DEPENDENCY=log_archive_dest_2'

    那么primary在发送redo数据时,并不需要发送相同的数据到两个远端的归档路径,只要将相关数据发送到
    log_archive_dest_2指定的路径下即可

    log应用服务(log apply service)

    默认情况下,log应用服务会等到单个归档文件全部接受成功后在启动应用,如果standby 数据库配置了standby redologs,
    就可以打开实时应用(Real-Time Apply),这样dg就不需要等待接收完归档文件,只要RFS进程将redo写入standby redologs,
    即可通过MRP/LSP实时写向standby数据库。
    1 redo数据实时应用

    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

    2 redo数据延迟应用

    SQL> alter system set log_archive_dest_3='service=orcl_192.168.19.197  arch valid_for=(online_logfiles,primary_role) db_unique_name=orcl delay=15'   scope=both sid='*';
    --delay=15 分钟

    不过如果在启动redo指定了实时应用redo,即使指定了delay属性也会忽略

    SQL> alter database recover manager standby database nodelay;---取消延时属性

    应用redo数据到standby数据库
    物理standby启动redo应用,数据库要处于mount或者open read only状态

    SQL> alter database recover managed standby database disconnect;
    停止redo应用
    SQL> alter database recover managed standby database cancel;

    选择保护模式

      最大保护  最大可用 最高性能
    redo写进程 LGWR LGWR LGWR或ARCH
    网络传输模式 SYNC SYNC LGWR进程时SYNC或ASYNC,ARCH时SYNC
    磁盘写操作 AFFRIM AFFRIM AFFRIM或者NOAFFRIM
    是否需要standby redologs YES YES 可以没有,推荐有

    1 查看当前的保护模式

    select protection_mode,protection_level from v$database;
    MAXIMUM PERFORMANCE    MAXIMUM PERFORMANCE

    2 修改初始化参数

    SQL> alter system set log_archive_dest_3='service=orcl_192.168.19.197  LGWR SYNC AFFRIM valid_for=(online_logfiles,primary_role) db_unique_name=orcl'   scope=both sid='*';

    3 设置新的保护模式并重启数据库

    SQL> alter database set standby database to MAXIMIZE AVAILABILITY;
    shutdown immediate;
    startup;
  • 相关阅读:
    git常用指令 github版本回退 reset
    三门问题 概率论
    如何高效的学习高等数学
    数据库6 关系代数(relational algebra) 函数依赖(functional dependency)
    数据库5 索引 动态哈希(Dynamic Hashing)
    数据库4 3层结构(Three Level Architecture) DBA DML DDL DCL DQL
    梦想开始的地方
    java String字符串转对象实体类
    java 生成图片验证码
    java 对象之间相同属性进行赋值
  • 原文地址:https://www.cnblogs.com/yhq1314/p/11091143.html
Copyright © 2011-2022 走看看