自动对象名称映射

目标表名取自 MAP 语句的 TARGET 子句,目标列名取自线索元数据中的源列名。

仅当目标数据库 CHARSET 与源数据库 CHARSET 相同或源数据库 CHARSET 的超集时,自动模式演化功能当前才支持对象名称映射。在其他情况下,会报告相应的错误消息。

如果源中的 table 或 column 名称长度太长(目标数据库不支持此长度),或者 table 或 column 名称包含不受支持的字符(目标数据库不支持),Replicat 将异常终止并显示相应的错误消息。

要继续,必须采取以下纠正措施之一:

为自动模式演化生成的 table 或 column 名称的大小写敏感性取决于源数据库和目标数据库的的大小写敏感性规则,并受以下规则控制。

  1. 在 case-sensitive source 数据库到 case-sensitive target 数据库复制方案中,所有名称都带有引号并使用。

  2. 对于 source 到 target 的任何其他组合,包括 case-sensitive 到 case-insensitive 、 case-insensitive 到 case insensitive 以及 case-insensitive 到 case-sensitive ,遵循以下规则:

    1. 表名的使用方式与 Replicat 参数文件中 MAP 语句的 TARGET 子句中指定的完全相同。

    2. 除非在 Replicat 参数文件的 MAP 语句的 COLMAP 子句中显式引号,否则列名将从线索文件中使用,不带引号。

如果列名包含以下任何特殊字符或空格,这些名称将被引号引起来并使用。

'".,{}()[]|+-_%~^#@/!><*&$:=?;\

以下是自动方案演化在以下用例中使用的对象命名约定:

  1. 用例:区分大小写的源数据库

    选项 行为

    如果要复制到区分大小写的目标数据库,请考虑以下用例:

    • 源表名称为 hr.employee

    • Column id 类型 int(主键)

    • 名称类型 varchar

    如果 MAP 语句的 TARGET 子句中的目标表名包含通配符,则会将与源名称相同的名称和大小写用引号添加到目标表。

    示例:

    Replicat 参数文件中的 MAP 语句如下:

    MAP hr.*, TARGET region.*;

    自动模式演化功能在区分大小写的目标数据库上生成 DDL,如下所示:

    CREATE TABLE "region"."employee" ( "id" int not null, "name" VARCHAR(20), primary key ("id"));

    注意:

    对象名称 employee 在 CREATE TABLE DDL 中用引号括起来,因为源数据库和目标数据库区分大小写。

    如果要复制到区分大小写的目标数据库,请考虑以下用例:

    • 源表名称为 hr.employee

    • Column id 类型 int(主键)

    • 名称类型 varchar

    如果 MAP 语句的 TARGET 子句中的目标表名称包含显式名称,则与源名称相同的名称和大小写将用引号添加到目标表。

    示例:

    Replicat 参数文件中的 MAP 语句如下所示:

    MAP hr.employee, TARGET region.employee, COLMAP(USEDEFAULTS, "EMPNAME" = name); 

    自动模式演化功能在区分大小写的目标数据库上生成 DDL,如下所示:

    CREATE TABLE "region"."employee" ( "id" int not null, "EMPNAME" VARCHAR(20), primary key ("id"));

    注意:

    对象名称 employee 在 CREATE TABLE DDL 中不加引号,因为 MAP 语句的 TARGET 子句中的对象名称不加引号。

    如果要复制到不区分大小写的目标数据库,请考虑以下用例:

    • 源表名称为 hr.employee

    • Column id 类型 int(主键)

    • 名称类型 varchar

    如果 MAP 语句的 TARGET 子句中的目标表名称包含通配符,则与源名称相同的名称和大小写将用于目标表。

    示例:

    Replicat 参数文件中的 map 语句如下:

    MAP hr.*, TARGET region.*;

    自动模式演化功能在不区分大小写的目标数据库上生成 DDL,如下所示:

    CREATE TABLE region.employee (id int not null, name VARCHAR(20), primary key (id));

    注意:

    对象名称 employee 在 CREATE TABLE DDL 中不加引号,因为目标子句具有未加引号的通配符名称。

    如果要复制到不区分大小写的目标数据库,请考虑以下用例:

    • 源表名称为 hr.employee

    • Column id 类型 int(主键)

    • 名称类型 varchar

    如果 MAP 语句的 TARGET 子句中的目标表名称包含显式名称,则与源名称相同的名称和大小写将用于目标表。

    示例:

    Replicat 参数文件中的 MAP 语句如下所示:

    MAP hr.employee, TARGET region."employee", COLMAP(USEDEFAULTS, "EMPNAME" = name);

    自动模式演化功能在不区分大小写的目标数据库上生成 DDL,如下所示:

    CREATE TABLE region."employee" ( id int not null, "EMPNAME" VARCHAR(20), primary key (id));

    注意:

    在 CREATE TABLE DDL 中引用对象名称 employee,因为在 MAP 语句的 TARGET 子句中引用了对象名称。DDL 中引用了 EMPNAME,因为它在 COLMAP 子句中指定为引号
  2. 用例:不区分大小写的源数据库

    选项 行为

    如果要复制到区分大小写的目标数据库,请考虑以下用例:

    • 源表名称为 hr.employee

    • Column id 类型 int(主键)

    • 名称类型 varchar

    如果 MAP 语句的 TARGET 子句中的目标表名称包含通配符,则与源名称相同的名称和大小写将用于目标表。

    示例:

    Replicat 参数文件中的 MAP 语句如下:

    MAP hr.*, TARGET region.*;

    自动模式演化功能在区分大小写的目标数据库上生成 DDL,如下所示:

    CREATE TABLE region.employee ( id int not null, name VARCHAR(20), primary key (id));

    注意:

    对象名称 employee 在 CREATE TABLE DDL 中不加引号,因为目标子句具有未加引号的通配符名称。

    如果要复制到区分大小写的目标数据库,请考虑以下用例:

    • 源表名称为 hr.employee

    • Column id 类型 int(主键)

    • 名称类型 varchar

    如果 MAP 语句的 TARGET 子句中的目标表名称包含显式名称,则与源名称相同的名称和大小写将用于目标表。

    示例:

    Replicat 参数文件中的 MAP 语句如下所示:

    MAP hr.employee, TARGET region.employee, COLMAP(USEDEFAULTS, "EMPNAME" = name);

    自动模式演化功能在区分大小写的目标数据库上生成 DDL,如下所示:

    CREATE TABLE region.employee ( id int not null, "EMPNAME" VARCHAR(20), primary key (id));

    注意:

    对象名称 employee 在 CREATE TABLE DDL 中不加引号,因为 MAP 语句的 TARGET 子句中的对象名称不加引号。

    如果要复制到不区分大小写的目标数据库,请考虑以下用例:

    • 源表名称为 hr.employee

    • Column id 类型 int(主键)

    • 名称类型 varchar

    如果 MAP 语句的 TARGET 子句中的目标表名称包含通配符,则与源名称相同的名称和大小写将用于目标表。

    示例:

    Replicat 参数文件中的 MAP 语句如下所示:

    MAP hr.*, TARGET region.*;

    自动模式演化功能在不区分大小写的目标数据库上生成 DDL,如下所示:

    CREATE TABLE region.employee ( id int not null, name VARCHAR(20), primary key (id));

    注意:

    对象名称 employee 在 CREATE TABLE DDL 中不加引号,因为目标子句具有未加引号的通配符名称。

    如果要复制到不区分大小写的目标数据库,请考虑以下用例:

    • 源表名称为 hr.employee

    • Column id 类型 int(主键)

    • 名称类型 varchar

    如果 MAP 语句的 TARGET 子句中的目标表名称包含显式名称,则与源名称相同的名称和大小写将用于目标表。

    示例:

    Replicat 参数文件中的 MAP 语句如下所示:

    MAP hr.employee, TARGET region.employee, COLMAP(USEDEFAULTS, EMPNAME = name);

    自动模式演化功能在不区分大小写的目标数据库上生成 DDL,如下所示:

    CREATE TABLE region.employee ( id int not null, EMPNAME VARCHAR(20), primary key (id));

    注意:

    对象名称 employee 在 CREATE TABLE DDL 中不加引号,因为 MAP 语句的 TARGET 子句中的对象名称不加引号。