Usando o Parâmetro AUTOSCHEMAOPTIONS
O parâmetro AUTOSCHEMAOPTIONS com as opções TYPEMAP e IGNORE_DATA_TRUNCATION permite executar as seguintes substituições:
| OPÇÕES DE ESQUEMA AUTOMÁTICO option_name | Descrição | Sintaxe | Exemplo |
|---|---|---|---|
IGNORE_MODIFY_KEY_COLUMN |
Por padrão, o Esquema Automático não permite modificar a(s) coluna(s) de chave primária e o Replicat é encerrado com um erro apropriado. Você pode especificar AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN para ignorar qualquer modificação nas colunas de chave. |
AUTOSCHEMAOPTIONS IGNORE_MODIFY_KEY_COLUMN |
- |
ALLOW_MODIFY_KEY_COLUMN |
Por padrão, o Esquema Automático não permite modificar a(s) coluna(s) de chave primária e o processo Replicat é encerrado. Especifique o AUTOSCHEMAOPTIONS ALLOW_MODIFY_KEY_COLUMN para permitir qualquer modificação nas colunas de chave. |
OPÇÕES DE ESQUEMA AUTOMÁTICO ALLOW_MODIFY_KEY_COLUMN | - |
MODIFY_COLUMN_NULLABILITY_ONLY |
Especifique AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY se estiver interessado apenas em modificação com base na nulidade da coluna e não na modificação do tipo. |
AUTOSCHEMAOPTIONS MODIFY_COLUMN_NULLABILITY_ONLY |
- |
AUTOSCHEMAOPTIONS TYPEMAP |
Permite selecionar um tipo de dados específico para nomes de tipo de dados de origem específicos. | AUTOSCHEMAOPTIONS TYPEMAP '<source type name> ' '<target type name>' |
Por exemplo, quando uma coluna de origem com o tipo de dados smallint precisar ser convertida em int como o tipo de dados necessário para colunas de destino, use o seguinte: AUTOSCHEMAOPTIONS TYPEMAP 'smallint' = 'int' |
AUTOSCHEMAOPTIONS TYPEMAP |
Permite selecionar um tipo de dados específico para nome(s) de coluna de origem específico(s). | ||
Observação: Também há suporte para nomes de coluna totalmente qualificados, como table_name, column_name. Os componentes de nome podem conter curingas e nomes com aspas também são suportados. |
AUTOSCHEMAOPTIONS TYPEMAP '<source column name>' = 'target type name' |
Por exemplo, para usar int como o tipo de dados necessário para a coluna de destino correspondente à coluna de origem com o nome EMPLOYEE_ID: AUTOSCHEMAOPTIONS TYPEMAP EMPLOYEE_ID = 'int' |
|
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION |
A Evolução Automática do Esquema permite ampliar o tipo (up-conversion), sempre que possível, para evitar possível truncamento de dados. A opção IGNORE_DATA_TRUNCATION pode ser utilizada para substituir qualquer tipo de ampliação de tipo. Para os tipos string ou binary (colunas de chave ou colunas que não são de chave), se estiver usando um tipo de dados de tamanho fixo, e o tamanho de destino for small, o AUTOSCHEMA converterá em seu tipo de dados de tamanho variável correspondente se puder acomodar os dados de origem; caso contrário, ele falhará. Você pode substituí-lo por AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION. |
AUTOSCHEMAOPTIONS IGNORE_DATA_TRUNCATION |
- |
Sintaxe para Uso de AUTOSCHEMAOPTIONS como Parâmetro Independente
Para ativar o AUTOSCHEMAOPTIONS como um parâmetro stand-alone no arquivo de parâmetros Replicat, use a seguinte sintaxe:
Sintaxe:
AUTOSCHEMAOPTIONS TYPEMAP '<datatype_src>' = '<datatype_tgt>'
AUTOSCHEMAOPTIONS TYPEMAP '<column_name>' = '<datatype_tgt>'
Exemplo:
AUTOSCHEMAOPTIONS TYPEMAP 'int'='bigint'
AUTOSCHEMAOPTIONS TYPEMAP 'smallint'='bigint'
AUTOSCHEMAOPTIONS TYPEMAP employee_no='bigint'
AUTOSCHEMAOPTIONS TYPEMAP "Employee&Name"='varchar(50)'
Sintaxe do Nível do Mapa
Para ativar a cláusula AUTOSCHEMAOPTION no nível MAP, ela precisa ser colocada entre parênteses, conforme mostrado na sintaxe a seguir.
Sintaxe:
MAP src.table1, TARGET tgt.table1, AUTOSCHEMAOPTIONS (TYPEMAP 'int'='smallint');
Para especificar várias cláusulas AUTOSCHEMAOPTIONS como TYPEMAP como parte da mesma instrução MAP, cada opção deve ser colocada entre parênteses:
Sintaxe:
MAP src.table2, TARGET tgt.table2, AUTOSCHEMAOPTIONS (TYPEMAP 'smallint'='bigint','varchar(*)'='clob', employee_no='bigint', "Employee&Name"='varchar(50)');
Exemplos
Exemplo 1
Para ativar o AUTOSCHEMAOPTIONS em todas as tabelas mencionadas no arquivo de parâmetros 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*;
Exemplo 2
Para ativar AUTOSCHEMAOPTIONS com TYPEMAP 'int' = 'bigint' para todas as tabelas no arquivo de parâmetros de replicação e para usar adicionalmente TYPEMAP 'clob'= 'varchar(2000)' somente para as tabelas no 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 linha do arquivo de parâmetros é processada sequencialmente e cada mapa que é resolvido seria baseado no estado atual dos parâmetros globais AutoSchema naquele momento. As opções AutoSchema especificadas no nível de MAP teriam maior precedência sobre qualquer AUTOSCHEMAOPTIONS global conflitante.
Por exemplo, se as tabelas de origem tiverem sido criadas 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);
Se o arquivo de parâmetros Replicat contiver:
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;
Em seguida, AUTOSCHEMA geraria a DDL para as tabelas de destino da seguinte 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'))