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 命令一起使用时,请考虑以下事项:
-
如果指定了
TRANLOGOPTIONS EXCLUDETAG/INCLUDETAG且未指定DDLOPTIONS EXCLUDETAG/INCLUDETAG,则TRANLOGOPIIONS EXCLUDETAG/INCLUDETAG参数将同时应用于DML和DDL操作。 -
如果指定了
TRANLOGOPTIONS EXCLUDETAG/INCLUDETAG选项并且还指定了DDLOPTIONS EXCLUDETAG/INCLUDETAG,则TRANLOGOPIIONS EXCLUDETAG/INCLUDETAG将应用于DML操作,DDLOPTIONS EXCLUDETAG/INCLUDETAG将应用于DDL操作。 -
如果未指定
TRANLOGOPTIONS EXCLUDETAG/INCLUDETAG且指定了DDLOPTIONS EXCLUDETAG/INCLUDETAG,则DDLOPTIONS EXCLUDETAG/INCLUDETAG将应用于DDL操作,并且DML操作没有标记筛选。 -
如果未指定
TRANLOGOPTIONS EXCLUDETAG/INCLUDETAG且未指定DDLOPTIONS EXCLUDETAG/INCLUDETAG,则缺省选项DDLOPTIONS EXCLUDETAG +适用,该选项将排除所有标记的DDL操作。 -
对于
DDLOPTIONS,同时指定EXCLUDETAG和INCLUDETAG时,应先指定EXCLUDETAG。
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 时使用。
-
MAPSESSIONSCHEMA为会话方案建立源 - 目标映射,并用于其方案在DDL中不限定的对象。 -
MAPSCHEMAS将在源DDL中具有限定方案但不符合使用MAP进行映射的条件的对象映射到与MAPSESSIONSCHEMA中相同的会话 - 模式映射。此类对象的示例包括 OracleCREATE TABLE AS SELECT语句(在AS SELECT子句中包含派生对象)或 TeradataCREATE REPLICATION RULESET语句。
此映射发生在 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;
-
基表将根据
TARGET子句(到方案c)进行映射。 -
符合条件的派生对象(
SELECT FROM中的表t)根据MAPSESSIONSCHEMA(到方案b1)进行映射,因为存在MAPSCHEMAS。
如果没有 MAPSCHEMAS,派生对象将映射到方案 c(如 TARGET 子句中指定的那样),因为 MAPSESSIONSCHEMA 仅映射不合格的对象。
MAPSESSIONSCHEMA *source_schema* TARGET *target_schema*
对复制有效(仅限 Oracle)。允许源会话方案映射到目标上的不同会话方案(转换为)。
-
<source_schema>是源上使用ALTER SESSION set CURRENT_SCHEMA设置的会话方案。 -
<target_schema>是目标上使用ALTER SESSION set CURRENT_SCHEMA设置的会话方案。
不支持通配符。可以使用多个 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> 命令中的口令。
-
默认情况下 (
REPLICATEPASSWORD),Oracle GoldenGate 使用目标CREATE或ALTER语句中的源密码。 -
要防止将源口令发送到目标,请使用
NOREPLICATEPASSWORD。
使用 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 有不同的密码验证器,具体取决于数据库版本:
-
10g:
user$.password中保留的弱验证器。 -
11g:SHA-1 验证器。
-
12c:SHA-2 和 HTTP 摘要验证器。
SHA-1、SHA-2 和 HTTP 验证器以 'S:<SHA-1-verifier>;H:<http-verifier>;T:<SHA-2-verifier>' 格式在 user$.spare4 中捕获。对于创建用户 DDL 语句,Integrated Extract 在 12c 中返回以下 DDL:
-
在 12.0.1.0 中,它返回:
CREATE USER <username>IDENTIFIED BY VALUES‘ S:SHA-1;H:http;weak ’。 -
在 12.0.2.0 及更高版本中,它返回:
CREATE USER <username>IDENTIFIED BY VALUES‘ S:SHA-1;H:http;T:SHA-2;weak ’。
如果 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 的复制一起使用,可以使用此参数筛选出不需要的验证器,如下所示:
-
如果
USEPASSWORDVERIFIERLEVEL设置为 10,则除弱验证器以外的所有内容都会从CREATE USERDDL验证字符串中过滤掉。 -
如果
USEPASSWORDVERIFIERLEVEL设置为 11,则除 S:SHA-1 和弱验证器之外的所有内容都将从CREATE USERDDL验证字符串中过滤掉。
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