Redo Gap 处理与优化

简介:

理论背景

当redo data 传送发生中断时就会产生redo gap。当redo 传送恢复正常以后,redo transport service 会自动检测redo gap并发送缺失的redo 到destination。解决redo gap的时间与gap 的数量和网络有一定的关系。 Gap越少,网络越好,解决gap就会越快。

手工解决 Gap 问题

在Oracle 11g里,Data Guard 切换多了一个新的功能:flush redo。
SQL> alter system flush redo to target_db_name;
Flush 能把没有发送的redo 从主库传送到standby库。 只要主库能启动到mount 状态,
那么Flush 就可以把没有发送的归档和current online redo 发送到备库。

1 解决物理standby Gap问题

1.1 物理standby 库上执行如下SQL,判断是否存在gap:
SQL> SELECT * FROM V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
----------- ------------- --------------
1 8 11

1.2 主库查询,确认一下:
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 7 AND 11;
NAME
--------------------------------------------------------------------------------
/primary/thread1_dest/arcr_1_8.arc 
/primary/thread1_dest/arcr_1_9.arc
/primary/thread1_dest/arcr_1_10.arc

1.3 把这些归档copy到物理standby,并使用ALTER DATABASE REGISTER LOGFILE应用这些归档:

SQL> ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_7.arc';
SQL> ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_8.arc';
SQL> ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_9.arc';

2 解决逻辑standby Gap问题

2.1 对于logical standby database,在logical standby database上查询DBA_LOGSTDBY_LOG视图。 
SQL> COLUMN FILE_NAME FORMAT a55
SQL> SELECT THREAD#, SEQUENCE#, FILE_NAME FROM DBA_LOGSTDBY_LOG L WHERE NEXT_CHANGE# NOT IN 
(SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#) ORDER BY THREAD#, SEQUENCE#;

THREAD# SEQUENCE# FILE_NAME
---------- ---------- -----------------------------------------------
1 6 /disk1/oracle/dbs/log-1292880008_6.arc
1 10 /disk1/oracle/dbs/log-1292880008_10.arc

正常情况下,这里每个trhead只返回一个最高值,这里返回2个,说明的7,8,9确实了。

2.2 Copy 缺失的log file到logical standby database,然后注册:
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/disk1/oracle/dbs/log-1292880008_7.arc'; 
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/disk1/oracle/dbs/log-1292880008_8.arc';
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/disk1/oracle/dbs/log-1292880008_9.arc';

优化:

在网络条件不好的情况下,Redo transport services有2个可选的参数,可以提高恢复速度:
(1)Redo Transport Compression
压缩属性是在LOG_ARCHIVE_DEST_n 参数中指定,指定后,会在传送之前对redo data进行压缩,从减少传送的时间。 
日志文件的压缩比很高,对性能会有很大的提高。但会消耗一定的CPU 资源。
(2)Parallel Redo Transport Network Sessions
MAX_CONNECTIONS 属性同样也是在LOG_ARCHIVE_DEST_n 参数中指定,可以指定多个sesion 来同时发送redo data。

文章可以转载,必须以链接形式标明出处。

本文转自 张冲andy 博客园博客,原文链接:   http://www.cnblogs.com/andy6/p/6534376.html ,如需转载请自行联系原作者

相关文章
|
存储 SQL 关系型数据库
Undo Log、Redo Log、binlog与两阶段提交
Undo Log、Redo Log、binlog与两阶段提交
293 0
处理Dataguard日志传输gap一例
制造gap 在主库上停止向备库传输日志
|
存储 运维 关系型数据库
庖丁解InnoDB之Undo LOG
Undo Log是InnoDB十分重要的组成部分,它的作用横贯InnoDB中两个最主要的部分,并发控制(Concurrency Control)和故障恢复(Crash Recovery),InnoDB中Undo Log的实现亦日志亦数据。本文将从其作用、设计思路、记录内容、组织结构,以及各种功能实现等方面,整体介绍InnoDB中的Undo Log,文章会深入一定的代码实现,但在细节上还是希望用抽象的实现思路代替具体的代码。本文基于MySQL 8.0,但在大多数的设计思路上MySQL的各个版本都是一致的。
418 3
|
存储 关系型数据库 MySQL
庖丁解InnoDB之REDO LOG
磁盘数据库为了在保证数据库的原子性(A, Atomic) 和持久性(D, Durability)的同时,还能以灵活的刷盘策略来充分利用磁盘顺序写的性能,会记录REDO和UNDO日志,即ARIES方法。本文将重点介绍REDO LOG的作用,记录的内容,组织结构,写入方式等内容,希望读者能够更全面准确的理解REDO LOG在InnoDB中的位置。本文基于MySQL 8.0代码。
991 1
庖丁解InnoDB之REDO LOG
|
存储 SQL 关系型数据库
redo日志和undo日志区别是什么?
redo日志和undo日志区别是什么?
|
前端开发 JavaScript 算法
canvas进阶——实现Undo和Redo
不知不觉又到了周末,又到了Fly写文章的日子,今天给大家介绍下一个「web」中很常见的功能, 就是撤销和复原这样一个功能,对于任何一个画图软件,或者是建模软件。没有撤销和复原。这不是傻👁了对啊吧,所以本篇文章,可以说是基于上一篇文章Canvas 事件系统的下集,如果你没有看过,建议看完再去看这一篇文章。读完本篇文章你可以学习到什么?? 给canvas 绑定键盘事件 实现undo 和 redo 批量回退 2d包围盒算法 局部渲染 绑定键盘事件 tabindex 很多人说绑定键盘事件,有什么好讲的。对虽然很简单,但是有点小坑, 首先直接对canvas 监听键盘事件,是❌不行的。这里涉及到一个小
canvas进阶——实现Undo和Redo
|
存储 运维 关系型数据库
庖丁解InnoDB之UNDO LOG
本文将从其作用、设计思路、记录内容、组织结构,以及各种功能实现等方面,整体介绍InnoDB中的Undo Log​。
310 0
庖丁解InnoDB之UNDO LOG
|
SQL Oracle 关系型数据库
dataguard gap
解决gap
116 0
|
关系型数据库 MySQL SQL
Innodb undo之 undo结构简析
水平有限,如果有误请指出 参考: 阿里内核月报 姜老师的MySQL内核:innodb存储引擎 做一个简单的记录,自己备用 一、大体结构 rollback segments(128) undo segments(1024) undo log (header insert/modify .
1587 0