使用 AUTOSCHEMAOPTIONS 参数

使用带有 TYPEMAP 和 IGNORE_DATA_TRUNCATION 选项的 AUTOSCHEMAOPTIONS 参数,可以执行以下覆盖:

自动方案选项 option_name 说明 语法 示例
IGNORE_MODIFY_KEY_COLUMN 默认情况下,自动方案不允许修改主键列,复制会异常终止并出现相应的错误。可以指定 AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN 以跳过对键列的任何修改。 AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN -
ALLOW_MODIFY_KEY_COLUMN 默认情况下,自动方案不允许修改主键列和复制异常终止。指定 AUTOSCHEMAOPTIONS ALLOW_MODIFY_KEY_COLUMN 以允许对键列进行任何修改。 自动方案选项 ALLOW_MODIFY_KEY_COLUMN -
MODIFY_COLUMN_NULLABILITY_ONLY 如果仅对基于列可为空值而非类型修改的修改感兴趣,请指定 AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY。 AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY -
AUTOSCHEMAOPTIONS TYPEMAP 可用于为特定源数据类型名称选择特定数据类型。 AUTOSCHEMAOPTIONS TYPEMAP '<source type name> ' '<target type name>' 例如,当需要将数据类型为 smallint 的源列转换为 int 作为目标列的必需数据类型时,请使用以下命令:AUTOSCHEMAOPTIONS TYPEMAP 'smallint' = 'int'
AUTOSCHEMAOPTIONS TYPEMAP 可用于为特定源列名选择特定数据类型。    
注:还支持全限定列名,例如 table_name、column_name。名称组件可以包含通配符,并且还支持带引号的名称。 AUTOSCHEMAOPTIONS TYPEMAP '<source column name>' = 'target type name' 例如,使用 int 作为与名称为 EMPLOYEE_ID 的源列对应的目标列的必需数据类型:AUTOSCHEMAOPTIONS TYPEMAP EMPLOYEE_ID = 'int'  
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION 自动方案演化允许在可行的情况下扩大类型(上转换),以避免可能的数据截断。选项 IGNORE_DATA_TRUNCATION 可用于覆盖任何类型的加宽。For string or binary types (key columns or non-key columns), if using fixed length data type, and the target length is small, then AUTOSCHEMA converts to its corresponding variable length data type if it can accommodate the source data otherwise it fails You can override it with AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION. AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION -

使用 AUTOSCHEMAOPTIONS 作为独立参数的语法

要在 Replicat 参数文件中启用 AUTOSCHEMAOPTIONS 作为独立参数,请使用以下语法:

语法:

AUTOSCHEMAOPTIONS TYPEMAP '<datatype_src>' = '<datatype_tgt>'

AUTOSCHEMAOPTIONS TYPEMAP '<column_name>' = '<datatype_tgt>'

示例:

AUTOSCHEMAOPTIONS TYPEMAP 'int'='bigint'

AUTOSCHEMAOPTIONS TYPEMAP 'smallint'='bigint'

AUTOSCHEMAOPTIONS TYPEMAP employee_no='bigint'

AUTOSCHEMAOPTIONS TYPEMAP "Employee&Name"='varchar(50)'

映射级别语法

要在 MAP 级别启用 AUTOSCHEMAOPTION 子句,需要将其括在括号内,如以下语法中所示。

语法:

MAP src.table1, TARGET tgt.table1,  AUTOSCHEMAOPTIONS (TYPEMAP 'int'='smallint');

要将多个 AUTOSCHEMAOPTIONS 子句(如 TYPEMAP)指定为同一 MAP 语句的一部分,每个选项都应括在括号中:

语法:

MAP src.table2, TARGET tgt.table2,  AUTOSCHEMAOPTIONS (TYPEMAP 'smallint'='bigint','varchar(*)'='clob', employee_no='bigint', "Employee&Name"='varchar(50)');

示例

示例 1

要对 Replicat 参数文件中提及的所有表启用 AUTOSCHEMAOPTIONS,请执行以下操作:

AUTOSCHEMAOPTIONS TYPEMAP 'int'='bigint'

DISCARDFILE ./dirrpt/RREP.dsc

MAP west.table1, TARGET east.table1;

MAP west.table2, TARGET east.table2;

MAP west.src*, TARGET east.tgt*;

示例 2

要为复制参数文件中的所有表启用带有 TYPEMAP 'int' = 'bigint' 的 AUTOSCHEMAOPTIONS,并且仅为 hr 方案中的表使用 TYPEMAP 'clob'= 'varchar(2000)',请执行以下操作:

AUTOSCHEMAOPTIONS TYPEMAP 'int'= 'bigint'

MAP west.table1, TARGET east.table1;

MAP west.table2, TARGET east.table2;

MAP hr.src*, TARGET hr.*, AUTOSCHEMAOPTIONS (TYPEMAP 'varchar(2000)'='clob')

参数文件的每一行均按顺序处理,解析的每个映射将基于当时全局 AutoSchema 参数的当前状态。在 MAP 级别指定的 AutoSchema 选项优先于任何冲突的全局 AUTOSCHEMAOPTIONS。

例如,如果源表创建为:

create table src.t111 (pkcol int not null primary key, smallintcol smallint);
create table src.t222 (pkcol int not null primary key, smallintcol smallint);
create table src.t333 (pkcol int not null primary key, smallintcol smallint);

如果 Replicat 参数文件包含:

REPLICAT RTEST

USERIDALIAS ggeast

DDL AUTOSCHEMA  INCLUDE ALL

discardfile ./dirrpt/irddl.dsc

AUTOSCHEMAOPTIONS TYPEMAP 'int'='bigint'

MAP src.t111, TARGET tgt.ran_t111;

MAP src.t222, TARGET tgt.ran_t222, AUTOSCHEMAOPTIONS ((TYPEMAP 'int'='smallint'));

AUTOSCHEMAOPTIONS TYPEMAP 'smallint'='bigint'

MAP src.t333, TARGET tgt.ran_t333;

然后,AUTOSCHEMA 将按如下方式为目标表生成 DDL:

create table 'tgt.'ran_t111' ('pkcol' bigint not null, smallintcol smallint, primary key( 'pkcol'))
create table 'tgt'.'ran_t222' ('pkcol' smallint not null,`smallintcol` smallint, primary key('pkcol'))
create table 'tgt'.'ran_t333' ('pkcol' bigint not null,'smallintcol' bigint, primary key('pkcol'))