Uso del Parámetro AUTOSCHEMAOPTIONS
El parámetro AUTOSCHEMAOPTIONS con las opciones TYPEMAP y IGNORE_DATA_TRUNCATION permite realizar las siguientes sustituciones:
| OPCIONES DE ESQUEMA AUTOMÁTICO option_name | Descripción | Sintaxis | Ejemplo |
|---|---|---|---|
IGNORE_MODIFY_KEY_COLUMN |
Por defecto, el esquema automático no permite modificar las columnas de clave primaria y Replicat finaliza de forma anormal con un error adecuado. Puede especificar AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN para omitir cualquier modificación en las columnas de clave. |
AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN |
- |
ALLOW_MODIFY_KEY_COLUMN |
Por defecto, el esquema automático no permite modificar las columnas de clave primaria y las finalizaciones anormales de Replicat. Especifique AUTOSCHEMAOPTIONS ALLOW_MODIFY_KEY_COLUMN para permitir cualquier modificación en las columnas de clave. |
OPCIONES DE ESQUEMA AUTOMÁTICO ALLOW_MODIFY_KEY_COLUMN | - |
MODIFY_COLUMN_NULLABILITY_ONLY |
Especifique AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY si solo está interesado en la modificación basada en la nulidad de la columna y no en la modificación de tipo. |
AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY |
- |
AUTOSCHEMAOPTIONS TYPEMAP |
Permite seleccionar un tipo de datos específico para nombres de tipos de datos de origen específicos. | AUTOSCHEMAOPTIONS TYPEMAP '<source type name> ' '<target type name>' |
Por ejemplo, cuando una columna de origen con el tipo de dato smallint se debe convertir en int como el tipo de dato necesario para las columnas de destino, utilice lo siguiente: AUTOSCHEMAOPTIONS TYPEMAP 'smallint' = 'int' |
AUTOSCHEMAOPTIONS TYPEMAP |
Permite seleccionar un tipo de dato específico para nombres de columna de origen específicos. | ||
Nota: Los nombres de columna totalmente cualificados también están soportados, como table_name, column_name. Los componentes de nombre pueden contener comodines y también se admiten nombres entre comillas. |
AUTOSCHEMAOPTIONS TYPEMAP '<source column name>' = 'target type name' |
Por ejemplo, para utilizar int como tipo de dato necesario para la columna de destino correspondiente a la columna de origen con el nombre EMPLOYEE_ID: AUTOSCHEMAOPTIONS TYPEMAP EMPLOYEE_ID = 'int' |
|
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION |
La evolución automática del esquema permite ampliar el tipo (conversión ascendente), siempre que sea posible, para evitar posibles truncamientos de datos. La opción IGNORE_DATA_TRUNCATION se puede utilizar para sustituir cualquier tipo de ampliación de tipo. Para los tipos string o binary (columnas clave o columnas no clave), si se utiliza un tipo de dato de longitud fija y la longitud de destino es small, AUTOSCHEMA se convierte a su tipo de dato de longitud variable correspondiente si puede acomodar los datos de origen; de lo contrario, falla. Puede sustituirlo por AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION. |
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION |
- |
Sintaxis para el Uso de AUTOSCHEMAOPTIONS como Parámetro Independiente
Para activar AUTOSCHEMAOPTIONS como parámetro autónomo en el archivo de parámetros Replicat, utilice la siguiente sintaxis:
Sintaxis:
AUTOSCHEMAOPTIONS TYPEMAP '<datatype_src>' = '<datatype_tgt>'
AUTOSCHEMAOPTIONS TYPEMAP '<column_name>' = '<datatype_tgt>'
Ejemplo:
AUTOSCHEMAOPTIONS TYPEMAP 'int'='bigint'
AUTOSCHEMAOPTIONS TYPEMAP 'smallint'='bigint'
AUTOSCHEMAOPTIONS TYPEMAP employee_no='bigint'
AUTOSCHEMAOPTIONS TYPEMAP "Employee&Name"='varchar(50)'
Sintaxis de nivel de mapa
Para activar la cláusula AUTOSCHEMAOPTION en el nivel MAP, se debe incluir entre paréntesis, como se muestra en la siguiente sintaxis.
Sintaxis:
MAP src.table1, TARGET tgt.table1, AUTOSCHEMAOPTIONS (TYPEMAP 'int'='smallint');
Para especificar varias cláusulas AUTOSCHEMAOPTIONS, como TYPEMAP, como parte de la misma sentencia MAP, cada opción debe estar entre paréntesis:
Sintaxis:
MAP src.table2, TARGET tgt.table2, AUTOSCHEMAOPTIONS (TYPEMAP 'smallint'='bigint','varchar(*)'='clob', employee_no='bigint', "Employee&Name"='varchar(50)');
Ejemplos
Ejemplo 1
Para activar AUTOSCHEMAOPTIONS en todas las tablas mencionadas en el archivo de parámetros de 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*;
Ejemplo 2
Para activar AUTOSCHEMAOPTIONS con TYPEMAP 'int' = 'bigint' para todas las tablas del archivo de parámetros de replicación y, además, utilice TYPEMAP 'clob'= 'varchar(2000)' solo para las tablas del esquema hr:
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')
Cada línea del archivo de parámetros se procesa secuencialmente y cada asignación que se resuelve se basaría en el estado actual de los parámetros globales AutoSchema en ese momento. Las opciones AutoSchema especificadas en el nivel de MAP tendrían mayor prioridad sobre cualquier AUTOSCHEMAOPTIONS global en conflicto.
Por ejemplo, si las tablas de origen se han creado como:
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 el archivo de parámetros 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;
A continuación, AUTOSCHEMA generaría el DDL para las tablas de destino de la siguiente forma:
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'))