使用 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'))