Interações entre Buscas de uma Tabela e de uma DDL

O Oracle GoldenGate suporta alguns tipos de dados ao identificar a linha modificada do fluxo de redo e, em seguida, consultar a tabela subjacente para extrair as colunas alteradas. Por exemplo, há suporte para atualizações parciais em LOBs identificando a linha modificada e a coluna LOB do redo log e, em seguida, consultando o valor da coluna LOB para a linha da tabela base. Uma técnica similar é empregada para apoiar o UDT.

Observação: A extração só requer extração para UDT quando não usa suporte a objeto nativo.

Esse suporte baseado em extração é implementado emitindo uma consulta de flashback para o banco de dados com base no SCN (System Change Number) no qual a transação foi confirmada. O recurso de consulta de flashback tem determinadas limitações. Certas operações DDL agem como barreiras, de modo que as consultas de flashback para obter dados antes desses DDLs não sejam bem-sucedidas. Exemplos dessa DDL são ALTER TABLE MODIFY COLUMN e ALTER TABLE DROP COLUMN.

Assim, nos casos em que há atraso na captura do Extract, uma DDL interveniente pode fazer com que as solicitações de extração de dados antes da DDL falhem. Nesses casos, o Extract faz fallback e extrai o instantâneo atual dos dados da coluna modificada. Há várias limitações para essa abordagem: primeiro, o DDL pode ter modificado a coluna que o Extract precisa extrair (por exemplo, suponha que o DDL interveniente tenha adicionado um novo atributo ao UDT que está sendo capturado). Segundo, a DDL poderia ter modificado uma das colunas que a Extract usa como identificador de linha lógica. Terceiro, a tabela poderia ter sido renomeada antes de Extract ter a chance de extrair os dados.

Para evitar inconsistências relacionadas à extração, como essas, tome as seguintes precauções ao modificar colunas.

  1. Pausar todas as DML na tabela.

  2. Aguarde até que o Extract termine de capturar todos os redo restantes e aguarde até que o Replicat conclua o processamento dos dados capturados da trilha. Para determinar se o processo Replicat foi concluído, execute o comando a seguir até ver uma mensagem informando que não há mais dados para serem processados.

    INFO REPLICAT *group*
  3. Execute o DDL na origem.

  4. Retomar operações DML de origem.