使用 AUTOSCHEMAOPTIONS 參數

AUTOSCHEMAOPTIONS 參數搭配 TYPEMAP 和 IGNORE_DATA_TRUNCATION 選項,可讓您執行下列覆寫:

自動綱要選項 option_name 說明 語法 範例
IGNORE_MODIFY_KEY_COLUMN 依照預設,「自動綱要」不允許修改主索引鍵資料欄,且 Replicat 中止時出現適當的錯誤。您可以指定 AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN 來略過索引鍵資料欄的任何修改。 AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN -
ALLOW_MODIFY_KEY_COLUMN 依照預設,「自動綱要」不允許修改主索引鍵資料欄,而 Replicat 異常中止。指定 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 自動化綱要演進 (Automatic Schema Evolution) 可在可行的情況下進行類型加寬 (up-conversion),以避免可能的資料截斷。IGNORE_DATA_TRUNCATION 選項可用來覆寫任何類型的加寬類型。對於 string 或 binary 類型 (索引鍵資料欄或非索引鍵資料欄),如果使用固定長度資料類型,且目標長度為 small,則 AUTOSCHEMA 會轉換成其對應的變數長度資料類型 (如果可容納來源資料),否則會失敗。您可以使用 AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION 覆寫它。 AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION -

使用 AUTOSCHEMAOPTIONS 作為獨立參數的語法

若要啟用 AUTOSCHEMAOPTIONS 作為 Replicat 參數檔中的獨立參數,請使用下列語法:

語法:

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

若要針對 Replicat 參數檔中的所有表格啟用 AUTOSCHEMAOPTIONS 與 TYPEMAP 'int' = 'bigint',並且只針對 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'))