使用 LogDump 实用程序访问线索文件记录
故障排除和技术支持需要 Oracle GoldenGate 线索信息。使用 Logdump 实用程序查看 Oracle GoldenGate 线索记录。
线索恢复模式
默认情况下,Extract 在附加模式下运行,如果存在进程故障,则会将恢复标记写入到线索中,Extract 将恢复数据附加到文件,以便保留所有以前数据的历史记录以用于恢复。
在附加模式下,提取初始化确定在启动时写入到线索的最后一个完整事务处理的标识。利用该信息,当数据源中遇到该事务处理的提交记录时,提取将结束恢复;然后,提取将开始使用下一个符合提取条件的提交事务处理获取新数据,并开始将新数据附加到线索。复制程序将从该恢复点重新开始读取。
覆盖模式是 10.0 之前的 Oracle GoldenGate 版本中使用的提取恢复的另一个版本。在这些版本中,提取会覆盖最后一个写入检查点位置之后的线索中的现有事务处理数据,而不是附加新数据。写入的第一个事务是在数据源中的最后一个读取检查点位置之后符合提取条件的第一个事务。
如果目标上的 Oracle GoldenGate 版本早于版本 10,则 Extract 将自动恢复为覆盖模式以支持向后兼容性。可以使用 RECOVERYOPTIONS 参数手动控制此行为。
线索记录格式
Oracle GoldenGate 写入线索或提取文件的每个更改记录都包括标题区域、数据区域以及可能的用户标记区域。记录标题包含有关事务处理环境的信息,数据区域包含提取的实际数据值。
标记区域包含 Oracle GoldenGate 用户指定用于列映射和转换的信息。
Oracle GoldenGate 线索文件是非结构化的。您可以使用 Oracle GoldenGate 软件随附的 Logdump 实用程序查看 Oracle GoldenGate 记录。有关更多信息,请参阅 Logdump Reference for Oracle GoldenGate 中的 Viewing the First Record 。注:由于对 Oracle GoldenGate 软件进行了增强,因此线索记录格式可能会受到本文档中可能未反映的更改。要查看当前结构,请使用 Logdump 实用程序。
线索文件标题记录
线索的每个文件都包含一个文件标题记录,该记录存储在文件的开头。文件头包含有关线索文件本身的信息。Oracle GoldenGate 的以前版本不包含此标头。
文件头作为记录存储在数据记录前面的线索文件的开头。线索标题中存储的信息提供了有关记录的足够信息,以便 Oracle GoldenGate 进程能够确定记录的格式是否为当前版本的 Oracle GoldenGate 支持的格式。
线索标题字段存储为令牌,令牌格式在所有版本的 Oracle GoldenGate 中保持不变。如果某个版本的 Oracle GoldenGate 不支持任何给定的令牌,则会忽略该令牌。为弃用的令牌分配默认值以保持与以前版本的 Oracle GoldenGate 的兼容性。
为了确保不同 Oracle GoldenGate 进程版本之间的文件向前和向后兼容,文件头字段以标准标记格式写入。由进程的新版本创建的新令牌可被旧版本忽略,以便保持向后兼容性。同样,较新的 Oracle GoldenGate 版本支持较旧的令牌。此外,如果某个令牌被新进程版本弃用,则会为该令牌分配默认值,以便旧版本仍可以正常运行。指定文件版本的标记是 COMPATIBILITY,可以在 Logdump 实用程序中查看,也可以通过使用 @GETENV 函数的 GGFILEHEADER 选项检索该标记。
线索或提取文件的版本必须等于或低于读取它的进程的版本。否则,进程将异常终止。此外,Oracle GoldenGate 将输出线索强制为与其输入线索或文件的版本相同。重新启动时,提取会将线索滚动到新文件,以确保每个文件的版本只有一个(除非文件为空)。
从 Oracle GoldenGate 21c 开始,对于 Oracle 数据库,您可以使用 DB_UNIQUE_NAME 参数为数据库指定全局唯一的名称。如果未设置此数据库参数,则 DB_UNIQUE_NAME 与 DB_NAME 相同。此功能允许通过查看线索文件标题来唯一标识线索数据的来源。
有关使用 DbUniqueName 标记的信息,请参见 [GETENV](/pls/topic/lookup?ctx=en/middleware/goldengate/core/21.3/admin&id=GWURF-GUID-B84527F5-91BA-4E2E-BC37-92D1B6C35735) 参数。
DbUniqueName 标记将写入兼容性级别为 19.1 的跟踪文件中,但是支持该兼容性级别的早期 Oracle GoldenGate 发行版将忽略新标记。该令牌属于数据库信息组。该字段将限制为 65536 字节,以允许拟合 DB_UNIQUE_NAME 的所有可能值,限制为 30 个字符。
由于 Oracle GoldenGate 进程是解耦的,并且可以是不同的 Oracle GoldenGate 版本,因此每个线索文件的文件标题都包含一个版本指示符。默认情况下,线索文件的版本是创建该文件的进程的当前版本。如果需要设置线索的版本,请使用 EXTTRAIL、EXTFILE、RMTTRAIL 或 RMTFILE 参数的 FORMAT 选项。
可以使用 Logdump 实用程序中的 FILEHEADER 命令查看线索标头。有关文件标头中标记的更多信息,请参见 Logdump Reference for Oracle GoldenGate 。
线索文件标题中的分区名称记录
线索文件标题中的每个 DML 记录可以包含分区名称记录 (PNR) 的索引。由于整个分区名称可能很长,因此首次写入分区时会在每个线索文件中创建一个 PNR。每个 PNR 包含分区名称和分区对象 ID。
对于主提取,PNR 仅为分区匹配生成,并由 PARTITION 和 PARTITIONEXCLUDE 参数包含。来自这些分区的 DML 记录具有表定义记录的索引,以及分区名称记录的另一个索引。来自所有其他表的 DML 记录(例如未分区的表或 PARTITION 或 PARTITIONEXCLUDE 参数不匹配或排除的分区表)仅具有今天完成的表定义记录的索引。对于分发服务,如果源线索记录包含 PNR 索引,则写入 PNR。
在 Logdump 中查看分区名称和 PNR 索引
使用 Logdump 实用程序可显示分区名称记录以及包含 PNR 索引的 DML。
以下示例显示如何捕获文件中的显示内容:
$ logdump > output.txt <<EOF
ghdr on
detail data
open ./dirdat/tr000000000
n 200
EOF
输出显示带有 PNR 索引值的 PNR 和 DML,如以下示例所示:
HDR-IND : E (X45) PARTITION : . (XFF80)
UNDOFLAG : . (X00) BEFOREAFTER: A (X41)
RECLENGTH : 0 (X0000) IO TIME : 2019/01/17 16:48:01.129.045
IOTYPE : 170 (XAA) ORIGNODE : 4 (X04)
TRANSIND : . (X03) FORMATTYPE : R (X52)
SYSKEYLEN : 0 (X00) INCOMPLETE : . (X00)
TDR/PNR IDX: (001, 002) AUDITPOS : 13287580
CONTINUED : N (X00) RECCOUNT : 1 (X01)
2019/01/17 16:48:01.129.045 METADATA LEN 0 RBA 3425
PARTITION NAME: P1 PARTITION ID: 75,234 FLAGS: X00000001
___________________________________________________________________
HDR-IND : E (X45) PARTITION : . (XFF8C)
UNDOFLAG : . (X00) BEFOREAFTER: A (X41)
RECLENGTH : 18 (X0012) IO TIME : 2019/01/17 16:47:58.000.000
IOTYPE : 5 (X05) ORIGNODE : 255 (XFF)
TRANSIND : . (X00) FORMATTYPE : R (X52)
SYSKEYLEN : 0 (X00) INCOMPLETE : . (X00)
AUDITRBA : 15 AUDITPOS : 13287580
CONTINUED : N (X00) RECCOUNT : 1 (X01)
2019/01/17 16:47:58.000.000 INSERT LEN 18 RBA 3486
NAME: TKGGU1.T1 (PARTITION: P1, TDR/PNR INDEX: 1/2)
AFTER IMAGE: PARTITION X8C G B
0000 0500 0000 0100 3101 0005 0000 0001 0031 | ........1........1
COLUMN 0 (X0000), LEN 5 (X0005)
0000 0100 31 | ....1
COLUMN 1 (X0001), LEN 5 (X0005)
0000 0100 31 | ....1
Oracle GoldenGate 记录示例
下面说明了使用 Logdump 查看的 Oracle GoldenGate 记录。第一个部分(字段列表)是标题,第二个部分是数据区域。Oracle GoldenGate 支持的所有平台上的记录与此类似。图 1:Oracle GoldenGate 记录示例

记录标题区域
Oracle GoldenGate 记录标头提供记录中包含的数据的元数据,并包含以下信息。
-
操作类型,例如插入、更新或删除
-
更新之前或之后指示符
-
事务处理信息,例如事务处理组和提交时间戳
标题字段的说明
下面介绍了 Oracle GoldenGate 记录标题的字段。某些字段仅适用于某些平台。
表:Oracle GoldenGate 记录标题字段
| 字段 | 说明 |
|---|---|
|
应始终为 E 值,指示记录是由“提取”处理创建的。任何其他值指示无效数据。 |
|
记录缓冲区的长度(字节)。 |
|
记录表示的操作类型。有关操作类型的列表,请参见 Table 12-* 。 |
|
记录在当前事务处理中的位置。值如下: 0 - 事务处理中的第一条记录 1 - 事务处理中既不是第一个记录,也不是最后一个记录 2 - 事务处理中的最后一条记录 3 - 仅事务处理中的记录 |
|
标识事务处理日志标识符,例如 Oracle 重做日志序列号。 |
|
(Windows 和 UNIX)标识该记录是否是较大数据段的一部分,该数据段太大而无法放入一个记录中。LOB、CLOB 和某些 VARCHAR 存储在段中。在单个记录中包含图像之前和之后(由于 Y - 记录是一个段;向 Oracle GoldenGate 表明此数据继续保留到另一条记录。 N - 没有数据继续到另一个段;可以是系列中的最后一个,也可以是不是较大数据段的记录。 |
|
对于 Windows 和 UNIX 记录,此字段始终为 4 值(内部格式为 FieldComp 压缩记录)。对于这些平台,术语“分区”并不表示数据表示数据库结构中的任何特定的逻辑或物理分区。 |
|
标识记录是更新操作的前 (B) 图像还是后 (A) 图像。将图像之前和之后作为 UPDATERECORDFORMAT 参数结果组合的记录标记为图像之后。插入始终位于图像之后,删除始终位于图像之前。 |
|
操作发生的时间(以源系统的本地时间表示),采用 GMT 格式。此时间对于事务处理中的每个操作可能相同或不同,具体取决于操作发生的时间。 |
|
标识是从事务处理日志读取数据还是从数据库提取数据。</p>F - 从数据库提取 <p>R - 在事务处理日志中可读 |
|
此字段已过时。 |
|
标识数据在事务处理日志中的位置。 |
|
(Windows 和 UNIX)当 LOB 数据必须拆分为要写入 Oracle GoldenGate 文件的块时用于 LOB 数据。RecCount 用于重新汇编块。 |
使用标题数据
通过使用 @GETENV 函数的 GGHEADER 选项或使用以下任何事务处理元素作为 TABLE 或 MAP 参数中的 COLMAP 语句中的源表达式,可以使用 Oracle GoldenGate 记录标头中提供的某些数据进行映射。
-
GGS_TRANS_TIMESTAMP
-
GGS_TRANS_RBA
-
GGS_OP_TYPE
-
GGS_BEFORE_AFTER_IND
记录数据区
Oracle GoldenGate 线索记录的数据区包含以下内容:
-
将更改提交到源数据库的时间
-
数据库操作的类型
-
记录的长度
-
线索文件中的相对字节地址
-
表名
-
以十六进制格式更改数据
下面介绍了 Oracle GoldenGate 在 Windows、UNIX、Linux 和 NonStop 系统上使用的记录映像格式的差异。
完整记录图像格式(NonStop 源)
完整记录图像包含已处理行中所有列的值。当源系统为 HP NonStop 时,并且仅当记录标题中指定的 IOType 为以下项之一时,会在线索中生成完整记录图像格式:
3 - Delete 5 - Insert 10 - Update
每个完整记录图像的格式与从直接读取原始文件或表的程序中检索的格式相同。对于 SQL 表,日期时间字段、Null 值和其他数据将完全按照程序将其选择到应用程序缓冲区中的方式写入。虽然日期时间字段在内部表示为八字节时间戳,但其外部形式最多可以表示为字符串的 26 个字节。将检索记录,因为它们存在于原始文件中。
当操作类型为 Insert 或 Update 时,图像包含操作后记录的内容(后面的图像)。当操作类型为 Delete 时,图像包含操作前记录的内容(前一图像)。
对于从 Enscribe 数据库生成的记录,除非原始文件的 AUDITCOMPRESS 属性设置为 ON,否则将输出完整记录图像。当 AUDITCOMPRESS 为 ON 时,只要原始文件收到更新操作,就会生成压缩的更新记录。(提取进程可以使用 FETCHCOMPS 参数检索完整图像。)
压缩的记录图像格式(Windows、UNIX、Linux 源)
压缩的记录图像仅包含键(主键、唯一键、KEYCOLS)和处理行中更改的列。默认情况下,由 Windows 和 UNIX 系统上的进程写入的线索记录始终处于压缩状态。
压缩记录的格式如下:
column_index
column_length
column_data[...]
其中:
-
column_index
是源表中列的序数索引(2 个字节)。
-
colum_length
是数据的长度(2 个字节)。
-
column_data
是数据,包括
NULL
或者
VARCHAR
长度指标。
可以压缩从 NonStop 平台写入的记录。压缩的 Enscribe 记录的格式如下:
field_offset
field_length field_value[...]
其中:
-
field_offset
是更改值(2 个字节)的原始记录内的偏移量。
-
field_length
是数据的长度(2 个字节)。
-
field_value
是数据,包括
NULL
或者
VARCHAR
长度指标。
压缩的 Enscribe 记录中的第一个字段是主键或系统键。
标记区域
线索记录还可以包含标记的两个区域。一个是供内部使用,不在此处记录,另一个是用户令牌区域。用户标记是在线索记录中捕获并存储的环境值,用于复制到目标列或其他目的。如果使用,这些令牌将遵循记录的数据部分,并在使用 Logdump 查看时显示类似以下内容:
| 参数 | 值 |
|---|---|
TKN-HOST TKN-GROUP TKN-BA_IND TKN-COMMIT_TS TKN-POS TKN-RBA TKN-TABLE TKN-OPTYPE TKN-LENGTH TKN-TRAN_IND |
: syshq : EXTORA : AFTER : 2011-01-24 17:08:59.000000 : 3604496 : 4058 : SOURCE.CUSTOMER : INSERT : 57 : BEGIN |
Oracle GoldenGate 操作类型
以下是某些 Oracle GoldenGate 操作类型。可以在向 Oracle GoldenGate 添加新功能时添加类型。有关更新的列表,请使用 Logdump 实用程序中的 SHOW RECTYPE 命令:
| 类型 | 说明 | 平台 |
|---|---|---|
| 1-Abort | 事务处理已中止。 | NSK 转移 |
| 2-Commit | 已提交事务处理。 | NSK 转移 |
| 3-Delete | 已删除记录/行。Delete 记录通常包含完整的记录图像。但是,如果使用 COMPRESSDELETES 参数,则仅存在键列。 |
全部 |
| 4-EndRollback | 数据库回退已结束 | NSK 转移 |
| 5-Insert | 已插入记录/行。Insert 记录包含完整记录图像。 |
全部 |
| 6-Prepared | 已准备好要提交的联网事务处理。 | NSK 转移 |
| 7-TMF- 关闭 | 发生了 TMF 关闭。 | NSK 转移 |
| 8-TransBegin | 不再使用。 | NSK 转移 |
| 9-TransRelease | 不再使用。 | NSK 转移 |
| 10-Update | 记录/行已更新。Update 记录包含完整记录图像。注意:如果记录标题中的分区指示符为 4,则该记录采用 FieldComp 格式(请参见下文),并且将压缩更新。 |
全部 |
| 11-UpdateComp | 已更新 TMF AuditComp 格式的记录/行。在此格式中,仅存在更改的字节。2-byte_offset2-byte_length 格式的 4 字节描述符位于每个数据片段之前。字节偏移量是源表中列的序数索引。长度是数据的长度。 |
NSK 转移 |
| 12-FileAlter | 数据库文件的属性已更改。 | NSK |
| 13-FileCreate | 已创建数据库文件。 | NSK |
| 14-FilePurge | 已删除数据库文件。 | NSK |
| 15-FieldComp | SQL 表中的一行已更新。在此格式中,仅存在更改的字节。数据库不会记录未更改列的映像之前。2-byte_offset2-byte_length 格式的 4 字节描述符位于每个数据片段之前。字节偏移量是源表中列的序数索引。长度是数据的长度。记录标题中分区指示符 4 表示 FieldComp 格式。 |
全部 |
| 16-FileRename | 文件已重命名。 | NSK |
| 17-AuxPointer | 包含有关哪些 AUX 线索具有新数据和读取位置的信息。 | NSK 转移 |
| 18-NetworkCommit | 已提交网络事务处理。 | NSK 转移 |
| 19-NetworkAbort | 网络事务处理已中止。 | NSK 转移 |
| 90-(GGS)SQLCol | 已添加 SQL 表中的一列或一列,或者属性已更改。 | NSK |
| 100-(GGS) 净化机 | 所有数据都已从文件 (PURGEDATA) 中删除。 |
NSK |
| 101-(GGS) 清除(文件) | 已清除文件。 | NSK 非 TMF |
| 102-(GGS) 创建(文件) | 已创建文件。Oracle GoldenGate 记录包含文件属性。 | NSK 非 TMF |
| 103-(GGS) 变更(文件) | 文件已更改。Oracle GoldenGate 记录包含更改的文件属性。 | NSK 非 TMF |
| 104-(GGS) 重命名(文件) | 文件已重命名。Oracle GoldenGate 记录包含原始名称和新名称。 | NSK 非 TMF |
| 105-(GGS) 设置模式 | 执行了 SETMODE 操作。Oracle GoldenGate 记录包含 SETMODE 信息。 |
NSK 非 TMF |
| 106-GGSChangeLabel | 执行了 CHANGELABEL 操作。Oracle GoldenGate 记录包含 CHANGELABEL 信息。 |
NSK 非 TMF |
| 107-(GGS) 控制 | 执行了 CONTROL 操作。Oracle GoldenGate 记录包含 CONTROL 信息。 |
NSK 非 TMF |
115 和 117 (GGS)KeyFieldComp(32) |
已更新主键。Oracle GoldenGate 记录包含键的前图像和键和行的后图像。数据采用 FieldComp 格式(压缩),这意味着数据库不会记录未更改列的映像。 |
Windows 和 UNIX |
116-LargeObject 116-LOB |
标识 RAW、BLOB、CLOB 或 LOB 列。此类型的数据存储在多个记录中。 |
Windows 和 UNIX |
| 132-(GGS) SequenceOp | 标识对序列执行的操作。 | Windows 和 UNIX |
134-UNIFIED 更新 135-UNIFIED 密码更新 |
标识包含同一记录中前后值的统一线索记录。UNIFIED UPDATE 中的前面图像包含前后图像的事务处理记录中可用的所有列。UNIFIED UPDATE 中的前一图像包含事务处理记录中可用的所有列,但后一图像仅限于主键列和 UPDATE 中修改的列。 |
Windows 和 UNIX |
| 160 - DDL_Op | 标识 DDL 操作 | Windows 和 UNIX |
161- RecordFragment |
标识必须跨多个记录(不仅仅是基本记录)存储的大行的一部分。 | Windows 和 UNIX |
200-GGS 非结构化块 200-BulkIO |
执行了 BULKIO 操作。Oracle GoldenGate 记录包含 RAW DP2 块。 |
NSK 非 TMF |
| 201 至 204 | 这些是不同类型的 NonStop 跟踪记录。Oracle GoldenGate 支持分析师使用跟踪记录。下面是对描述。
|
NSK 非 TMF |
| 205-GGSComment | 指示 Logdump 实用程序创建的注释记录。注释记录由 Logdump 在使用 Logdump 的 SAVE 命令保存到文件的数据开头和结尾创建。 |
全部 |
| 249 至 254 | 这些是不同类型的 NonStop 跟踪记录。Oracle GoldenGate 支持分析师使用跟踪记录。下面是对描述。
|
NSK 非 TM |