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