在数据库对象名称中使用通配符
如果特定数据库支持通配符,则可以为全限定对象名称的任何部分使用通配符。这些名称部分可以是以下部分:容器、数据库或目录名称、所有者(方案或数据库名称)以及表或序列名称。有关如何支持对象名称和通配符的详细信息,请参阅该数据库的 Oracle GoldenGate 安装和配置指南。
在适当的情况下,Oracle GoldenGate 参数允许使用两种通配符类型在一个语句中指定多个对象:
-
问号 (?) 将替换一个字符。例如,在包含名为
TABn 的表(其中 n 从 0 到 9)的方案中,HQ.TAB?的通配符指定将返回HQ.TAB0、HQ.TAB1、HQ.TAB2等,最多返回HQ.TAB9,但不会返回其他表。DB2 LUW 数据库或 DEFGEN 不支持此通配符。此通配符只能用于在TABLE或MAP参数中指定源对象。它不能用于在TABLE或MAP的TARGET子句中指定目标对象。 -
星号 (*) 表示任意数量的字符(包括零个序列)。例如,指定
HQ.T*可以返回HQ.TOTAL、HQ.T123和HQ.T等对象。此通配符适用于所有 Oracle GoldenGate 命令和允许使用通配符的参数中的所有数据库类型。 -
在
TABLE和MAP语句中,只能在源对象名称中组合星号和问号通配符。
源对象使用通配符的规则
对于源对象,可以单独使用星号,也可以使用部分名称。例如,以下源规范有效:
-
TABLE HQ.*; -
TABLE PDB*.HQ.*; -
MAP HQ.T_*; -
MAP HQ.T_*, TARGET HQ.*;
TABLE、MAP 和 SEQUENCE 参数考虑了数据库的区分大小写和区域设置以进行通配符解析。对于创建为区分大小写或不区分大小写的数据库,通配符将匹配确切的名称和大小写。例如,如果数据库区分大小写,则 SCHEMA.TABLE 与 SCHEMA.TABLE 匹配,Schema.Table 与 Schema.Table 匹配等。如果数据库不区分大小写,则匹配不区分大小写。
对于在同一数据库实例中可以同时具有区分大小写和不区分大小写的对象名的数据库,使用引号来强制区分大小写,通配符的工作方式会有所不同。在 TABLE 语句中单独用于源名称时,星号通配符将匹配任何字符,无论星号是否在引号内。以下语句会产生相同的结果:
TABLE hr.*;
TABLE hr."*";
同样,单独使用的问号通配符与任何单个字符匹配,无论其是否在引号内。以下语句将生成相同的结果:
TABLE hr.?;
TABLE hr."?";
如果问号或星号通配符与其他字符一起使用,则对非通配符应用区分大小写,但通配符匹配区分大小写和区分大小写的名称。
- 以下
TABLE语句捕获以小写abc开头的任何表名。将保留带引号的名称大小写,并应用区分大小写的匹配。它捕获包含"abcA"和"abca"的表名,因为通配符匹配区分大小写和不区分大小写的字符。
TABLE hr."abc*";
TABLE hr."abc?";
- 以下
TABLE语句捕获以大写ABC开头的任何表名称,因为部分名称不区分大小写(无引号),并且由此数据库以大写形式存储。但是,由于通配符匹配区分大小写和不区分大小写的字符,因此本示例将捕获包含ABCA和"ABCa"的表名。
TABLE hr.abc*;
TABLE hr.abc?;
为目标对象使用通配符的规则
在 MAP 语句的 TARGET 子句中使用通配符时,目标对象必须存在于目标数据库中。(使用 DDL 复制时例外,这允许在创建新方案及其对象时复制这些方案及其对象。)
对于目标对象,只能使用星号。如果将星号通配符与部分名称一起使用,则 Replicat 会将通配符替换为对应源对象的完整名称。因此,以下指定是不正确的:
HQ.T
上述映射生成的结果不正确,因为目标规范中的通配符将替换为 T_TEST(源对象的名称),从而使整个目标名称为 T_T_TEST n 。以下示例说明了错误的结果:
-
HQ.T_TEST1映射到RPT.T_T_TEST1 -
HQ.T_TEST2映射到RPT.T_T_TEST2 -
(相同的模式适用于所有其他
HQ.T_TESTn 映射。)
以下示例显示了如何正确使用星号通配符。
MAP HQ.T_*, TARGET RPT.*;
上面的示例生成以下正确结果:
-
HQ.T_TEST1映射到RPT.T_TEST1 -
HQ.T_TEST2映射到RPT.T_TEST2 -
(相同的模式适用于所有其他
HQ.T_TESTn 映射。)
回退名称映射
如果源名称无法映射到目标名称,则 Oracle GoldenGate 具有回退映射机制。如果在目标上找不到区分大小写的源对象的完全匹配项,Replicat 会尝试将源名称映射到目标上大小写相同的名称(取决于数据库类型)。回退名称映射由 NAMEMATCH 参数控制。有关详细信息,请参阅 Oracle GoldenGate 的参数和函数参考。
星号或问题在对象名称中标记为文字
如果对象的名称本身包含星号或问号,则必须将整个名称转义并置于双引号内,如以下示例中所示:
TABLE HT."\?ABC";
如何解析通配符
默认情况下,当对象名称为通配符时,处理源对象中的第一行时,将发生该对象的解析。(相比之下,当一个对象的名称被明确声明时,它的解析会在进程启动时发生。要更改用于解析通配符的规则,请使用 WILDCARDRESOLVE 参数。默认值为 DYNAMIC。
从通配符规范中排除对象
可以使用 EXCLUDEWILDCARDOBJECTSONLY、CATALOGEXCLUDE、SCHEMAEXCLUDE、MAPEXCLUDE 和 TABLEEXCLUDE 参数将通配符对象选择与显式对象排除结合使用。