Utilizzo del parametro AUTOSCHEMAOPTIONS
Il parametro AUTOSCHEMAOPTIONS con le opzioni TYPEMAP e IGNORE_DATA_TRUNCATION consente di eseguire le sostituzioni riportate di seguito.
| OPZIONI AUTOMATICHE option_name | Descrizione | Sintassi | Esempio |
|---|---|---|---|
IGNORE_MODIFY_KEY_COLUMN |
Per impostazione predefinita, lo schema automatico non consente di modificare la colonna o le colonne della chiave primaria e Replicat viene interrotto con un errore appropriato. È possibile specificare AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN per saltare eventuali modifiche alle colonne della chiave. |
AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN |
- |
ALLOW_MODIFY_KEY_COLUMN |
Per impostazione predefinita, lo schema automatico non consente la modifica delle colonne della chiave primaria e l'interruzione di Replicat. Specificare AUTOSCHEMAOPTIONS ALLOW_MODIFY_KEY_COLUMN per consentire qualsiasi modifica alla colonna o alle colonne chiave. |
OPZIONI AUTOMATICHE ALLOW_MODIFY_KEY_COLUMN | - |
MODIFY_COLUMN_NULLABILITY_ONLY |
Specificare AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY se interessato solo alla modifica in base alla annullabilità della colonna e non alla modifica del tipo. |
AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY |
- |
AUTOSCHEMAOPTIONS TYPEMAP |
Consente di selezionare un tipo di dati specifico per nomi di tipi di dati di origine specifici. | AUTOSCHEMAOPTIONS TYPEMAP '<source type name> ' '<target type name>' |
Ad esempio, quando una colonna di origine con tipo di dati smallint deve essere convertita in int come tipo di dati richiesto per le colonne di destinazione, utilizzare quanto segue: AUTOSCHEMAOPTIONS TYPEMAP 'smallint' = 'int' |
AUTOSCHEMAOPTIONS TYPEMAP |
Consente di selezionare un tipo di dati specifico per nomi di colonna di origine specifici. | ||
Nota: sono supportati anche i nomi di colonna completamente qualificati, ad esempio table_name, column_name. Sono supportati anche i componenti dei nomi che possono contenere caratteri jolly e nomi tra virgolette. |
AUTOSCHEMAOPTIONS TYPEMAP '<source column name>' = 'target type name' |
Ad esempio, utilizzare int come tipo di dati richiesto per la colonna di destinazione corrispondente alla colonna di origine con nome EMPLOYEE_ID: AUTOSCHEMAOPTIONS TYPEMAP EMPLOYEE_ID = 'int' |
|
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION |
Automatic Schema Evolution consente l'ampliamento del tipo (up-conversione), laddove possibile, per evitare possibili troncamenti dei dati. L'opzione IGNORE_DATA_TRUNCATION può essere utilizzata per sostituire qualsiasi tipo di ampliamento del tipo. Per i tipi string o binary (colonne chiave o colonne non chiave), se si utilizza il tipo di dati a lunghezza fissa e la lunghezza di destinazione è small, AUTOSCHEMA viene convertito nel tipo di dati a lunghezza variabile corrispondente se può contenere i dati di origine altrimenti non riesce. È possibile sostituirlo con AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION. |
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION |
- |
Sintassi per l'utilizzo di AUTOSCHEMAOPTIONS come parametro standalone
Per abilitare AUTOSCHEMAOPTIONS come parametro standalone nel file dei parametri Replicat, utilizzare la seguente sintassi:
Sintassi:
AUTOSCHEMAOPTIONS TYPEMAP '<datatype_src>' = '<datatype_tgt>'
AUTOSCHEMAOPTIONS TYPEMAP '<column_name>' = '<datatype_tgt>'
Esempio:
AUTOSCHEMAOPTIONS TYPEMAP 'int'='bigint'
AUTOSCHEMAOPTIONS TYPEMAP 'smallint'='bigint'
AUTOSCHEMAOPTIONS TYPEMAP employee_no='bigint'
AUTOSCHEMAOPTIONS TYPEMAP "Employee&Name"='varchar(50)'
Sintassi livello mappa
Per abilitare la clausola AUTOSCHEMAOPTION a livello MAP, è necessario racchiuderla tra parentesi, come mostrato nella sintassi seguente.
Sintassi:
MAP src.table1, TARGET tgt.table1, AUTOSCHEMAOPTIONS (TYPEMAP 'int'='smallint');
Per specificare più clausole AUTOSCHEMAOPTIONS, ad esempio TYPEMAP, come parte della stessa istruzione MAP, ogni opzione deve essere racchiusa tra parentesi:
Sintassi:
MAP src.table2, TARGET tgt.table2, AUTOSCHEMAOPTIONS (TYPEMAP 'smallint'='bigint','varchar(*)'='clob', employee_no='bigint', "Employee&Name"='varchar(50)');
Esempi
Esempio 1
Per abilitare AUTOSCHEMAOPTIONS su tutte le tabelle menzionate nel file dei parametri Replicat:
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*;
Esempio 2
Per abilitare AUTOSCHEMAOPTIONS con TYPEMAP 'int' = 'bigint' per tutte le tabelle nel file dei parametri replicat e per utilizzare inoltre TYPEMAP 'clob'= 'varchar(2000)' solo per le tabelle nello schema hr, effettuare le operazioni riportate di seguito.
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')
Ogni riga del file dei parametri viene elaborata in sequenza e ogni mappa risolta sarà basata sullo stato corrente dei parametri globali AutoSchema in quel momento. Le opzioni AutoSchema specificate a livello MAP avrebbero la precedenza maggiore su qualsiasi AUTOSCHEMAOPTIONS globale in conflitto.
Ad esempio, se le tabelle di origine sono state create come segue:
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);
Se il file dei parametri Replicat contiene:
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;
Quindi AUTOSCHEMA genererà DDL per le tabelle di destinazione come segue:
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'))