Utilisation du paramètre AUTOSCHEMAOPTIONS
Le paramètre AUTOSCHEMAOPTIONS avec les options TYPEMAP et IGNORE_DATA_TRUNCATION vous permet d'effectuer les remplacements suivants :
| OPTIONS DE SCHÉMA AUTOMATIQUE option_name | Description | Syntaxe | Exemple |
|---|---|---|---|
IGNORE_MODIFY_KEY_COLUMN |
Par défaut, le schéma automatique ne permet pas de modifier les colonnes de clé primaire et le processus Replicat abandonne avec une erreur appropriée. Vous pouvez indiquer AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN pour ignorer les modifications apportées aux colonnes de clé. |
AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN |
- |
ALLOW_MODIFY_KEY_COLUMN |
Par défaut, le schéma automatique n'autorise pas la modification des colonnes de clé primaire et l'abandon du processus Replicat. Indiquez AUTOSCHEMAOPTIONS ALLOW_MODIFY_KEY_COLUMN pour autoriser les modifications apportées aux colonnes de clé. |
OPTIONS DE SCHÉMA AUTOMATIQUE ALLOW_MODIFY_KEY_COLUMN | - |
MODIFY_COLUMN_NULLABILITY_ONLY |
Indiquez AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY si vous souhaitez uniquement modifier la colonne en fonction de la capacité d'annulation de la colonne et non de la modification de type. |
AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY |
- |
AUTOSCHEMAOPTIONS TYPEMAP |
Permet de sélectionner un type de données spécifique pour des noms de type de données source spécifiques. | AUTOSCHEMAOPTIONS TYPEMAP '<source type name> ' '<target type name>' |
Par exemple, lorsqu'une colonne source avec le type de données smallint doit être convertie en int comme type de données requis pour les colonnes cible, utilisez ce qui suit : AUTOSCHEMAOPTIONS TYPEMAP 'smallint' = 'int' |
AUTOSCHEMAOPTIONS TYPEMAP |
Permet de sélectionner un type de données spécifique pour des noms de colonne source spécifiques. | ||
Remarque : les noms de colonne entièrement qualifiés sont également pris en charge, tels que table_name et column_name. Les composants de nom peuvent contenir des caractères génériques et les noms entre guillemets sont également pris en charge. |
AUTOSCHEMAOPTIONS TYPEMAP '<source column name>' = 'target type name' |
Par exemple, pour utiliser int comme type de données requis pour la colonne cible correspondant à la colonne source portant le nom EMPLOYEE_ID : AUTOSCHEMAOPTIONS TYPEMAP EMPLOYEE_ID = 'int' |
|
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION |
L'évolution automatique des schémas permet d'élargir le type (up-conversion), chaque fois que cela est possible, afin d'éviter une possible troncation des données. L'option IGNORE_DATA_TRUNCATION peut être utilisée pour remplacer tout type d'élargissement de type. Pour les types string ou binary (colonnes de clé ou non de clé), si vous utilisez un type de données de longueur fixe et que la longueur cible est small, AUTOSCHEMA convertit le type de données de longueur variable correspondant s'il peut prendre en charge les données source sinon il échoue. Vous pouvez le remplacer par AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION. |
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION |
- |
Syntaxe d'utilisation d'AUTOSCHEMAOPTIONS en tant que paramètre autonome
Pour activer AUTOSCHEMAOPTIONS en tant que paramètre autonome dans le fichier de paramètres de réplication, utilisez la syntaxe suivante :
Syntaxe :
AUTOSCHEMAOPTIONS TYPEMAP '<datatype_src>' = '<datatype_tgt>'
AUTOSCHEMAOPTIONS TYPEMAP '<column_name>' = '<datatype_tgt>'
Exemple :
AUTOSCHEMAOPTIONS TYPEMAP 'int'='bigint'
AUTOSCHEMAOPTIONS TYPEMAP 'smallint'='bigint'
AUTOSCHEMAOPTIONS TYPEMAP employee_no='bigint'
AUTOSCHEMAOPTIONS TYPEMAP "Employee&Name"='varchar(50)'
Syntaxe du niveau de correspondance
Pour activer la clause AUTOSCHEMAOPTION au niveau MAP, elle doit être placée entre parenthèses, comme indiqué dans la syntaxe suivante.
Syntaxe :
MAP src.table1, TARGET tgt.table1, AUTOSCHEMAOPTIONS (TYPEMAP 'int'='smallint');
Pour indiquer plusieurs clauses AUTOSCHEMAOPTIONS telles que TYPEMAP dans le cadre de la même instruction MAP, chaque option doit être placée entre parenthèses :
Syntaxe :
MAP src.table2, TARGET tgt.table2, AUTOSCHEMAOPTIONS (TYPEMAP 'smallint'='bigint','varchar(*)'='clob', employee_no='bigint', "Employee&Name"='varchar(50)');
Exemples
Exemple 1
Pour activer AUTOSCHEMAOPTIONS sur toutes les tables mentionnées dans le fichier de paramètres de réplication, procédez comme suit :
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*;
Exemple 2
Afin d'activer AUTOSCHEMAOPTIONS avec TYPEMAP 'int' = 'bigint' pour toutes les tables du fichier de paramètres de réplication, et d'utiliser TYPEMAP 'clob'= 'varchar(2000)' uniquement pour les tables du schéma hr, procédez comme suit :
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')
Chaque ligne du fichier de paramètres est traitée de manière séquentielle et chaque correspondance résolue est basée sur l'état actuel des paramètres AutoSchema globaux à ce moment-là. Les options AutoSchema spécifiées au niveau du plan d'action MAP sont plus prioritaires que les options globales conflictuelles AUTOSCHEMAOPTIONS.
Par exemple, si les tables source ont été créées comme suit :
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);
Si le fichier de paramètres Replicat contient :
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;
Ensuite, AUTOSCHEMA génère le code LDD pour les tables cible comme suit :
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'))