Administering a Coordinated Replicat Configuration

本节包含有关协调线程以及在新线程或不同线程之间重新分区工作量的说明。在修改 THREAD 或 MAP 语句的 THREADRANGE 子句中的分区规范之前,应使用 STOP REPLICAT 命令完全停止协调复制。干净的停靠站确保所有线程(可能位于任何给定点的轨迹中的不同位置)都完成工作并到达共同的轨迹位置。

在启动时,如果 Replicat 检测到上次关闭未清除并且 MAP 语句中的分区已更改为包含不同数量的线程(已添加或删除线程),则会发出错误并异常终止。但是,如果在参数文件中保留了相同的线程,但只是在不同的 MAP 语句之间重新排列,则 Replicat 会发出警告,但不会异常终止。这可能会导致记录丢失或重复,因为无法确保上一运行中的线程到工作负载分配的连续性。

下面是这种情况的示例。

以下是原始分区方案:

MAP source, target, THREADRANGE(1-5);
MAP source1, target1, THREADRANGE(6-10);

以下原始方案的重新分区仅生成警告:

MAP source, target, THREADRANGE(1-4);
MAP source1, target1, THREADRANGE(5-10);

本节提供了在执行重新分区之前完全关闭复制的说明,以及有关在不干净的关闭后执行重新分区时尝试恢复复制连续性的说明。

可在协调模式下对复制组执行以下任务。

对工作量执行计划内重新分区

计划中的重新分区是指允许复制在重新启动复制之前完全关闭时,使用包含更新的线程分区的新参数文件。干净的关闭使所有线程都能够到达路径中的公共检查点位置。此时,可以在下次运行中应用新的分区方案。

  1. 运行管理客户端。

  2. 停止复制。

STOP REPLICAT *group*
  1. 打开参数文件进行编辑。
EDIT PARAMS *group*
  1. 对 MAP 语句中的 THREAD 或 THREADRANGE 规范进行必要的更改。

  2. 保存并关闭参数文件。

  3. 开始复制。

START REPLICAT *group*

在计划外重新分区后恢复复制

计划外重新分区是指不允许复制在使用包含更新的线程分区的新参数文件重新启动复制之前完全关闭。在这种情况下,一些或所有旧线程无法完成其工作并到达一个公共检查点。重新启动时,协调器线程会尝试应用旧的分区方案,复制会异常终止并显示错误。可以通过以下方式之一从此状况恢复协调的复制组:

使用 HANDLECOLLISIONS 从低水印重新处理

在此过程中,将所有线程重新定位到 low watermark 位置。这是所有线程中执行的最早检查点位置。要以另一种方式说明它,低水印位置是在不干净停止之前由最慢线程处理的最后一条记录。启动 Replicat 时,线程会重新处理它们在 Replicat 停止之前处理的操作,而 HANDLECOLLISIONS 参数会处理所有重复记录和缺失记录错误,这些错误是在不干净停止之前应用的线程重新处理操作时发生的。

  1. 将 HANDLECOLLISIONS 参数添加到 Replicat 参数文件。无需使用任何 THREADS 选项。

  2. 对整个复制组(协调器线程)发出 INFO REPLICAT 命令。记下检查点的 RBA。这是 low watermark 值。此输出还显示 Group Name 列下的活动线程 ID。还要记录这些记录。

INFO REPLICAT *group*
For example:

<pre class="copy"><code>OGG(slc03jgo) 3&gt; info ra detail REPLICAT   RA       Last Started 2013-05-01 14:15   Status ABENDEDCOORDINATED          Coordinator                      MAXTHREADS 15Checkpoint Lag       00:00:00 (updated 00:00:07 ago)Process ID           11445Log Read Checkpoint  File ./dirdat/withMaxTransOp/bg000000001                     2013-05-02 07:49:45.975662  RBA 44704Lowest Log BSN value: (requires database login)Active Threads: ID  Group Name PID   Status   Lag at Chkpt  Time Since Chkpt1   RA001     11454 ABENDED  00:00:00      00:00:01    2   RA002     11455 ABENDED  00:00:00      00:00:04    3   RA003     11456 ABENDED  00:00:00      00:00:01    5   RA005     11457 ABENDED  00:00:00      00:00:02    6   RA006     11458 ABENDED  00:00:00      00:00:04    7   RA007     11459 ABENDED  00:00:00      00:00:04</code></pre>
  1. 针对每个处理线程 ID 发出 INFO REPLICAT 命令并记录每个线程的 RBA 位置。记下 highest RBA。这是复制组的高水位标志。
INFO REPLICAT *threadID*
For example:

<pre class="copy"><code>info ra002 REPLICAT   RA002    Last Started 2013-05-01 14:15   Status ABENDEDCOORDINATED          Replicat Thread                  Thread 2Checkpoint Lag       00:00:00 (updated 00:00:06 ago)Process ID           11455 Log Read Checkpoint  File ./dirdat/withMaxTransOp/bg000000001                     2013-05-02 07:49:15.837271  RBA 45603</code></pre>
  1. 发出协调器线程的 ALTER REPLICAT 命令(整个复制,不带任何线程 ID),并定位到您记录的 low watermark RBA。
ALTER REPLICAT *group* EXTRBA *low_watermark_rba*
  1. 开始复制。
START REPLICAT *group*
  1. 发出基本的 INFO REPLICAT 命令,直到显示比您记录的 high watermark 更高的 RBA。HANDLECOLLISIONS 处理由于以前应用的事务处理而发生的任何冲突。
INFO REPLICAT *group*
  1. 停止复制。
STOP REPLICAT *group*
  1. 删除或注释掉 HANDLECOLLISIONS 参数。

  2. 开始复制。

START REPLICAT *group*

使用自动保存的参数文件

只要在完全关闭复制之前编辑了参数文件,就会保存原始参数文件的副本。您可以还原到此参数文件,然后重新同步线程,以便它们都赶上具有最新检查点位置的线程。线程同步后,您可以切换到新的参数文件,然后启动复制。

  1. 将新参数文件另存为其他名称,然后将保存的原始参数文件重命名为正确的名称(与组名称相同)。保存的参数文件具有 .backup 后缀,并存储在 Oracle GoldenGate 安装目录的 dirprm 子目录中。

  2. 发出以下命令以将复制线程同步到最大检查点位置。此命令自动启动复制并执行线程,直到线程达到最大检查点位置。

SYNCHRONIZE REPLICAT *group*
  1. 发出 STATUS REPLICAT 命令,直到显示复制完全停止。
STATUS REPLICAT *group*
  1. 将原始参数文件另存为其他名称,然后将新参数文件重命名为组名称。

  2. 开始复制。

START REPLICAT *group*