DDLOPTIONS

有效对象

提取和复制

说明

使用 DDLOPTIONS 参数可配置除过滤和字符串替换之外的 DDL 处理的各个方面。您可以使用多个 DDLOPTIONS 语句,但建议使用一个语句。如果使用多个 DDLOPTIONS 语句,则将每个语句设为唯一,以便不会覆盖另一个语句。按参数文件中列出的顺序执行多个 DDLOPTIONS 语句。

默认值

请参见参数说明

语法

DDLOPTIONS
[, DEFAULTUSERPASSWORD <password>] [<algorithm> [ENCRYPTKEY DEFAULT | ENCRYPTKEY] <key_name>]
[, CAPTUREGLOBALTEMPTABLE ]
[, DEFAULTUSERPASSWORDALIAS <alias> [DOMAIN <domain>] ]
[, EXCLUDETAG {<tag> | + | NULL}]
[, IGNOREMAPPING]
[, INCLUDETAG {<tag> | +}][, MAPDERIVED | NOMAPDERIVED]
[, MAPSCHEMAS]
[, MAPSESSIONSCHEMA <source_schema> TARGET <target_schema>]
[, NLSLENGTHSEMANTICS CHAR | BYTE | DEFAULT][, NOAPPLYGLOBALTEMPTABLE]
[, NOTAG]
[, PASSWORD <algorithm> ENCRYPTKEY {<key_name> | DEFAULT}]
[, REMOVECOMMENTS {BEFORE | AFTER}]
[, REPLICATEPASSWORD | NOREPLICATEPASSWORD]
[, REPORT | NOREPORT]
[, UPDATEMETADATA]
[, USEPASSWORDVERIFIERLEVEL {10|11}]
[, _USEOWNERFORSESSION]
[, WARNONLARGEDDL]

DEFAULTUSERPASSWORD *password* [*algorithm* ENCRYPTKEY {*key_name* | DEFAULT}]

对复制有效。(仅限 Oracle)

如果未使用 Oracle GoldenGate 身份证明存储,则可以使用 DEFAULTUSERPASSWORDALIAS 选项。为复制的 {CREATE | ALTER} USER <name> IDENTIFIED BY <password> 语句指定与源语句中使用的口令不同的口令。Replicat 将使用指定的口令替换提取写入线索的占位符。使用 DEFAULTUSERPASSWORD 时,使用 DDLOPTIONS 的 NOREPLICATEPASSWORD 选项进行提取。

不带选项的 DEFAULTUSERPASSWORD <password> 指定明文口令。如果密码区分大小写,则按原样键入。

注意:复制 CREATE | ALTER PROFILE 将失败,因为配置文件/口令验证函数必须存在于 SYS 方案中。要成功复制这些 DDL,必须在两个源/目标上手动创建口令验证函数,因为排除 DDL 到 SYS 方案。

如果口令是使用 ENCRYPT PASSWORD 命令加密的,请使用以下选项:

algorithm

指定用于使用 ENCRYPT PASSWORD 命令加密口令的加密算法:AES128 或 AES192、AES256。

ENCRYPTKEY key_name

在 ENCKEYS 查找文件中指定用户创建的加密密钥的逻辑名称。在 ENCRYPT PASSWORD 与 KEYNAME <key_name> 选项一起使用时使用,并指定相同的密钥名称。

ENCRYPTKEY DEFAULT

指示 Oracle GoldenGate 使用随机密钥。在 ENCRYPT PASSWORD 与 KEYNAME DEFAULT 选项结合使用时使用该选项。

CAPTUREGLOBALTEMPTABLE

对 Oracle 有效

允许全局临时表 (Global Temporary Tables,GTT) DDL 对提取可见,以便进行复制。默认情况下,提取不可见 GTT DDL,因此使用 CAPTUREGLOBALTEMPTABLE 可以将提取设置为包括 GTT DDL,如果通过 DDL 语句筛选,则写入到线索。

线索中存在的 GTT DDL 将在通过过滤条件时由复制器进行过滤和执行。

对于提取的触发版本,无论表是否为 GTT,此选项都设置为 false。

DEFAULTUSERPASSWORDALIAS *alias* [DOMAIN *domain*]

对复制有效。(仅限 Oracle)

如果正在使用 Oracle GoldenGate 身份证明存储,则可以使用 DEFAULTUSERPASSWORD 选项。指定其口令替换复制的 CREATE USER 或 ALTER USER 语句的 IDENTIFIED BY 子句中的口令的身份证明的别名。别名解析为 Oracle GoldenGate 身份证明存储中的加密密码。在将 DDL 应用于目标之前,复制会将 Extract 写入到线索的占位符替换为已解析的口令。

使用 DEFAULTUSERPASSWORDALIAS 时,使用 DDLOPTIONS 的 NOREPLICATEPASSWORD 选项进行提取。

alias

指定密码将用于替换密码的身份证明的别名。此身份证明必须存在于 Oracle GoldenGate 身份证明存储中。如果您不确定要使用的别名,则可以通过发出 INFO CREDENTIALSTORE 命令检查身份证明存储的内容。

DOMAIN domain

指定分配到身份证明存储中指定用户的域名。

EXCLUDETAG {*tag* | + | NULL}]

对提取有效。(仅限 Oracle)

注:从 Oracle GoldenGate 26ai 开始,使用 EXCLUDETAG 和 INCLUDETAG 选项的语法已增强,应使用已删除的 GETREPLICATES、IGNOREREPLICATES、GETAPPLOPS 和 IGNOREAPPLOPS 选项。

EXCLUDETAG 用于排除以前由 Replicat 使用 DBOPTIONS SET TAG 选项或在 Oracle AI Database 会话中使用 dbms_xstream.set_tag 过程标记的更改。

使用 EXCLUDETAG <tag> 指示提取处理忽略使用指定重做标记标记的单个记录。

使用 EXCLUDETAG NULL 可排除所有未标记的 DDL 操作。这与 EXCLUDETAG + 相反。

使用 EXCLUDETAG + 指示提取处理忽略使用任何重做标记的单个记录。

注:使用 DDLOPTIONS 命令同时指定 EXCLUDETAG 和 INCLUDETAG 参数时,应先指定 EXCLUDETAG。

默认情况下,DDLOPTIONS EXCLUDETAG + 选项指示 Extract 筛选标记的 DDL 操作,导致从捕获中排除标记了 00 的 Oracle Data Pump DDL。要捕获这些 DDL,请配置 DDLOPTIONS INCLUDETAG 00。

注:在双向配置中,启用标记包含可能允许捕获其他标记的 DDL,这可能会引入复制循环或重复执行 DDL。

示例

下面是有关如何将标记说明符与 EXCLUDETAG 一起使用的示例。

要排除所有标记的更改,请执行以下操作:

DDLOPTIONS EXCLUDETAG +

要排除特定标记的更改,请执行以下操作:

DDLOPTIONS EXCLUDETAG 00
DDLOPTIONS EXCLUDETAG 0952

要在单个 DDLOPTIONS 语句中具有多个排除标记:

DDLOPTIONS EXCLUDETAG 00 EXCLUDETAG 97ab

INCLUDETAG {tag | +}

对提取有效。(仅限 Oracle)

使用 INCLUDETAG <tag> 可在线索文件中包括特定标记的 DDL 操作。标记值最多可为 2000 个十六进制数字 (0-9 A-F)。

注:使用 DDLOPTIONS 命令同时指定 EXCLUDETAG 和 INCLUDETAG 参数时,应先指定 EXCLUDETAG。

示例:

要包括所有标记的更改,请执行以下操作:

DDLOPTIONS INCLUDETAG +

要包括特定标记的更改,请执行以下操作:

DDLOPTIONS INCLUDETAG 00

使用 EXCLUDETAG 和 INCLUDETAG 参数时的准则

将 EXCLUDETAG 和 INCLUDETAG 参数与 TRANLOGOPTIONS 和 DDLOPTIONS 命令一起使用时,请考虑以下事项:

IGNOREMAPPING

对复制有效。禁用确定 DDL 是 MAPPED 范围还是 UNMAPPED 范围的名称映射的求值。此选项可提高类似 DDL 复制配置的性能,源和目标方案名称与对象名称匹配,因此无需映射函数。启用 IGNOREMAPPING 时,无法确定 MAPPED 或 UNMAPPED 范围,因此所有 DDL 语句都被视为 OTHER 范围。将源方案和对象名称映射到目标上的不同方案和对象名称时,请不要使用此参数。

MAPDERIVED | NOMAPDERIVED

对复制 (Oracle) 有效。控制如何映射派生对象名。

MAPDERIVED

如果派生对象存在 MAP 语句,则该名称将映射到该 TARGET 子句中指定的名称。否则,名称将映射到包含基本对象的 MAP 语句的 TARGET 子句中指定的名称。缺省值为 MAPDERIVED。

NOMAPDERIVED

阻止名称映射。NOMAPDERIVED 覆盖包含派生目标文件名称的任何显式 MAP 语句。

有关在 DDL 复制期间如何处理派生对象的更多信息,请参见 How Oracle GoldenGate Handles Derived Object Names 。

MAPSCHEMAS

对复制(Oracle 和 Teradata)有效。仅当使用 MAPSESSIONSCHEMA 时使用。

此映射发生在 MAP 语句中指定的映射之后。

例如,假设在源 Oracle AI Database 上发出以下 DDL 语句:

create table a.t as select from b.t;

假设目标上的 MAP 语句如下所示:

MAP a.*, TARGET c.*;
DDLOPTIONS MAPSESSIONSCHEMA b, TARGET b1, MAPSCHEMAS

由于此映射,Replicat 将在目标上发出以下 DDL 语句:

create table c.t as select from b1.t;

如果没有 MAPSCHEMAS,派生对象将映射到方案 c(如 TARGET 子句中指定的那样),因为 MAPSESSIONSCHEMA 仅映射不合格的对象。

MAPSESSIONSCHEMA *source_schema* TARGET *target_schema*

对复制有效(仅限 Oracle)。允许源会话方案映射到目标上的不同会话方案(转换为)。

不支持通配符。可以使用多个 MAPSESSIONSCHEMA 参数来映射不同的方案。

MAPSESSIONSCHEMA 覆盖基于主或派生对象名称的方案名称的任何映射

有关用法,请参见本主题末尾的示例。

另请参见 MAPSCHEMAS。

NLSLENGTHSEMANTICS CHAR | BYTE | DEFAULT]

对复制有效(仅限 Oracle)。

允许复制覆盖 DDL 复制线索文件记录中的 NLS_LENGTH_SEMANTICS Oracle AI Database 会话参数设置。例如,如果 DDL 在数据库会话中以 NLS_LENGTH_SEMANTICS 参数值 BYTE 运行,则默认情况下,在 Replicat 应用 DDL 之前,它将数据库会话参数 NLS_LENGTH_SEMANTICS 设置为 BYTE。要覆盖此参数,可以将 NLSLENGTHSEMANTICS 参数设置为 CHAR,在应用 DDL 之前,将 NLS_LENGTH_SEMANTICS 会话参数设置为 CHAR。

NOAPPLYGLOBALTEMPTABLE

阻止复制应用全局临时表 (Global Temporary Tables,GTT)。如果未指定此选项,则复制将始终从线索向全局临时表 (Global Temporary Tables,GTT) 应用 DDL。

NOTAG

对复制有效

阻止使用重做标记对 Replicat 应用的 DDL 进行标记(默认标记 '00' 或使用带有 SETTAG 选项的 DBOPTIONS 参数进行标记)。

Replicat 使用的缺省标记值为 00,可以使用 DBOPTIONS SETTAG 参数手动更改。请参见 DBOPTIONS 。

PASSWORD *algorithm* ENCRYPTKEY {*key_name* | DEFAULT}

对提取有效(仅限 Oracle)

指示 Extract 在将 DDL 写入线索之前加密源 DDL 中的所有密码。

<algorithm>

指定用于加密密码的加密算法。有效的值为 AES128、AES192 或 AES256。

ENCRYPTKEY *key_name*

在 ENCKEYS 查找文件中指定用户创建的加密密钥的逻辑名称。

ENCRYPTKEY DEFAULT

指示 Oracle GoldenGate 使用随机密钥。

REMOVECOMMENTS {BEFORE | AFTER}

(可选)对提取和复制有效(仅限 Oracle)。控制是否要从 DDL 操作中删除注释。默认情况下,不会删除注释,因此可以使用注释替换 DDLSUBST 参数的字符串。有关更多信息,请参见 DDLSUBST 。

REMOVECOMMENTS BEFORE

在提取或复制处理 DDL 操作之前删除注释。它们将不可用于字符串替换。

REMOVECOMMENTS AFTER

在注释用于字符串替换后删除注释。如果未指定 REMOVECOMMENTS,这是缺省行为。

REPLICATEPASSWORD | NOREPLICATEPASSWORD

对提取有效(仅限 Oracle)。适用于 {CREATE | ALTER} USER <user> IDENTIFIED BY <password> 命令中的口令。

使用 NOREPLICATEPASSWORD 时,通过在 Replicat 参数文件中使用带有 DEFAULTUSERPASSWORD 或 DEFAULTUSERPASSWORDALIAS 选项的 DDLOPTIONS 语句为目标 DDL 语句指定口令。

REPORT | NOREPORT

对提取和复制(Oracle 和 Teradata)有效。控制是否将扩展的 DDL 处理信息写入到报告文件。NOREPORT 的缺省值报告基本 DDL 统计信息。REPORT 添加正在使用的参数和已处理的操作的分步历史记录。

UPDATEMETADATA

对复制有效(仅限 Oracle)。在主动 - 主动双向配置中使用。此参数通知 DDL 生成此 DDL 的系统上的 Replicat,并通知 Replicat 现在应更新其对象元数据高速缓存以匹配新元数据。这将使 Replicat 的元数据高速缓存与本地数据库的当前元数据保持同步。

USEPASSWORDVERIFIERLEVEL {10|11}

仅在 Oracle 到 Oracle 配置中有效。检查在 DDL CREATE USER 语句中发送的口令验证器是否需要修改。此检查的原因是因为 Oracle 有不同的密码验证器,具体取决于数据库版本:

SHA-1、SHA-2 和 HTTP 验证器以 'S:<SHA-1-verifier>;H:<http-verifier>;T:<SHA-2-verifier>' 格式在 user$.spare4 中捕获。对于创建用户 DDL 语句,Integrated Extract 在 12c 中返回以下 DDL:

如果 Replicat 针对 Oracle 12c 运行,则会在 RDBMS 级别处理这些形式的 CREATE USER,但如果 Replicat 针对 Oracle 10g 或 11 运行,则 RDBMS 不处理这些表单。Oracle 10g 仅接受弱验证器,而 Oracle 11g 仅接受 S:SHA-1 和弱验证器。

要允许为连接到 Oracle 12c 的提取生成的 CREATE USER DDL 与连接到 Oracle 10g 或 11g 的复制一起使用,可以使用此参数筛选出不需要的验证器,如下所示:

WARNONLARGEDDL

此选项对提取有效。

当 DDL 超过 BUFFER 大小时,它允许您为提取生成警告消息而不异常终止。

示例

示例 1

下面显示了 MAPSESSIONSCHEMA 如何工作,以允许将源会话方案映射到目标上的其他方案。

在 Extract 和 Replicat 中假定以下 DDL 捕获和映射配置:

提取:

DDL INCLUDE OBJNAME SRC.* INCLUDE OBJNAME SRC1.*
TABLE SRC.*;
TABLE SRC1.*;
DDL INCLUDE OBJNAME SRC.* INCLUDE OBJNAME SRC1.*
TABLE SRC.*;
TABLE SRC1.*;

复制:

DDLOPTIONS MAPSESSIONSCHEMA SRC TARGET DST
DDLOPTIONS MAPSESSIONSCHEMA SRC1 TARGET DST1
MAP SRC.*, TARGET DST.*;
MAP SRC1.*, TARGET DST1.*;
DDL INCLUDE OBJNAME DST.* INCLUDE OBJNAME DST1.*

假定登录用户在源上发出了以下 DDL 语句:

ALTER SESSION SET CURRENT_SCHEMA=SRC;
CREATE TABLE tab (X NUMBER);
CREATE TABLE SRC1.tab (X NUMBER) AS SELECT * FROM tab;

Replicat 将按如下方式执行 DDL(每个代码段前面的说明):

-- Set session to DST, because SRC.* is mapped to DST.* in MAP statement.
ALTER SESION SET CURRENT_SCHEMA=DST;
-- Create the first TAB table in the DST schema, using the DST session schema.
CREATE TABLE DST.tab (X NUMBER);
-- Restore Replicat schema.
ALTER SESSION SET CURRENT_SCHEMA=REPUSER
-- Set session schema to DST, per MAPSESSIONSCHEMA, so that AS SELECT succeeds.
ALTER SESION SET CURRENT_SCHEMA=DST;
-- Create the DST1.TAB table AS SELECT * FROM the first table (DST.TAB).
CREATE TABLE DST1.tab (X NUMBER) AS SELECT * FROM tab;
-- Restore Replicat schema.
ALTER SESSION SET CURRENT_SCHEMA=REPUSER

如果没有 MAPSESSIONSCHEMA,SELECT * FROM TAB 将尝试从不存在的 SRC.TAB 表中进行选择并失败。默认值是将源方案应用于目标 DDL 语句中的不合格对象。在这种情况下,DDL 语句如下所示,将失败:

-- Set session to DST, because SRC.* is mapped to DST.* in MAP statement.
ALTER SESION SET CURRENT_SCHEMA=DST;
-- Create the first TAB table in the DST schema, using the DST session schema.
CREATE TABLE DST.tab (X NUMBER);
-- Restore Replicat schema.
ALTER SESSION SET CURRENT_SCHEMA=REPUSER
-- Set session schema to SRC, because TAB in the AS SELECT is unqualified-- and SRC is the source session schema.
ALTER SESION SET CURRENT_SCHEMA=SRC;
-- Create DST1.TAB AS SELECT * from SRC.TAB (SRC=current session schema).
CREATE TABLE DST1.tab (X NUMBER) AS SELECT * FROM tab;
-- SRC.TAB does not exist.
-- Abend with an error unless the error is handled by a DDLERROR statement.

示例 2

下面显示了如何使用 DEFAULTUSERPASSWORDALIAS 为复制的 {CREATE | ALTER} USER <name> IDENTIFIED BY <password> 语句指定与源语句中使用的口令不同的口令。在此示例中,别名 ddlalias 位于凭证存储的 target 域中。

DDLOPTIONS DEFAULTUSERPASSWORDALIAS ddlalias DOMAIN target