Administrando uma Configuração de Replicat Coordenado

Esta seção contém instruções para coordenar threads e reparticionar a carga de trabalho entre threads novos ou diferentes. Um Replicat coordenado deve ser interrompido corretamente com o comando STOP REPLICAT antes de fazer modificações nas especificações de partição nas cláusulas THREAD ou THREADRANGE das instruções MAP. Uma parada limpa garante que todos os fios, que podem estar em locais diferentes na trilha em qualquer ponto, terminem seu trabalho e cheguem a um local de trilha comum.

Na inicialização, o Replicat emitirá um erro e será encerrado se detectar que o último shutdown não foi limpo e que o particionamento nas instruções MAP foi alterado para conter outro número de threads (os threads foram adicionados ou removidos). No entanto, se os mesmos threads forem mantidos no arquivo de parâmetros, mas simplesmente reorganizados entre diferentes instruções MAP, o Replicat emitirá uma advertência, mas não será interrompido. Isso pode resultar em registros ausentes ou duplicados, porque não há como garantir a continuidade das alocações de thread para carga de trabalho da execução anterior.

Veja a seguir um exemplo desta condição.

A seguir está o esquema de particionamento original:

MAP source, target, THREADRANGE(1-5);
MAP source1, target1, THREADRANGE(6-10);

O seguinte reparticionamento do esquema original produz apenas um aviso:

MAP source, target, THREADRANGE(1-4);
MAP source1, target1, THREADRANGE(5-10);

Esta seção fornece instruções para fazer shutdown correto do Replicat antes de executar um novo particionamento, bem como instruções para tentar recuperar a continuidade do Replicat quando um novo particionamento é executado após um shutdown impuro.

As tarefas a seguir podem ser executadas para um grupo Replicat no modo coordenado.

Executando um Reparticionamento Planejado da Carga de Trabalho

Um reparticionamento planejado ocorre quando o Replicat tem permissão para fazer shutdown corretamente antes de ser iniciado novamente com um novo arquivo de parâmetros que contém o particionamento de thread atualizado. Um shutdown limpo permite que todos os threads cheguem a uma posição de checkpoint comum na trilha. Nesse ponto, o novo esquema de particionamento pode ser aplicado na próxima execução.

  1. Execute o Admin Client.

  2. Interrompa o Replicat.

STOP REPLICAT *group*
  1. Abra o arquivo de parâmetros para edição.
EDIT PARAMS *group*
  1. Faça as alterações necessárias nas especificações THREAD ou THREADRANGE nas instruções MAP.

  2. Salve e feche o arquivo de parâmetros.

  3. Iniciar Replicação.

START REPLICAT *group*

Recuperando o Replicat Após um Reparticionamento Não Planejado

Um reparticionamento não planejado ocorre quando o Replicat não tem permissão para fazer shutdown corretamente antes de ser iniciado novamente com um novo arquivo de parâmetros que contém o particionamento de thread atualizado. Neste cenário, alguns ou todos os fios antigos não foram capazes de terminar o seu trabalho e chegar a um ponto de verificação comum. Ao reiniciar, o thread do coordenador tenta aplicar o esquema de particionamento antigo e o Replicat termina com um erro. Você pode recuperar o grupo Replicat coordenado dessa condição de uma das seguintes maneiras:

Reprocessamento a partir da marca d'água baixa com HANDLECOLLISIONS

Neste procedimento, você reposiciona todos os threads na posição marca d'água baixa. Esta é a primeira posição de checkpoint executada entre todos os threads. Para afirmar de outra forma, a posição de marca d'água baixa é o último registro processado pelo thread mais lento antes da parada impura. Quando você inicia o Replicat, os threads reprocessam as operações que estavam processando antes da interrupção do Replicat, e o parâmetro HANDLECOLLISIONS trata qualquer erro de registro duplicado e de registro ausente que ocorra como as operações de reprocessamento de threads mais rápidas aplicadas antes da interrupção imunda.

  1. Adicione o parâmetro HANDLECOLLISIONS ao arquivo de parâmetros Replicat. Não é necessário usar nenhuma opção THREADS.

  2. Emita o comando INFO REPLICAT para o grupo Replicat como um todo (o thread coordenador). Faça um registro da RBA do checkpoint. Este é o valor da marca d'água baixa. Essa saída também mostra os IDs de thread ativos na coluna Group Name. Faça um registro desses também.

INFO REPLICAT *group*
For example:

<pre class="copy"><code>OGG(slc03jgo) 3&gt; info ra detail REPLICAT   RA       Last Started 2013-05-01 14:15   Status ABENDEDCOORDINATED          Coordinator                      MAXTHREADS 15Checkpoint Lag       00:00:00 (updated 00:00:07 ago)Process ID           11445Log Read Checkpoint  File ./dirdat/withMaxTransOp/bg000000001                     2013-05-02 07:49:45.975662  RBA 44704Lowest Log BSN value: (requires database login)Active Threads: ID  Group Name PID   Status   Lag at Chkpt  Time Since Chkpt1   RA001     11454 ABENDED  00:00:00      00:00:01    2   RA002     11455 ABENDED  00:00:00      00:00:04    3   RA003     11456 ABENDED  00:00:00      00:00:01    5   RA005     11457 ABENDED  00:00:00      00:00:02    6   RA006     11458 ABENDED  00:00:00      00:00:04    7   RA007     11459 ABENDED  00:00:00      00:00:04</code></pre>
  1. Emita o comando INFO REPLICAT para cada ID de thread de processamento e registre a posição de RBA de cada thread. Anote a RBA mais alta. Esta é a marca d'água superior do grupo Replicat.
INFO REPLICAT *threadID*
For example:

<pre class="copy"><code>info ra002 REPLICAT   RA002    Last Started 2013-05-01 14:15   Status ABENDEDCOORDINATED          Replicat Thread                  Thread 2Checkpoint Lag       00:00:00 (updated 00:00:06 ago)Process ID           11455 Log Read Checkpoint  File ./dirdat/withMaxTransOp/bg000000001                     2013-05-02 07:49:15.837271  RBA 45603</code></pre>
  1. Emita o comando ALTER REPLICAT para o thread coordenador (Replicat como um todo, sem qualquer ID de thread) e posicione-o na RBA baixa marca d'água que você registrou.
ALTER REPLICAT *group* EXTRBA *low_watermark_rba*
  1. Iniciar Replicação.
START REPLICAT *group*
  1. Emita o comando INFO REPLICAT básico até que ele mostre um RBA maior que a marca d'água alta registrada. O HANDLECOLLISIONS trata todas as colisões que ocorrem devido a transações aplicadas anteriormente.
INFO REPLICAT *group*
  1. Interrompa o Replicat.
STOP REPLICAT *group*
  1. Remova ou comente o parâmetro HANDLECOLLISIONS.

  2. Iniciar Replicação.

START REPLICAT *group*

Usando o Arquivo de Parâmetros Salvos Automaticamente

Uma cópia do arquivo de parâmetros original é salva sempre que o arquivo de parâmetros é editado antes de fazer shutdown do Replicat corretamente. Você pode reverter para esse arquivo de parâmetros e, em seguida, ressincronizar os threads para que todos eles alcancem o thread que tinha a posição de checkpoint mais recente. Depois que os threads forem sincronizados, você poderá alternar para o novo arquivo de parâmetros e, em seguida, iniciar o Replicat.

  1. Salve o novo arquivo de parâmetros com outro nome e renomeie o arquivo de parâmetros original salvo com o nome correto (igual ao nome do grupo). O arquivo de parâmetros salvo tem um sufixo .backup e é armazenado no subdiretório dirprm do diretório de instalação do Oracle GoldenGate.

  2. Emita o comando a seguir para sincronizar os threads de Replicat com a posição máxima do checkpoint. Esse comando inicia automaticamente o Replicat e executa os threads até que eles atinjam a posição máxima do checkpoint.

SYNCHRONIZE REPLICAT *group*
  1. Execute o comando STATUS REPLICAT até mostrar que o Replicat foi interrompido corretamente.
STATUS REPLICAT *group*
  1. Salve o arquivo de parâmetros original em outro nome e, em seguida, renomeie o novo arquivo de parâmetros para o nome do grupo.

  2. Iniciar Replicação.

START REPLICAT *group*