Detecção e Resolução Automática de Conflitos
Quando o Oracle GoldenGate replica alterações entre bancos de dados Oracle, você pode configurar e gerenciar o Oracle GoldenGate Automatic Conflict Detection and Resolution nos bancos de dados Oracle. Observação: O recurso Detecção e Resolução Automática de Conflitos está disponível no Oracle Database 12c Release 2 (12.2) e em versões posteriores e funciona com o Oracle GoldenGate 12c (12.3.0.1) e versões posteriores. Há um recurso manual de detecção e resolução de conflitos, chamado CDR (Oracle GoldenGate Conflict Detection and Resolution). O CDR do Oracle GoldenGate está configurado no arquivo de parâmetros Replicat. Para saber mais sobre o CDR do Oracle GoldenGate, consulte Manual Conflict Detection and Resolution.
Sobre Detecção e Resolução Automática de Conflitos
Quando o Oracle GoldenGate replica alterações entre bancos de dados Oracle, você pode configurar e gerenciar a detecção e a resolução de conflitos do Oracle GoldenGate automaticamente nesses bancos de dados.
Esse recurso deve ser usado com configurações de ativo-ativo, nas quais o Oracle GoldenGate deve manter a sincronização de dados entre vários bancos de dados que contêm os mesmos conjuntos de dados.
Observação: o recurso de detecção e resolução automáticas de conflitos (ACDR) que só está disponível ao usar o Oracle GoldenGate com o Oracle AI Database. Para bancos de dados não Oracle, há um recurso CDR (Manual Conflict Detection and Resolution) disponível com o Oracle GoldenGate. O CDR do Oracle GoldenGate está configurado no arquivo de parâmetros Replicat.
Detecção e Resolução Automática de Conflitos
Você pode configurar a detecção e a resolução automáticas de conflitos em uma configuração do Oracle GoldenGate que replica tabelas entre bancos de dados Oracle. Para configurar a detecção e a resolução automáticas de conflitos para uma tabela, você precisa chamar o procedimento ADD_AUTO_CDR no pacote DBMS_GOLDENGATE_ADM. Um pré-requisito para configurar a detecção e a resolução automáticas de conflitos, o usuário do Oracle GoldenGate deve ter os privilégios apropriados. Consulte Conceder Privilégios de Usuário para o Oracle AI Database 26ai e Superior e Conceder Privilégios de Usuário para o Oracle Database 21c e Inferior para saber mais sobre privilégios de usuário.
O usuário administrador deve estar conectado ao PDB apropriado ao chamar o ADD_AUTO_CDR. As seguintes constantes, que representam sinalizadores de bits, agora são adicionadas:
-
EARLIEST_TIMESTAMP_RESOLUTIONdefineTOMBSTONE KEY VERSIONINGautomaticamente -
DELETE_ALWAYS_WINSdefineTOMBSTONE KEY VERSIONINGautomaticamente. -
IGNORE_SITE_PRIORITY
O exemplo a seguir usa um comando ALTER para a tabela HR.EMPLOYEES:
BEGIN
dbms_goldengate_adm.alter_auto_cdr
(schema_name => 'HR'
,table_name => 'EMPLOYEES'
,additional_options => DBMS_GOLDENGATE_ADM.ADDITIONAL_OPTIONS_ADD_KEY_VERSION );
END;
/
Consulte a descrição de additional_options em ADD_AUTO_CDR Procedure do Oracle AI Database PL/SQL Packages and Types Reference.
Quando o Oracle GoldenGate captura alterações originadas em um Oracle AI Database, cada alteração é encapsulada em um LCR (Registro de Alteração Lógica de Linhas). Um LCR de linha é uma representação estruturada de uma alteração de linha DML. Cada LCR de linha inclui o tipo de operação, os valores de coluna antigos e os valores de coluna novos. LCRs com várias linhas podem fazer parte de uma única transação de banco de dados.
Quando mais de uma réplica de uma tabela permite alterações na tabela, um conflito pode ocorrer quando uma alteração é feita na mesma linha em dois bancos de dados diferentes quase ao mesmo tempo. O Oracle GoldenGate replica as alterações usando os LCRs de linha. Ele detecta um conflito comparando os valores antigos na linha LCR para a alteração inicial do banco de dados de origem com os valores atuais da linha da tabela correspondente no banco de dados de destino identificado pelas colunas de chave. Se qualquer valor de coluna não corresponder, haverá um conflito.
Depois que um conflito é detectado, o Oracle GoldenGate pode resolver o conflito substituindo valores na linha por alguns valores da linha LCR, ignorando os valores na linha LCR ou computando um delta para atualizar os valores da linha.
A detecção e resolução automáticas de conflitos não exigem alterações no aplicativo pelos seguintes motivos:
-
O Oracle AI Database cria e mantém automaticamente colunas de timestamp invisíveis.
-
As inserções, atualizações e exclusões usam a tabela de log delete tombstone para determinar se uma linha foi excluída.
-
Conflitos de coluna LOB podem ser detectados.
-
O Oracle AI Database configura automaticamente o log complementar nas colunas necessárias.
Dica:
Consulte também Oracle AI Database Utilities para obter informações sobre registro em log complementar
Requisitos para Detecção e Resolução Automática de Conflitos
Estes são os principais requisitos para configurar o CDR Automático no Oracle GoldenGate:
-
O registro em log complementar é necessário para garantir que cada LCR de linha tenha as informações necessárias para detectar e resolver um conflito. O registro em log complementar coloca informações adicionais no redo log para as colunas de uma tabela quando uma operação DML é executada na tabela. Quando você configura uma tabela para detecção e resolução de conflitos do Oracle GoldenGate, o log complementar é configurado automaticamente para todas as colunas da tabela. As informações adicionais no redo log são colocadas em um LCR quando uma alteração de tabela é replicada.
A extração deve ser usada para captura. O Replicat Integrado ou o Replicat paralelo no modo integrado devem ser usados no lado de aplicação.
LOGALLSUPCOLSdeve permanecer o padrão. -
Há um campo oculto
KEYVER$$do tipo timestamp que é opcionalmente adicionado à tabelaDELETE TOMBSTONE. Esse campo é obrigatório para a resoluçãoEARLIEST TIMESTAMP,DELETE ALWAYS WINSeSITE PRIORITYe também existe na tabela base. A existência do campo na tabela base precisa ser fornecida nos metadados do arquivo de trilha como um flag ou token.As atualizações da Chave Primária também são suportadas na tabela
DELETE TOMBSTONE. Uma entrada é inserida na tabelaDELETE TOMBSTONEpara a linha do valor de chave original (antes da imagem). A lógica no Extract, que corresponde INSERTS na tabelaDELETE TOMBSTONEa DELETES, também precisa ser correspondida a atualizações de PK ou à chave exclusiva (UK) com pelo menos um campo não anulável, se não houver PK. -
SITE PRIORITYprecisa de suporte do Replicat, antes que os parâmetros sejam implementados e a definição seja passada para o Replicat. -
O CDR automático não funciona com outras configurações de tratamento de erros e exceções no nível
MAP, comoREPERROR,MAPEXCEPTION. Você pode usar CDR Automático ouREPERROR/MAPEXCEPTION, mas não ambos na mesma tabela. ConsulteTABLE \| MAPeREPERRORpara saber mais.
Compatibilidade e Migração
Se a tabela base no banco de dados de origem não contiver a coluna KEYVER$$, mas a tabela base de destino tiver, DELETE e Atualizações de Chave Primária causarão um erro no banco de dados de destino para resoluções EARLIEST TIMESTAMP, DELETE ALWAYS WINS e SITE PRIORITY.
Ao replicar de uma tabela base, que tem um KEYVER$$ para uma tabela de destino, que não tem, a coluna KEYVER$$ é ignorada.
Grupos de Coluna
Um grupo de colunas é um agrupamento lógico de uma ou mais colunas em uma tabela replicada. Quando você adiciona um grupo de colunas, a detecção e a resolução de conflitos são executadas nas colunas do grupo de colunas separadamente das outras colunas da tabela.
Quando você configura uma tabela para detecção e resolução de conflitos do Oracle GoldenGate com o procedimento ADD_AUTO_CDR, todas as colunas escalares da tabela são adicionadas a um grupo de colunas padrão. Para definir outros grupos de colunas para a tabela, execute o procedimento ADD_AUTO_CDR_COLUMN_GROUP. Todas as colunas da tabela que não fazem parte de um grupo de colunas definido pelo usuário permanecem no grupo de colunas padrão da tabela.
Os grupos de colunas permitem que bancos de dados diferentes atualizem colunas diferentes na mesma linha quase ao mesmo tempo sem causar um conflito. Quando grupos de colunas são configurados para uma tabela, os conflitos podem ser evitados mesmo que bancos de dados diferentes atualizem a mesma linha na tabela. Um conflito não será detectado se as atualizações alterarem os valores das colunas em diferentes grupos de colunas.
Figura 1: Grupos de colunas

Este exemplo mostra uma linha sendo replicada no banco de dados A e no banco de dados B. Os dois grupos de colunas a seguir são configurados para a tabela replicada em cada banco de dados:
-
Um grupo de colunas inclui a coluna
Office. A coluna de timestamp invisível para este grupo de colunas éTS1. -
Outro grupo de colunas inclui as colunas
TitleeSalary. A coluna de timestamp invisível para este grupo de colunas éTS2.
Esses grupos de colunas permitem que os bancos de dados A e B atualizem a mesma linha quase ao mesmo tempo sem causar um conflito. Especificamente, as seguintes alterações são feitas:
-
Na base de dados A, o valor de
Officefoi alterado de1080para1030. -
No banco de dados B, o valor de
Titlefoi alterado deMTS1paraMTS2.
Como as colunas Office e Title estão em diferentes grupos de colunas, as alterações são replicadas sem que um conflito seja detectado. O resultado é que os valores na linha são os mesmos em ambos os bancos de dados após cada alteração ter sido replicada.
Atualizações de LOB da Piecewise
Um conjunto de operações de LOB compostas por LOB WRITE, LOB ERASE e LOB TRIM é uma atualização de LOB baseada em partes. Quando uma tabela que contém colunas LOB é configurada para detecção e resolução de conflitos, cada coluna LOB é colocada em seu próprio grupo de colunas e o grupo de colunas tem sua própria coluna de timestamp oculto. A coluna de marcador de data/hora é atualizada na primeira operação de LOB de nível.
Para uma coluna LOB, um conflito é detectado e resolvido das seguintes maneiras:
-
Se o marcador de data/hora do grupo de colunas do LOB for posterior ao grupo de colunas do LOB correspondente na linha, a atualização do LOB em parte será aplicada.
-
Se o marcador de data/hora do grupo de colunas LOB for anterior ao grupo de colunas LOB correspondente na linha, o LOB na linha da tabela será mantido.
-
Se a linha não existir na tabela, será gerado um erro.
Detecção e Resolução Mais Antigas de Conflitos de Timestamp
Colunas com nomes no formato CDRTS$ column group e CDRTS$ROW são usadas para conter timestamps que refletem tempos de modificação para grupos de colunas e a linha.
Observação: As tabelas com símbolos $ ou $$ são tabelas internas ou ocultas.
O DBMS_GOLDENGATE_ADM inclui os seguintes procedimentos para configurar a resolução de timestamp mais antiga e mais recente:
-
ADD_AUTO_CDR() -
ADD_AUTO_CDR_COLUMN_GROUP() -
REMOVE_AUTO_CDR() -
REMOVE_AUTO_CDR_COLUMN_GROUP() -
ALTER_AUTO_CDR() -
ALTER_AUTO_CDR_COLUMN_GROUP()
O campo ADDITIONAL_OPTIONS em ADD_AUTO_CDR() e ALTER_AUTO_CDR() ativa o uso do timestamp mais antigo. A ativação do timestamp mais antigo ativa automaticamente o controle de versão, o que adiciona uma nova coluna oculta KEYVER$$ (número de versão) do tipo timestamp. Um novo valor de indicador é adicionado para indicar o uso do marcador de data/hora mais antigo. Esse campo também é adicionado à tabela DELETE TOMBSTONE. Os conflitos de exclusão são o motivo pelo qual o número da versão é necessário. Com uma resolução de timestamp mais antiga, os conflitos de exclusão, que podem ser transparentes, podem não apenas ser bem-sucedidos incorretamente, mas também podem impedir novas inserções da linha (novas versões). Com um timestamp de versão, a exclusão pode ser resolvida corretamente em uma DML de linha para a mesma versão de linha.
A inserção original da linha recebe o marcador de data/hora atual de seu valor padrão. Em seguida, a exclusão desta linha insere o número da versão e a hora em que esta linha foi inserida na tabela de lápides quando há uma exclusão. Em uma nova inserção, por padrão, o número da versão recebe o timestamp atual novamente, evitando assim um conflito falso com as entradas de exclusão atuais na tabela de lápides.
Exemplo
Suponha que você tenha uma tabela tab1 que seja globalmente consistente entre bancos de dados no site 1 e no site 2.
A tabela contém uma chave (principal). O ACDR está mantendo automaticamente uma versão de chave (kv) e um timestamp (ts) como colunas para a tabela base (oculta) e a tabela de lápide. Para a versão da chave kv e o timestamp ts
Banco de Dados 1: insert tab1 key1 kv1 ts1
Banco de Dados 2: delete tab1 key1 kv1 ts1
Inserção para EXCLUIR a tabela TOMBSTONE key1 kv1 ts1
Banco de Dados 1: insert tab1 key1 kv2 ts2
Sem usar a versão da chave, a inserção seria ignorada, o timestamp de exclusão é anterior. Como a versão da chave é usada, você sabe que kv2 não é a versão da linha que foi excluída e a inserção é bem-sucedida.
Detecção e Resolução do Conflito de Timestamp Mais Recente
Quando você executa o procedimento ADD_AUTO_CDR no pacote DBMS_GOLDENGATE_ADM para configurar uma tabela para detecção e resolução automáticas de conflitos do Oracle GoldenGate, uma coluna de timestamp oculto é adicionada à tabela. Esta coluna de marcador de data/hora oculta registra a hora de uma alteração de linha, e essas informações são usadas para detectar e resolver conflitos.
Quando um LCR de linha é aplicado, pode ocorrer um conflito para uma operação INSERT, UPDATE ou DELETE. A tabela a seguir descreve cada tipo de conflito e como ele é resolvido.
| Operação | Detecção de Conflito | Resolução de Conflitos |
|---|---|---|
INSERT |
Um conflito é detectado quando a tabela tem o mesmo valor para uma coluna de chave que o novo valor na linha LCR. | Se o marcador de data/hora da linha LCR for posterior ao marcador de data/hora na linha da tabela, os valores na linha LCR substituirão os valores na tabela. Se o timestamp da linha LCR for anterior ao timestamp na linha da tabela, o LCR da linha será descartado e os valores da tabela serão retidos. |
UPDATE |
Um conflito é detectado em cada um dos seguintes casos:
|
Se houver uma incompatibilidade de valor e o timestamp da linha LCR for posterior ao timestamp na linha da tabela, os valores na linha LCR substituirão os valores na tabela. Se houver uma incompatibilidade de valor e o timestamp da linha LCR for anterior ao timestamp na linha da tabela, o LCR da linha será descartado e os valores da tabela serão retidos. Se a linha da tabela não existir e o timestamp da linha LCR for posterior ao timestamp na linha da tabela de lápide, o LCR da linha será convertido de uma operação Se a linha da tabela não existir e o timestamp da linha LCR for anterior ao timestamp na linha da tabela de lápide, o LCR da linha será descartado. Se a linha da tabela não existir e não houver linha correspondente na tabela de lápide, a linha LCR será convertida de uma operação |
DELETE |
Um conflito é detectado em cada um dos seguintes casos:
|
Se o timestamp da linha LCR for posterior ao timestamp na tabela, exclua a linha da tabela. Se o timestamp da linha LCR for anterior ao timestamp na tabela, o LCR da linha será descartado e os valores da tabela serão retidos. Se a exclusão for bem-sucedida, registre a linha LCR inserindo-a na tabela de lápides. Se a linha da tabela não existir, registre a linha LCR inserindo-a na tabela de lápide. |
A imagem a seguir exibe a resolução de conflitos entre o banco de dados A e o banco de dados B: 
Este exemplo mostra uma linha sendo replicada no banco de dados A e no banco de dados B. As colunas do banco de dados são Name, RowTS, Office, Title e Salary. A coluna RowTS é a coluna invisível nos dois bancos de dados. Há uma atualização na coluna Office no banco de dados A e, ao mesmo tempo, há uma atualização na coluna Title no banco de dados B. Isso causa um conflito e a resolução desse conflito é feita aplicando o método de timestamp mais recente.
-
No banco de dados A, o valor na coluna
Officeé atualizado de 1080 para 1103 e o valor RowTS é alterado de @TS10 para @TS20. Uma seta indica que essa alteração é replicada para o banco de dados B. -
No banco de dados B, o valor da coluna
Titleé alterado de MTS1 para MTS2 e o valor RowTS é alterado de @TS10 para @TS22. -
Para resolver esse conflito, o timestamp mais recente que existe no banco de dados B vence. Isso significa que as alterações no banco de dados A não são aplicadas. Os valores finais aplicados ao banco de dados A e ao banco de dados B são Scott, @TS22, 1080, MTS2, 100.
Resolução de Conflitos Delta
Com a detecção de conflito delta, ocorre um conflito quando um valor na lista de colunas antiga da linha LCR difere do valor da linha correspondente na tabela.
Para configurar a detecção e a resolução de conflitos delta de uma tabela, execute o procedimento ADD_AUTO_CDR_DELTA_RES no pacote DBMS_GOLDENGATE_ADM. O método de resolução delta não depende de um marcador de data/hora ou de uma coluna de resolução extra. Com a resolução de conflitos delta, o conflito é resolvido adicionando a diferença entre os valores novos e antigos na linha LCR para o valor na tabela. Esse método de resolução é geralmente usado para dados financeiros, como um saldo de conta. Por exemplo, se um saldo bancário for atualizado em dois locais simultaneamente, o valor convergente contabilizará todos os débitos e créditos.
A figura a seguir fornece um exemplo que ilustra a detecção e resolução de conflitos delta.
Figura 2: Detecção e resolução de conflitos Delta

Este exemplo mostra uma linha sendo replicada no banco de dados A e no banco de dados B. A coluna Balance é designada como a coluna na qual a resolução de conflito delta é executada, e a coluna RowTS é a coluna de timestamp invisível para rastrear o horário de cada alteração na coluna Balance. É feita uma alteração no valor Balance na linha em ambos os bancos de dados quase ao mesmo tempo (@T20 no banco de dados A e @T22 no banco de dados B). Essas alterações resultam em um conflito, e a resolução de conflitos delta é usada para resolver o conflito da seguinte maneira:
-
Na base de dados A, o valor de
Balancefoi alterado de1000para1750. O valor foi aumentado em 750. -
No banco de dados B, o valor de
Balancefoi alterado de1000para950. Portanto, o valor foi reduzido em 50. -
Para resolver o conflito no banco de dados A, o valor da diferença entre os valores novos e antigos na linha LCR para o valor na tabela. A diferença entre os valores novos e antigos no LCR é (1000+750-50=1700). O valor atual na tabela é aumentado em 700, de modo que o valor após a resolução do conflito é 1700.
-
Para resolver o conflito no banco de dados B, o valor da diferença entre os valores novos e antigos na linha LCR para o valor na tabela. A diferença entre os valores novos e antigos no LCR é de 750 (1000 - 50 + 750)=1700. Portanto, o valor atual na tabela (950) é aumentado em 750 para que o valor após a resolução do conflito seja 1700.
Após a resolução do conflito delta, o valor da coluna Balance é o mesmo para a linha no banco de dados A e no banco de dados B.
CDR de prioridade do local
Observação: A resolução SITE PRIORITY tem precedência sobre todas as definições de resolução COLUMN GROUP.
Observação: Se o parâmetro Replicat SITE PRIORITY não for colocado antes das instruções de mapa aplicáveis no arquivo de parâmetros, ele não funcionará. Este parâmetro deve ser colocado antes das instruções de mapa aplicáveis.
A resolução de prioridade é especificada no arquivo de parâmetros Replicat entre a origem e o destino para resolução de conflito.
SITE PRIORITY é ativado para um banco de dados ou PDB no arquivo de parâmetros de Replicat com o parâmetro ACDR SITE_PRIORITY {source_db_name}{OVERWRITE | IGNORE }, que é especificado para ativar a resolução SITE PRIORITY de uma tabela.
Se a opção OVERWRITE for especificada, a tabela de origem terá prioridade e os conflitos serão resolvidos pelo OVERWRITE. Da mesma forma, se a opção IGNORE for especificada, a tabela de destino terá prioridade e as alterações da tabela de origem serão ignoradas em um conflito.
A resolução SITE PRIORITY pode ser desativada pelo campo ADDITIONAL_OPTIONS no procedimento ADD_AUTO_CDR() no pacote DBMS_GOLDENGATE_ADM e pelo ALTER_AUTO_CDR() definindo IGNORE_SITE_PRIORITY.
Cada relacionamento de origem-destino do Replicat pode ser configurado de maneira diferente; portanto, a convergência depende da configuração do usuário.
Excluir CDR de Timestamp de Sempre Ganhos
O DELETE ALWAYS WINS é ativado por meio do campo ADDITIONAL_OPTIONS nos procedimentos DBMS_GOLDENGATE_ADM ADD_AUTO_CDR() e ALTER_AUTO_CDR(). Este é novamente um método de exclusão de resolução de conflito, que não está usando a resolução de timestamp mais recente, portanto, o controle de versão é necessário. A ativação do DELETE ALWAYS WINS ativa automaticamente o controle de versão, que adiciona uma nova coluna oculta KEYVER$$ (número de versão) do tipo timestamp. Um novo valor de flag também é adicionado ao acdrflags_kqldtvc para indicar o uso do DELETE ALWAYS WINS. Esse campo também é adicionado à tabela DELETE TOMBSTONE. Os mesmos problemas de versão existem na resolução EARLIEST TIMESTAMP.
Exemplo:
Versão da Chave kv e Timestamp ts
Banco de Dados 1: insert tab1 key1 kv1 ts1
Banco de Dados 2: delete tab1 key1 kv1 ts1
Inserção na tabela DELETE TOMBSTONE key1 kv1 ts1
Banco de Dados 1: insert tab1 key1 kv2 ts2
Sem usar a versão da chave, a inserção seria ignorada, a exclusão sempre vence. Como a versão da chave é usada, você sabe que kv2 não é a versão da linha que foi excluída e a inserção é bem-sucedida.
DELETE TOMBSTONE Tabela
A tabela DELETE TOMBSTONE é um marcador de um registro excluído para distingui-lo de um registro, que nunca existiu. Uma tabela DELETE TOMBSTONE contém no mínimo as colunas de chave e o timestamp da operação. Essas informações são necessárias para excluir a convergência porque algumas atualizações e inserções de entrada podem ser atrasadas de outro site e o LCR de entrada precisa ser filtrado em relação ao timestamp da operação de lápide para determinar se deve ser aplicado.
Rastrear Atualizações da Chave Primária em Excluir Tombstone
O suporte total às atualizações da chave primária (PK) requer o tratamento de conflitos nas linhas representadas pela imagem anterior da chave e na linha representada pela imagem posterior da chave. Uma atualização de PK é uma exclusão e inserção autônomas; portanto, os conflitos de atualização de PK devem ser suportados como uma exclusão para conflitos com a imagem anterior da chave e inserções com a imagem posterior da chave (e linha).
Suportar a atualização PK como uma exclusão da linha representada pela imagem anterior da chave significa que ela deve ser inserida na tabela de lápides de exclusão como uma exclusão. Um acionador interno de atualização é adicionado para inserir na tabela de lápide quando a chave primária é atualizada (na verdade, a chave de identificação da linha, a chave primária se existir ou o Reino Unido escolhido com pelo menos uma coluna não anulável). Como uma atualização de PK pode levar a dois conflitos, até duas resoluções são tentadas no nível da linha, a exclusão da linha com a PK original e a inserção da linha com a nova PK.
Exemplo: Usando a resolução de timestamp mais recente
Database 1: Atualizar para tab1 key1 at ts1
Database 2: Atualizar para tab1 key1 set key1 to key2 ts2
Database 3: Atualizar para tab1 key2 ts3
Nesse cenário, parece que a linha tab1 no nível da linha com key1 deve ser excluída e a atualização do banco de dados 3 deve ser a modificação final da chave da linha tab1
- Se, em vez disso, o banco de dados 2 estiver em
ts3e o banco de dados 3 estiver emts3, a atualização da PK no banco de dados 2 será a modificação final da linhatab1key2.
Now, consider a case where the database 1 was at ts3, database 2 at ts2 and database 3 at ts1, then the update to tab1 row key1 on database 1 should succeed and the PK update from database 2 on tab1 row key2 should succeed. Neste ponto, parece que a resolução completa é que a exclusão na imagem anterior e a inserção na imagem posterior devem ser resolvidas separadamente. Isto implica que eles não são dependentes um do outro e uma perda para um, não é uma perda para ambos.
Configurando a Detecção e a Resolução do Conflito Delta
O procedimento ADD_AUTO_CDR_DELTA_RES no pacote DBMS_GOLDENGATE_ADM configura a detecção e a resolução de conflitos delta.
Com a resolução de conflitos delta, você especifica uma coluna para a qual os conflitos são detectados e resolvidos. O conflito será detectado se o valor da coluna na linha LCR não corresponder ao valor correspondente na tabela. O conflito é resolvido adicionando a diferença entre os valores novos e antigos na linha LCR para o valor na tabela.
Você pode configurar um administrador do Oracle GoldenGate usando o procedimento GRANT_ADMIN_PRIVILEGE no pacote DBMS_GOLDENGATE_ADM.
-
Estabeleça conexão com o banco de dados do servidor de entrada como um administrador do Oracle GoldenGate.
-
Execute o procedimento
ADD_AUTO_CDRe especifique a tabela a ser configurada para detecção e resolução de conflitos de timestamp mais recentes. -
Execute o procedimento
ADD_AUTO_CDR_DELTA_RESe especifique a coluna na qual a detecção e resolução de conflitos delta é executada. -
Repita as etapas anteriores em cada Oracle AI Database que replica a tabela.
Exemplo 9-23 Configurando a Detecção e a Resolução de Conflitos Delta para uma Tabela
Este exemplo configura a detecção e a resolução de conflitos delta para a coluna order_total na tabela oe.orders.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS');
END;
/
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_DELTA_RES(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS',
COLUMN_NAME => 'ORDER_TOTAL');
END;
/
Configurando a Detecção e Resolução de Conflitos de Timestamp Mais Recente
O procedimento ADD_AUTO_CDR no pacote DBMS_GOLDENGATE_ADM configura a detecção e a resolução de conflitos de timestamp mais recentes. O procedimento ADD_AUTO_CDR_COLUMN_GROUP adiciona grupos de colunas opcionais.
Para o Oracle AI Database 26ai e versões posteriores, existem métodos adicionais para gerenciar e manter tabelas configuradas do ACDR. Você pode manter as colunas subjacentes relacionadas ao AUTO-CDR como colunas UNUSED ou eliminá-las imediatamente após chamar o procedimento REMOVE_AUTO_CDR.
Se você aplicar o procedimento ADD_AUTO_CDR a uma tabela, por padrão, suas colunas internas serão marcadas como não usadas se AUTO_CDR for removido. Após chamar REMOVE_AUTO_CDR, as colunas não utilizadas poderão ser excluídas manualmente em um estágio posterior ou poderão ser removidas imediatamente usando alguns parâmetros adicionais. Para obter detalhes, consulte Removendo Detecção e Resolução de Conflitos de uma Tabela.
Para saber mais, consulte ADD_AUTO_CDR Procedure na Referência de Tipos e Pacotes PL/SQL do Oracle AI Database
Com a mais recente detecção e resolução de conflitos de timestamp, um conflito é detectado quando a coluna de timestamp da linha LCR não corresponde ao timestamp da linha da tabela correspondente. O LCR da linha será aplicado se seu timestamp for posterior. Caso contrário, a linha LCR será descartada e a linha da tabela não será alterada. Quando você executa o procedimento ADD_AUTO_CDR, ele adiciona uma coluna de timestamp invisível para cada linha na tabela especificada e configura a detecção e a resolução de conflitos de timestamp. Quando você usa o procedimento ADD_AUTO_CDR_COLUMN_GROUP para adicionar um ou mais grupos de colunas, ele adiciona um timestamp para o grupo de colunas e configura a detecção e a resolução de conflitos de timestamp para o grupo de colunas.
Você pode configurar um administrador do Oracle GoldenGate usando o procedimento GRANT_ADMIN_PRIVILEGE no pacote DBMS_GOLDENGATE_ADM.
-
Estabeleça conexão com o banco de dados do servidor de entrada como um administrador do Oracle GoldenGate.
-
Execute o procedimento
ADD_AUTO_CDRe especifique a tabela a ser configurada para detecção e resolução de conflitos de timestamp mais recentes. -
Execute o procedimento
ADD_AUTO_CDR_COLUMN_GROUPe especifique um ou mais grupos de colunas na tabela. -
Repita as etapas anteriores em cada Oracle AI Database que replica a tabela.
Exemplo 9-24 Configurando a Última Detecção e Resolução de Conflitos de Timestamp para uma Tabela
Este exemplo configura a detecção e a resolução de conflitos de timestamp mais recentes para a tabela hr.employees.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES');
END;
/
Exemplo 9-25 Configurando Grupos de Colunas
Este exemplo configura os seguintes grupos de colunas para resolução de conflito de timestamp na tabela HR.EMPLOYEES:
-
O grupo de colunas
JOB_IDENTIFIER_CGinclui as colunasJOB_ID,DEPARTMENT_IDeMANAGER_ID. -
O grupo de colunas
COMPENSATION_CGinclui as colunasSALARYeCOMMISSION_PCT.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_LIST => 'JOB_ID, DEPARTMENT_ID, MANAGER_ID',
COLUMN_GROUP_NAME => 'JOB_IDENTIFIER_CG');
END;
/
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_LIST => 'SALARY, COMMISSION_PCT',
COLUMN_GROUP_NAME => 'COMPENSATION_CG');
END;
/
Configurando a Detecção e a Resolução do Conflito Delta
O procedimento ADD_AUTO_CDR_DELTA_RES no pacote DBMS_GOLDENGATE_ADM configura a detecção e a resolução de conflitos delta.
Com a resolução de conflitos delta, você especifica uma coluna para a qual os conflitos são detectados e resolvidos. O conflito será detectado se o valor da coluna na linha LCR não corresponder ao valor correspondente na tabela. O conflito é resolvido adicionando a diferença entre os valores novos e antigos na linha LCR para o valor na tabela.
Você pode configurar um administrador do Oracle GoldenGate usando o procedimento GRANT_ADMIN_PRIVILEGE no pacote DBMS_GOLDENGATE_ADM.
-
Estabeleça conexão com o banco de dados do servidor de entrada como um administrador do Oracle GoldenGate.
-
Execute o procedimento
ADD_AUTO_CDRe especifique a tabela a ser configurada para detecção e resolução de conflitos de timestamp mais recentes. -
Execute o procedimento
ADD_AUTO_CDR_DELTA_RESe especifique a coluna na qual a detecção e resolução de conflitos delta é executada. -
Repita as etapas anteriores em cada Oracle AI Database que replica a tabela.
Exemplo 9-26 Configurando a Detecção e a Resolução de Conflitos Delta para uma Tabela
Este exemplo configura a detecção e a resolução de conflitos delta para a coluna order_total na tabela oe.orders.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS');
END;
/
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_DELTA_RES(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS',
COLUMN_NAME => 'ORDER_TOTAL');
END;
/
Gerenciando a Detecção e a Resolução Automática de Conflitos
Você pode gerenciar a detecção e resolução automáticas de conflitos do Oracle GoldenGate no Oracle AI Database com o pacote DBMS_GOLDENGATE_ADM.
Alterando a Detecção de Conflitos e a Resolução para uma Tabela
O procedimento ALTER_AUTO_CDR no pacote DBMS_GOLDENGATE_ADM altera a detecção e a resolução de conflitos de uma tabela.
A detecção e a resolução automáticas de conflitos do Oracle GoldenGate devem ser configuradas para a tabela:
-
Estabeleça conexão com o banco de dados do servidor de entrada como o administrador do Oracle GoldenGate.
-
Execute o procedimento
ALTER_AUTO_CDRe especifique a tabela a ser configurada para detecção e resolução de conflitos de timestamp mais recentes. -
Repita todas as etapas anteriores em cada Oracle AI Database que replica a tabela.
Exemplo 9-27 Alterando a Detecção e a Resolução de Conflitos de uma Tabela
Este exemplo altera a detecção e a resolução de conflitos da tabela HR.EMPLOYEES para especificar que os conflitos de exclusão são rastreados em uma tabela de lápide.
BEGIN
DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
TOMBSTONE_DELETES => TRUE);
END;
/
Alterando um Grupo de Colunas
O procedimento ALTER_AUTO_CDR_COLUMN_GROUP altera um grupo de colunas.
-
Estabeleça conexão com o banco de dados do servidor de entrada como um administrador do Oracle GoldenGate.
-
Execute o procedimento
ALTER_AUTO_CDR_COLUMN_GROUPe especifique um ou mais grupos de colunas na tabela. -
Repita todas as etapas anteriores em cada Oracle AI Database que replica a tabela.
Exemplo 9-28 Alterando um Grupo de Colunas
Este exemplo remove a coluna MANAGER_ID do grupo de colunas JOB_IDENTIFIER_CG da tabela HR.EMPLOYEES.
BEGIN
DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_GROUP_NAME => 'JOB_IDENTIFIER_CG',
REMOVE_COLUMN_LIST => 'MANAGER_ID');
END;
/
Observação: Se houver mais de uma coluna, use uma lista separada por vírgulas.
Expurgando Linhas de Lápide
O procedimento PURGE_TOMBSTONES remove as linhas de lápide que foram registradas antes de uma data e hora especificadas. Este procedimento remove as linhas de base de todas as tabelas configuradas para resolução de conflitos no banco de dados.
Pode ser necessário limpar as fileiras de lápide periodicamente para evitar que o log de lápide cresça muito ao longo do tempo.
-
Estabeleça conexão com o banco de dados do servidor de entrada como um administrador do Oracle GoldenGate.
-
Execute o procedimento
PURGE_TOMBSTONESe especifique a data e a hora.
Exemplo 9-29 Expurgando Linhas de Lápide
Este exemplo limpa todas as linhas de lápide registradas antes das 3:00 da tarde em 1º de dezembro de 2015, Horário Padrão do Leste. O timestamp deve ser informado no formato TIMESTAMP WITH TIME ZONE.
EXEC DBMS_GOLDENGATE_ADM.PURGE_TOMBSTONES('2015-12-01 15:00:00.000000 EST');
Redefinição On-line em Tabelas ACDR
O Oracle AI Database permite mitigar a interação do aplicativo ao reorganizar tabelas ou colunas usando o pacote DBMS_REDEFINITION. O pacote DBMS_REDEFINITION pode ser usado para executar as seguintes tarefas:
-
Remova as colunas não usadas.
-
Reorganização, redesenho de tablespace e particionamento.
O DBMS_REDFINITION.START_REDEF_TABLE gerencia automaticamente a coluna de timestamp oculto para a tabela provisória.
Para obter detalhes sobre o Pacote DBMS_REDFINITION, consulte DBMS_REDEFINITION no Oracle AI Database PL/SQL Packages and Types Reference.
Remover detecção e resolução de conflitos de uma tabela
Com o Oracle AI Database e versões mais recentes, a remoção completa do ADR (Automatic Conflict Detection and Resolution) da tabela terá menor impacto na tabela porque as colunas relacionadas a AUTO_CDR serão marcadas como UNUSED se AUTO_CDR for removido.
Depois de chamar o procedimento REMOVE_AUTO_CDR, as colunas não usadas podem ser excluídas manualmente em uma janela de manutenção. Isso é útil para tabelas grandes em que a operação ALTER TABLE ... DROP COLUMN consome muitos recursos.
Se quiser remover todas as colunas internas AUTO_CDR imediatamente ao chamar o procedimento REMOVE_AUTO_CDR, você deverá primeiro marcar a tabela usando o parâmetro additional_options REMOVE_HIDDEN_COLUMNS para o procedimento ADD_AUTO_CDR ou ALTER_AUTO_CDR.
Use o procedimento REMOVE_AUTO_CDR no pacote DBMS_GOLDENGATE_ADM para marcar uma tabela como UNUSED, que minimiza o bloqueio. Você pode optar por eliminar uma coluna ou retê-la em um estágio posterior.
-
Estabeleça conexão com o banco de dados do servidor de entrada como um administrador do Oracle GoldenGate.
-
Execute o procedimento
REMOVE_AUTO_CDRe especifique a tabela. -
Repita todas as etapas anteriores em cada instância do Oracle AI Database que replica a tabela.
Exemplo 9-30 Removendo a Detecção e a Resolução de Conflitos de uma Tabela
Este exemplo remove a detecção e a resolução de conflitos da tabela HR.EMPLOYEES.
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES');
END;
/
Você pode optar por eliminar colunas usando o flag ADD_AUTO_CDR.REMOVE_HIDDEN_COLUMNS como um parâmetro additional_flags no procedimento ADD_AUTO_CDR.
Veja um exemplo que você pode usar para exibir colunas ocultas em uma tabela.
A consulta a seguir usa o pacote DBA_UNUSED_COL_TABS para determinar se há colunas não usadas na tabela EMPLOYEES.
SELECT OWNER, TABLE_NAME, COUNT
FROM DBA_UNUSED_COL_TABS
WHERE OWNER = 'HR'
AND TABLE_NAME = 'EMPLOYEES'
ORDER BY OWNER, TABLE_NAME;
A saída é exibida da seguinte forma:
OWNER TABLE_NAME COUNT
-------- ------------ ----------
HR EMPLOYEES 1
A consulta a seguir lista as colunas ocultas que foram marcadas pelo sistema quando o ACDR foi removido do grupo de colunas na tabela EMPLOYEES.
SELECT OWNER, TABLE_NAME, COLUMN_ID, COLUMN_NAME, DATA_TYPE, HIDDEN_COLUMN
FROM DBA_TAB_COLS
WHERE OWNER = 'HR'
AND TABLE_NAME = 'EMPLOYEES'
AND HIDDEN_COLUMN = 'YES' AND USER_GENERATED= 'NO'
ORDER BY OWNER, TABLE_NAME, COLUMN_ID;
A saída é exibida da seguinte forma:
OWNER TABLE_NAME COLUMN_ID COLUMN_NAME DATA_TYPE HIDDEN_COLUMN
------------ ------------ ---------- ------------- ------------ ---------------
HR EMPLOYEES SYS_C00014_22092220:30:52$ TIMESTAMP(6) YES
Removendo um Grupo de Colunas
Com o Oracle AI Database 26ai e versões mais recentes, a remoção da ACDR (Automatic Conflict Detection and Resolution) dos grupos de colunas tem menor impacto na tabela porque as colunas relacionadas ao ACDR são marcadas como UNUSED. Você também pode optar por eliminar uma coluna ou retê-la em um estágio posterior.
Use o procedimento REMOVE_AUTO_CDR_COLUMN_GROUP no pacote DBMS_GOLDENGATE_ADM para marcar uma tabela, o que minimiza o bloqueio. Consulte o exemplo em Removendo Detecção e Resolução de Conflitos de uma Tabela.
-
Estabeleça conexão com o banco de dados do servidor de entrada como um administrador do Oracle GoldenGate.
-
Execute o procedimento
REMOVE_AUTO_CDR_COLUMN_GROUPe especifique o nome do grupo de colunas. -
Repita todas as etapas anteriores em cada Oracle AI Database que replica a tabela.
Exemplo 9-31 Removendo um Grupo de Colunas
Este exemplo remove o grupo de colunas COMPENSATION_CG da tabela HR.EMPLOYEES.
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_GROUP_NAME => 'COMPENSATION_CG');
END;
Removendo Detecção e Solução de Conflitos Delta
O procedimento REMOVE_AUTO_CDR_DELTA_RES no pacote DBMS_GOLDENGATE_ADM remove a detecção e a resolução de conflitos delta de uma coluna.
A detecção e a resolução de conflitos delta devem ser configuradas para a coluna especificada.
-
Estabeleça conexão com o banco de dados do servidor de entrada como um administrador do Oracle GoldenGate.
-
Execute o procedimento
REMOVE_AUTO_CDR_DELTA_RESe especifique a coluna. -
Repita todas as etapas anteriores em cada Oracle AI Database que replica a tabela.
Exemplo 9-32 Removendo a Detecção e a Resolução de Conflitos Delta para uma Tabela
Este exemplo remove a detecção e a resolução de conflitos delta da coluna ORDER_TOTAL na tabela OE.ORDERS.
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_DELTA_RES(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS',
COLUMN_NAME => 'ORDER_TOTAL');
END;
Monitorando a Detecção e a Resolução Automática de Conflitos
Você pode monitorar a detecção e a resolução automáticas de conflitos do Oracle GoldenGate em um Oracle AI Database consultando views do dicionário de dados.
Exibindo Informações Sobre as Tabelas Configuradas para Conflitos
A view ALL_GG_AUTO_CDR_TABLES exibe informações sobre as tabelas configuradas para detecção e resolução automáticas de conflitos do Oracle GoldenGate.
-
Conectar-se ao banco de dados.
-
Consulte a exibição
ALL_GG_AUTO_CDR_TABLES.
Exemplo 9-33 Exibindo Informações Sobre as Tabelas Configuradas para Detecção e Resolução de Conflitos
Esta consulta exibe as seguintes informações sobre as tabelas configuradas para detecção e resolução de conflitos:
-
O proprietário de cada tabela.
-
O nome de cada tabela.
-
A tabela de lápide usada para armazenar linhas excluídas para conflitos de exclusão de atualização, se uma tabela de lápide estiver configurada para a tabela.
-
A coluna de timestamp oculto usada para resolução de conflitos para cada tabela.
COLUMN TABLE_OWNER FORMAT A15
COLUMN TABLE_NAME FORMAT A15
COLUMN TOMBSTONE_TABLE FORMAT A15
COLUMN ROW_RESOLUTION_COLUMN FORMAT A25
SELECT TABLE_OWNER,
TABLE_NAME,
TOMBSTONE_TABLE,
ROW_RESOLUTION_COLUMN
FROM ALL_GG_AUTO_CDR_TABLES
ORDER BY TABLE_OWNER, TABLE_NAME;
Sua saída é semelhante à seguinte:
TABLE_OWNER TABLE_NAME TOMBSTONE_TABLE ROW_RESOLUTION_COLUMN
--------------- --------------- --------------- -------------------------
HR EMPLOYEES DT$_EMPLOYEES CDRTS$ROW
OE ORDERS DT$_ORDERS CDRTS$ROW
Exibir informações sobre colunas de resolução de conflitos
A view ALL_GG_AUTO_CDR_COLUMNS exibe informações sobre as colunas configuradas para detecção e resolução automáticas de conflitos do Oracle GoldenGate.
As colunas podem ser configuradas para detecção e resolução automática de conflitos de linha ou coluna. As colunas podem ser configuradas para a última resolução de conflito de timestamp em um grupo de colunas. Além disso, uma coluna pode ser configurada para resolução de conflitos delta.
-
Estabeleça conexão com o banco de dados como um administrador do Oracle GoldenGate.
-
Consulte a exibição
ALL_GG_AUTO_CDR_COLUMNS.
Exemplo 9-34 Exibindo Informações Sobre Grupos de Colunas
Esta consulta exibe as seguintes informações sobre as tabelas configuradas para detecção e resolução de conflitos:
-
O proprietário de cada tabela.
-
O nome de cada tabela.
-
Se a coluna estiver em um grupo de colunas, o nome do grupo.
-
O nome da coluna.
-
Se a coluna estiver configurada para a resolução de conflito de timestamp mais recente, o nome da coluna de timestamp oculto da coluna.
COLUMN TABLE_OWNER FORMAT A10
COLUMN TABLE_NAME FORMAT A10
COLUMN COLUMN_GROUP_NAME FORMAT A17
COLUMN COLUMN_NAME FORMAT A15
COLUMN RESOLUTION_COLUMN FORMAT A23
SELECT TABLE_OWNER,
TABLE_NAME,
COLUMN_GROUP_NAME,
COLUMN_NAME,
RESOLUTION_COLUMN
FROM ALL_GG_AUTO_CDR_COLUMNS
ORDER BY TABLE_OWNER, TABLE_NAME;
Sua saída é semelhante à seguinte:
TABLE_OWNE TABLE_NAME COLUMN_GROUP_NAME COLUMN_NAME RESOLUTION_COLUMN
---------- ---------- ----------------- --------------- -----------------------
HR EMPLOYEES COMPENSATION_CG COMMISSION_PCT CDRTS$COMPENSATION_CG
HR EMPLOYEES COMPENSATION_CG SALARY CDRTS$COMPENSATION_CG
HR EMPLOYEES JOB_IDENTIFIER_CG MANAGER_ID CDRTS$JOB_IDENTIFIER_CG
HR EMPLOYEES JOB_IDENTIFIER_CG JOB_ID CDRTS$JOB_IDENTIFIER_CG
HR EMPLOYEES JOB_IDENTIFIER_CG DEPARTMENT_ID CDRTS$JOB_IDENTIFIER_CG
HR EMPLOYEES IMPLICIT_COLUMNS$ PHONE_NUMBER CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ LAST_NAME CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ HIRE_DATE CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ FIRST_NAME CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ EMAIL CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ EMPLOYEE_ID CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_MODE CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_ID CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_DATE CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ CUSTOMER_ID CDRTS$ROW
OE ORDERS DELTA$ ORDER_TOTAL
OE ORDERS IMPLICIT_COLUMNS$ PROMOTION_ID CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_STATUS CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ SALES_REP_ID CDRTS$ROW
Neste exemplo, as colunas com IMPLICIT_COLUMNS$ para o nome do grupo de colunas são configuradas para detecção e resolução de conflitos de linha, mas não fazem parte de um grupo de colunas. As colunas com DELTA$ para o nome do grupo de colunas são configuradas para detecção e resolução de conflitos delta, e essas colunas não têm uma coluna de resolução.
Exibir informações sobre grupos de colunas
A view ALL_GG_AUTO_CDR_COLUMN_GROUPS exibe informações sobre os grupos de colunas configurados para detecção e resolução automáticas de conflitos do Oracle GoldenGate.
Você pode configurar a detecção e a resolução automáticas de conflitos do Oracle GoldenGate usando o procedimento ADD_AUTO_CDR no pacote DBMS_GOLDENGATE_ADM. Você pode configurar grupos de colunas usando o procedimento ADD_AUTO_CDR_COLUMN_GROUP no pacote DBMS_GOLDENGATE_ADM.
-
Estabeleça conexão com o banco de dados como um administrador do Oracle GoldenGate.
-
Consulte a exibição
ALL_GG_AUTO_CDR_COLUMN_GROUPS.
Exemplo 9-35 Exibindo Informações Sobre Grupos de Colunas
Esta consulta exibe as seguintes informações sobre as tabelas configuradas para detecção e resolução de conflitos:
-
O proprietário da tabela.
-
O nome da tabela.
-
O nome do grupo de colunas.
-
A coluna de timestamp oculto usada para resolução de conflitos para cada grupo de colunas.
COLUMN TABLE_OWNER FORMAT A15
COLUMN TABLE_NAME FORMAT A15
COLUMN COLUMN_GROUP_NAME FORMAT A20
COLUMN RESOLUTION_COLUMN FORMAT A25
SELECT TABLE_OWNER,
TABLE_NAME,
COLUMN_GROUP_NAME,
RESOLUTION_COLUMN
FROM ALL_GG_AUTO_CDR_COLUMN_GROUPS
ORDER BY TABLE_OWNER, TABLE_NAME;
A saída é semelhante à seguinte:
TABLE_OWNER TABLE_NAME COLUMN_GROUP_NAME RESOLUTION_COLUMN
--------------- --------------- -------------------- -------------------------
HR EMPLOYEES COMPENSATION_CG CDRTS$COMPENSATION_CG
HR EMPLOYEES JOB_IDENTIFIER_CG CDRTS$JOB_IDENTIFIER_CG