自动对象名称映射
目标表名取自 MAP 语句的 TARGET 子句,目标列名取自线索元数据中的源列名。
仅当目标数据库 CHARSET 与源数据库 CHARSET 相同或源数据库 CHARSET 的超集时,自动模式演化功能当前才支持对象名称映射。在其他情况下,会报告相应的错误消息。
如果源中的 table 或 column 名称长度太长(目标数据库不支持此长度),或者 table 或 column 名称包含不受支持的字符(目标数据库不支持),Replicat 将异常终止并显示相应的错误消息。
要继续,必须采取以下纠正措施之一:
-
对于有问题的目标表名,必须在符合目标数据库要求的
MAP规范中显式指定相应的目标表名。 -
对于有问题的列名,需要在
MAP语句的COLMAP子句中显式指定满足目标数据库要求的相应目标列名。可以通过对源的某些限制来支持这一点,例如,不添加任何名称与目标列的COLMAP子句中指定的名称相同的新列。
为自动模式演化生成的 table 或 column 名称的大小写敏感性取决于源数据库和目标数据库的的大小写敏感性规则,并受以下规则控制。
-
在 case-sensitive source 数据库到 case-sensitive target 数据库复制方案中,所有名称都带有引号并使用。
-
对于 source 到 target 的任何其他组合,包括 case-sensitive 到 case-insensitive 、 case-insensitive 到 case insensitive 以及 case-insensitive 到 case-sensitive ,遵循以下规则:
-
表名的使用方式与 Replicat 参数文件中
MAP语句的TARGET子句中指定的完全相同。 -
除非在 Replicat 参数文件的
MAP语句的COLMAP子句中显式引号,否则列名将从线索文件中使用,不带引号。
-
如果列名包含以下任何特殊字符或空格,这些名称将被引号引起来并使用。
'".,{}()[]|+-_%~^#@/!><*&$:=?;\
以下是自动方案演化在以下用例中使用的对象命名约定:
-
用例:区分大小写的源数据库
选项 行为 如果要复制到区分大小写的目标数据库,请考虑以下用例:
源表名称为
hr.employeeColumn 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.employeeColumn 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.employeeColumn 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.employeeColumn 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子句中指定为引号 -
用例:不区分大小写的源数据库
选项 行为 如果要复制到区分大小写的目标数据库,请考虑以下用例:
源表名称为
hr.employeeColumn 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.employeeColumn 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.employeeColumn 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.employeeColumn 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子句中的对象名称不加引号。