AUTOSCHEMAOPTIONSパラメータの使用
TYPEMAPおよびIGNORE_DATA_TRUNCATIONオプションを指定したAUTOSCHEMAOPTIONSパラメータでは、次のオーバーライドを実行できます。
| 自動スキーマオプション 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は、型の変更ではなく、列のNULL値可能性に基づいて変更する場合にのみ指定します。 |
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' |
たとえば、EMPLOYEE_IDという名前のソース列に対応するターゲット列の必須データ型としてintを使用するには: AUTOSCHEMAOPTIONS TYPEMAP EMPLOYEE_ID = 'int' |
|
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION |
自動スキーマ展開では、可能な場合にはデータの切り捨てを回避するために、型幅の拡大(変換アップ)が可能です。オプション IGNORE_DATA_TRUNCATIONを使用すると、任意の種類の型拡大をオーバーライドできます。stringまたはbinary型(キー列または非キー列)の場合、固定長データ型を使用し、ターゲット長がsmallの場合、AUTOSCHEMAは、ソース・データを格納できる場合は対応する可変長データ型に変換され、それ以外の場合は失敗します。これを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)'
マップ・レベルの構文
AUTOSCHEMAOPTION句をMAPレベルで有効にするには、次の構文に示すように、カッコで囲む必要があります。
構文:
MAP src.table1, TARGET tgt.table1, AUTOSCHEMAOPTIONS (TYPEMAP 'int'='smallint');
TYPEMAPなどの複数のAUTOSCHEMAOPTIONS句を同じ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パラメータ・ファイル内のすべての表に対して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'))