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;
  • 相关阅读:
    mongodb性能测试:long时间戳与string格式时间
    .netcore mongodb 分页+模糊查询+多条件查询
    .netcore 图片处理
    ELEMENT-UI 封装el-table 局部刷新row
    vue-upload 封装组件-上传组件
    vue实现v-model父子组件间的双向通信
    cc.AudioSource
    Chrome插件:本地程序实现验证码破解(浏览器与本地进程通信)
    Chrome插件:微信公众号自动登录(chrome.extension)
    Chrome插件:浏览器后台与页面间通信
  • 原文地址:https://www.cnblogs.com/yhq1314/p/11091143.html
Copyright © 2011-2022 走看看