之前搭建了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:\app\Administrator\fast_recovery_area\orclbk\ARCHIVELOG'
*.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:\app\Administrator\fast_recovery_area\orclbk\ARCHIVELOG
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:\app\Administrator\fast_recovery_area\orclbk\ARCHIVELOG'
*.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:\app\Administrator\fast_recovery_area\orclbk\ARCHIVELOG'
*.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:\app\Administrator\fast_recovery_area\orclbk\ARCHIVELOG'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_2='location=C:\app\Administrator\fast_recovery_area\orclbk\ARCHIVELOG_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:\app\Administrator\fast_recovery_area\cadbk\ARCHIVELOG

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;

oracle data guard --理论知识回顾01的更多相关文章

  1. oracle data guard --理论知识回顾02

    继上一篇 管理影响物理standby的事件 1 创建表空间或数据文件初始化参数standby_file_management用来控制是否自动将primary数据库增加表空间或数据文件的改动,传播到st ...

  2. 【原】Configuring Oracle Data Guard In Physical Standby Database

    作者:david_zhang@sh [转载时请以超链接形式标明文章] http://www.cnblogs.com/david-zhang-index/p/5042640.html参照文档:https ...

  3. Oracle Data Guard配置

    Oracle Data Guard 的配置在网上有很多资料,但是没有一个完整的,配置下来多少有些问题.在踩了各种坑之后,自己终于配置成功,就想把这过程记录下来. 1   测试环境 主数据库:windo ...

  4. 一步一步搭建 Oracle Data Guard

    前言 为什么要写前言,因为我要吐槽一下.作为一个Java后端,搭建Oracle Data Guard真的是一件,嗯,既不专业也不擅长的事情,然而,为什么还是要我来弄? 因为DBA出差了,我们这边急着要 ...

  5. Oracle Data Guard的配置

    概述 Oracle Data Guard 是针对企业数据库的最有效和最全面的数据可用性.数据保护和灾难恢复解决方案.它提供管理.监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数 ...

  6. Oracle Data Guard

    DG 是 Oracle Data Guard 的简称.也就是Oracle11g的 数据卫士. 由于在工作中 Oracle和 SQL SERVER2008 同时都需要维护管理.给我的感觉这里的 DG 其 ...

  7. (转)Oracle Data Guard学习

    一.Data Guard提供如下三种数据保护模式: 1)最高保护模式(Maximum Protection) 这里的”最高保护“是指最大限度的保护数据不丢失,也就是至少有一个standby和prima ...

  8. Oracle Data Guard 重要配置参数

    Oracle Data Guard主要是通过为生产数据库提供一个或多个备用数据库(是产生数据库的一个副本),以保证在主库不可用或异常时数据不丢失并通过备用数据库继续提供服务.对于Oracle DG的配 ...

  9. Oracle data guard学习

    Oracle data guard学习:三思笔记 Data guard 1data guard结构: data guard是一个集合,由一个primary数据库(生产数据库)和一个或多个standby ...

随机推荐

  1. RHEL6本地YUM源配置

    1.挂载本地光盘到系统   1)通过光驱将系统盘挂载到某个目录 [root@cluster01 ~]# mkdir   /mnt/cdrom [root@cluster01 ~]# mount -t ...

  2. Codeforces 899 1-N两非空集合最小差 末尾最多9对数计算 pair/链表加优先队列最少次数清空

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

  3. 机器学习降维--SVD奇异值分解

    奇异值分解是有着很明显的物理意义,将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性,让机器学会抽取重要的特征,SVD是一个重要的方法. 所以SVD不仅是一个 ...

  4. LOJ-6277-数列分块入门1(分块)

    链接: https://loj.ac/problem/6277 题意: 给出一个长为 的数列,以及 个操作,操作涉及区间加法,单点查值. 思路: 线段树可以解决,用来学习分块. 分块概念就是,将序列分 ...

  5. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)总结

    第一题又有gcd,又有xor,本来想直接弃疗,不过后来想到了个水法: 当两个相邻的数满足条件时,那么他们的倍数也可能满足条件.然后没打,只打了个暴力. 正解就是各种结论,各种定理搞搞. 第二题,想都不 ...

  6. python+selenium封装UI自动化框架

    seleinum框架 框架的思想:  解决我们测试过程中的问题:大量的重复步骤,用自动化来实现    1)配置和程序的分离    2)测试数据和程序的分离    3)不懂编程的人员可以方便使用:使用的 ...

  7. 拨号操作——android.intent.action.CALL

    button_14.setOnClickListener(new View.OnClickListener() {          @Override     public void onClick ...

  8. [jvm学习笔记]-类加载过程

    JVM类加载的过程 加载=>验证=>准备=>解析=>初始化 5个阶段所执行的具体动作 加载 在加载阶段,虚拟机需要完成3个事情1.通过一个类的全限定名获取定义此类的二进制字节流 ...

  9. sh_02_第一个while循环

    sh_02_第一个while循环 # 打印 5 遍 Hello Python # 1. 定义一个整数变量,记录循环次数 i = 1 # 2. 开始循环 while i <= 3: # 1> ...

  10. jenkins 打标签实现回滚

    背景介绍: 本项目代码存储在gitlab,再通过jenkins发布到对应的节点上. 使用tag控制版本:每一次成功的构建,jenkins会自动为gitlab的分支打上tag,版本更新可直接选择prod ...