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);
本节提供了在执行重新分区之前完全关闭复制的说明,以及有关在不干净的关闭后执行重新分区时尝试恢复复制连续性的说明。
可在协调模式下对复制组执行以下任务。
对工作量执行计划内重新分区
计划中的重新分区是指允许复制在重新启动复制之前完全关闭时,使用包含更新的线程分区的新参数文件。干净的关闭使所有线程都能够到达路径中的公共检查点位置。此时,可以在下次运行中应用新的分区方案。
-
运行管理客户端。
-
停止复制。
STOP REPLICAT *group*
- 打开参数文件进行编辑。
EDIT PARAMS *group*
-
对
MAP语句中的THREAD或THREADRANGE规范进行必要的更改。 -
保存并关闭参数文件。
-
开始复制。
START REPLICAT *group*
在计划外重新分区后恢复复制
计划外重新分区是指不允许复制在使用包含更新的线程分区的新参数文件重新启动复制之前完全关闭。在这种情况下,一些或所有旧线程无法完成其工作并到达一个公共检查点。重新启动时,协调器线程会尝试应用旧的分区方案,复制会异常终止并显示错误。可以通过以下方式之一从此状况恢复协调的复制组:
-
使用参数文件的自动保存副本
-
使用
HANDLECOLLISIONS从低水位标记重新处理
使用 HANDLECOLLISIONS 从低水印重新处理
在此过程中,将所有线程重新定位到 low watermark 位置。这是所有线程中执行的最早检查点位置。要以另一种方式说明它,低水印位置是在不干净停止之前由最慢线程处理的最后一条记录。启动 Replicat 时,线程会重新处理它们在 Replicat 停止之前处理的操作,而 HANDLECOLLISIONS 参数会处理所有重复记录和缺失记录错误,这些错误是在不干净停止之前应用的线程重新处理操作时发生的。
-
将
HANDLECOLLISIONS参数添加到 Replicat 参数文件。无需使用任何THREADS选项。 -
对整个复制组(协调器线程)发出
INFO REPLICAT命令。记下检查点的 RBA。这是 low watermark 值。此输出还显示Group Name列下的活动线程 ID。还要记录这些记录。
INFO REPLICAT *group*
For example:
<pre class="copy"><code>OGG(slc03jgo) 3> 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>
- 针对每个处理线程 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>
- 发出协调器线程的
ALTER REPLICAT命令(整个复制,不带任何线程 ID),并定位到您记录的 low watermark RBA。
ALTER REPLICAT *group* EXTRBA *low_watermark_rba*
- 开始复制。
START REPLICAT *group*
- 发出基本的
INFO REPLICAT命令,直到显示比您记录的 high watermark 更高的 RBA。HANDLECOLLISIONS处理由于以前应用的事务处理而发生的任何冲突。
INFO REPLICAT *group*
- 停止复制。
STOP REPLICAT *group*
-
删除或注释掉
HANDLECOLLISIONS参数。 -
开始复制。
START REPLICAT *group*
使用自动保存的参数文件
只要在完全关闭复制之前编辑了参数文件,就会保存原始参数文件的副本。您可以还原到此参数文件,然后重新同步线程,以便它们都赶上具有最新检查点位置的线程。线程同步后,您可以切换到新的参数文件,然后启动复制。
-
将新参数文件另存为其他名称,然后将保存的原始参数文件重命名为正确的名称(与组名称相同)。保存的参数文件具有
.backup后缀,并存储在 Oracle GoldenGate 安装目录的dirprm子目录中。 -
发出以下命令以将复制线程同步到最大检查点位置。此命令自动启动复制并执行线程,直到线程达到最大检查点位置。
SYNCHRONIZE REPLICAT *group*
- 发出
STATUS REPLICAT命令,直到显示复制完全停止。
STATUS REPLICAT *group*
-
将原始参数文件另存为其他名称,然后将新参数文件重命名为组名称。
-
开始复制。
START REPLICAT *group*