日期:2014-05-16  浏览次数:20458 次

Oracle GoldenGate 系列:Extract 进程的恢复原理

Extract 进程恢复原理

BR

适用于 Extract 进程(仅适用于 Oracle数据库)

使用 BR 参数可以控制 GoldenGate 的 Bounded Recovery (BR) 功能。Bounded Recovery 功能仅支持 Oracle 数据库。Bounded Recovery 是通用 Extract 检查点工具的组件之一,可以保证当Extract 进程出于任何原因(计划停机或意外停机)停止后,无论在进程停止时的时间点上存在多少个未提交的事务还是这些事务持续的时间多么久,Extract 进程都能进行高效地恢复。

Bounded Recovery 为 Extract 进程恢复到停止的时间点然后恢复正常处理所花的时间设定了一个时间上限。

注意 在将此参数修改为默认设置以外的其他设置时,请联系 Oracle Support 获取指导。大多数生产环境无需修改此参数。

 

Extract 进程如何恢复未提交的事务

当 Extract 进程在 redo log 中遇到某个事务的起点(在 Oracle 中通常为第一个可执行的 sql 语句)时,便会将从该事务中捕获到的所有数据缓存到内存中。即使开始该事务不包含任何数据,

 Extract 进程也必须将事务缓存到内存中,因为该事务中后面的操作可能包含要捕获的数据。

 

当Extract 进程在 redolog 中遇到事务的 commit 记录,便会将缓存在内存中的整个事务写入trail 文件,并将其从内存中清除。当 Extract 进程遇到事务的  rollback 记录时,便会丢弃缓存中缓存的整个事务。在 Extract 进程处理 commit 或 rollback 记录之前,都会视事务为

Open状态(未提交或回滚的),并持续不断地收集该事务的信息。

如果 Extract 在遇到事务的 commit 或 rollback 记录之前停止,则在 Extract 进程重启后,必须对所有缓存在内存中的信息进行恢复。此操作适用于 Extract 进程停止时所有处于 open 状态的事务。

Extract 按照如下方式执行此恢复过程:

如果在 Extract 进程停止时,不存在处于 open 状态的事务,则恢复操作从当前的

Extract 读取检查点开始,这是正常的恢复过程。

如果 redo log 中存在起始点非常接近于 Extract 进程停止时间点的 open事务,则 Extract进程会重新读入 redolog,从其中最早的 open 事务的起始点开始恢复。此过程需要 Extract 进程对该进程停止前已经写入 trail 或 discarded 文件的事务执行额外的工作,这一重复的工作只需要处理相对较少的数据,属于可接受的成本范围内。这种恢复也可视为正常恢复。

 

如果存在一个或多个 Extract 进程视为长时间运行的 open 事务,

 则 Extract 进程便会通过 BoundedRecovery 进行恢复。

 

Bounded Recovery 的工作原理

如果事务处于 open 状态的时间超过 BR 参数的 BRINTERVAL选项中指定的Bounded

Recovery 间隔,则 OGG 就视该事务为长时间运行的 open 事务。例如,如果 Bounded Recovery 间隔为4小时,则任何持续时间超过4小时的事务都可视为长时间运行的 open 事务。每隔一个 Bounded Recovery 间隔,Extract 都会进行一次Bounded Recovery 检查点操作,该检查点操作会将 Extract 进程的当前状态和数据写入磁盘,包括任何存在的长时间运行的事务的状态和数据。如果 Extract 进程在一个Bounded Recovery检查点之后停止,则该进程将从上一个Bounded Recovery间隔点或上一个BoundedRecovery 检查点位置进行恢复,而不会从 redo log 或 archived log 中最早的长时间运行 open 事务的起始位置开始进行恢复。

 

Bounded Recovery的最大时间 (Extract 恢复到停止时间点的最大时间)永远不会超过当前 Bounded Recovery 检查点间隔的 2 倍。实际的恢复时间将由如下因素决定:

从 Extract 进程停止开始到最后一个有效的 Bounded Recovery 间隔之间的时间。

整个恢复期间 Extract 进程的处理情况。

之前写入磁盘的事务的处理时