Pré-requisitos para configurar DDL
As instruções CREATE TABLE AS SELECT (CTAS) incluem instruções SELECT e instruções INSERT que fazem referência a qualquer número de objetos subjacentes. Por padrão, o Oracle GoldenGate obtém os dados da cláusula AS SELECT do banco de dados de destino. Você pode forçar a operação CTAS a preservar as inserções originais usando esse parâmetro.
Observação:
Por esse motivo, as tabelas XMLType do sistema Oracle criadas com base em uma instrução CTAS (CREATE TABLE AS SELECT) não podem ser suportadas. Para tabelas XMLType, os IDs de objeto da linha devem corresponder entre a origem e o destino, que não podem ser mantidos nesse cenário. As tabelas XMLType criadas por uma instrução CTAS vazia (que não insere dados na nova tabela) podem ser mantidas corretamente.
Além disso, você pode usar o parâmetro GETCTASDML que permite que o CTAS reproduza as inserções do CTAS, preservando assim OIDs durante a replicação. Esse parâmetro só é suportado com o Dicionário Integrado e qualquer Replicat downstream deve ser 12.1.2.1 ou maior para consumir a trilha; caso contrário, poderá haver divergência.
Os objetos na cláusula AS SELECT devem existir no banco de dados de destino e seus nomes devem ser idênticos aos da origem.
Em uma instrução MAP, o Oracle GoldenGate só mapeia o nome da nova tabela (CREATE TABLE name) para a especificação TARGET, mas não mapeia os nomes dos objetos subjacentes da cláusula AS SELECT. Poderia haver dependências nesses objetos que poderiam causar inconsistências de dados se os nomes fossem convertidos na especificação TARGET.
O exemplo a seguir mostra um exemplo de instrução CREATE TABLE AS SELECT na origem e como ela seria replicada para o destino pelo Oracle GoldenGate.
CREATE TABLE a.tab1 AS SELECT * FROM a.tab2;
A instrução MAP do Replicat é a seguinte:
MAP a.tab*, TARGET a.x*;
A instrução DDL de destino aplicada pelo Replicat é a seguinte:
CREATE TABLE a.xtab1 AS SELECT * FROM a.tab2;
O nome da tabela na cláusula AS SELECT * FROM permanece como estava na origem: tab2 (em vez de xtab2).
Para manter os dados nos objetos subjacentes consistentes na origem e no destino, você pode configurá-los para replicação de dados pelo Oracle GoldenGate. No exemplo anterior, você poderia usar as seguintes instruções para acomodar esse requisito:
Origem
TABLE a.tab*;
Destino
MAPEXCLUDE a.tab2
MAP a.tab*, TARGET a.x*;
MAP a.tab2, TARGET a.tab2;
Consulte Identificando Corretamente Nomes de Objetos Não Qualificados na DDL.