DG archive gap

摘要:
ARCH RFSHeartbeatPing执行当前和间隙之间的日志序列的序列查询,并发现其中一个解决了另一个。解决间隙后,ARCH/LGWR进程将收到间隙已解决的通知,然后继续发送重做FALMapResolutionStandby将在收到存档日志或备用重做信息后在备用控制文件中注册。可以指定多个,FAL将尝试这些TNS Alias请求archivlog来解决差距。FAL_客户:11.2开始报废。手动间隙解决当间隙无法自动解决时,需要手动解决。SQL˃从v$archive_gap中选择*;您可以通过以下SQL查询是否存在GAP:setlines200pages100columndb_nameformata9columndabase_roleformata13columnhread#format9999breakonthread#skip1selectedb_name,thread#,database_role,sequence#from,unionalseselectedb_ name,thread#,database_role,seque#from,orderbythread#、database_role;需要注意的是,一些重做已应用于备用内存,但尚未写入磁盘。此时,在主端查询的APPLICED仍然为NO,您只需要刷新备用端的缓冲区_Cache。

什么是archive gap

Archive Gap就是standby端日志应用的过程中丢失的一段范围的redo.典型的发生在standby端不能接收primary的redo信息或者接收后不能应用这些redo.

一旦出现GAP,则standby端的Log Apply Services将会暂停,直到Gap解决后恢复正常。

产生Archive Gap的可能原因:

 - 网络或者日志传输服务中断

 - standby故障

 - 日志传输服务配置错误

 - standby端I/O异常

 - 在archivelog应用到standby之前被手工删除

 - 带宽不足

GAP的处理

Automatic Gap Resolution

自动Gap处理由Log Transport Services自动执行。11.2开始,通过比较当前要传输的日志和standby最后接收到的日志信息,如果中间有丢失的redo,将会通过ARCH-RFS Heartbeat Ping机制自动向primary请求丢失的log序列。这种Gap解决类型采用参数LOG_ARCHIVE_DEST_n配置的SERVICE定义。ARCH-RFS Heartbeat Ping执行current和Gap之间日志序列的顺序询问,发现一个解决一个。Gap解决完成后,ARCH/LGWR进程将会被通知Gap已解决,然后继续传输redo.

FAL(Fetch Archive Log) Gap Resolution

Standby接收到archivelog,或者standby redolog接收redo信息后,将会注册到standby controlfile中。如果由于某种原因丢失或者其中某个redo不可用,FAL将会请求执行GAP解决。使用FAL,则需要设置相关的参数。

FAL_SERVER:执行向哪个DB(primary/standby)请求archivelog的TNS-Alias或连接串。可以指定多个,FAL将会顺序尝试这些TNS-Alias请求archivelog解决Gap.

FAL_CLIENT: 11.2开始废弃。11.1之前指定standby的TNS-Alias,11.1指定为standby的DB_UNIQUE_NAME,用来响应FAL_SERVER.

当Log Apply Services发现Gap,将会发送FAL请求到FAL_SERVER.FAL_SERVER的ARCH进程

尝试获得并发送请求的日志序列到FAL_CLIENT。如果FAL_SERVER指定的TNS-Alias中第一个请求不成功,将会顺序的尝试向第二个TNS请求。如果轮询一遍后均请求失败,则在alert log中抛出错误。

FAL机制从9.2 physical standby,10.1的logical standby开始出现。

Manual Gap Resolution

当Gap不能自动解决时,则需要手工去解决。

物理standby通过查询V$ARCHIVE_GAP视图查看当前的GAP,此视图存在一些已知BUG。

SQL> select * from v$archive_gap;

可通过以下SQL查询是否存在GAP:

set lines 200 pages 100

column db_name format a9

column database_role format a13

column thread# format 9999

break on thread# skip 1

select db_name,thread#,database_role,sequence# from

(select name db_name from v$database),

(select 'Primary' database_role,thread#,sequence# from (select unique thread#, max(sequence#) over (partition by thread#) as sequence# from v$archived_log where standby_dest='NO' and archived='YES'))

union all

select db_name,thread#,database_role,sequence# from

(select name db_name from v$database),

(select 'Standby' database_role,thread#,sequence# from (select unique thread#, max(sequence#) over (partition by thread#) as sequence# from v$archived_log where standby_dest='YES' and archived='YES'))

order by thread#,database_role;

需要注意的是,有的redo已经在standby内存中应用,还未写入磁盘,此时在primary端查询的APPLIED仍然为NO,只需要在standby端刷新一下buffer_cache即可。

SQL> alter system flush buffer_cache;

如果存在GAP,则拷贝GAP日志序列到standby,并手工注册。

SQL> alter database register logfile 'log-file';

Roll forward using Incremental Backup(Physical standby only)

从10.2开始,如果上述方法均不能解决Gap,则可以采用指定SCN的增量备份解决Gap.

查询standby最后应用日志的SCN,在primary指定该SCN做一个RMAN增量备份和for standby的controlfile备份,在standby端,恢复新的standby controlfile,然后应用增量备份。

可以参考ONLINE Document<Oracle Data Guard Concepts and Administration>

<Using RMAN Incremental Backups to Roll Forward a Physical Standby Database>章节

MOS(文档 ID 836986.1)<Steps to perform for Rolling Forward a Physical Standby Database using RMAN Incremental Backup>

免责声明:文章转载自《DG archive gap》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java的IO流以及输入流与输出流的异同多线程中,ResultSet为空,报错空指针下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MyCAT-安装配置读写分离

一、下载安装 1.1  下载安装jdk 下载地址 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 解压安装 tar zxvf jdk-8u261-linux-x64.tar.gz -C /usr/local/ 配置环境变量 export JAVA_HO...

git 系列4(文件提交历史)

1 查看文件提交历史,可以用git log 命令 默认不使用任何参数的话,git log会提交时间列出的所有的更新,最近的排在最上面;每次更新都有一个 SHA-1 校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明。 git log --stat快速查看文件有了哪些改动 git log -p -2  查看提交文件的不同之处,-2是...

解决Windows Git Bash中文乱码问题

在git 安装目录 etc 下面 添加以下配置信息   1,/etc/gitconfig:   [gui]   encoding = utf-8 #代码库统一用urf-8,在git gui中可以正常显示中文   [i18n]   commitencoding = GB2312 #log编码,window下默认gb2312,声明后发到服务器才不会乱码   [...

keepalived日志

默认日志存放在/var/log/messages 一、查看配置文件 # Options for keepalived. See `keepalived --help'output and keepalived(8) and # keepalived.conf(5) man pages fora list of all options. Here are t...

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。

二月 25, 2016 9:24:24 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclip...

C# 简单日志文本输出

第一种 直接文件IO流写日志文件 usingSystem.IO; public static void WriteLog(stringstrLog) { string sFilePath="d:\"+DateTime.Now.ToString("yyyyMM"); string sFileName = "rizhi" + DateTime.Now....