Notas sobre o Release


13.3 Como Utilizar E/S Suspensa para Recuperação do Banco de Dados

As informações abaixo sobre o utilitário db2inidb substituem as informações do manual O Que Há de Novo na Versão 7.2.

O db2inidb é uma ferramenta fornecida com o DB2 que pode executar recuperação de travamento ou colocar um banco de dados em estado pendente de atualização.

E/S Suspensa suporta disponibilidade contínua de sistema por proporcionar implementação integral para tratamento de espelhamento dividido online, ou seja, dividir um espelhamento sem desligar o banco de dados. Se não for possível fazer backups offline ou online em um grande banco de dados, você pode fazer backups ou cópias do sistema a partir de uma imagem espelhada utilizando E/S Suspensa e uma imagem espelhada dividida.

E/S suspensa evita gravações em disco enquanto a imagem espelhada dividida de um banco de dados está sendo feita. Todas as operações do banco de dados além de backup e restauração online devem funcionar normalmente enquanto um banco de dados está suspenso. No entanto, algumas operações podem esperar que as gravações de E/S sejam retomadas, caso páginas danificadas precisem ser eliminadas do conjunto de buffers ou buffers de log para os logs. Essas operações devem reiniciar normalmente assim que as E/S do banco de dados forem reiniciadas. É importante que as E/S do banco de dados sejam reiniciadas a partir da mesma conexão de que elas foram originalmente suspensas. Caso contrário, uma tentativa subseqüente de conexão pode ser interrompida se exigir a limpeza de páginas danificadas do conjunto de buffers para o disco. Essas conexões serão concluídas quando a E/S for retomada. Se suas tentativas de conexão estiverem sendo interrompidas e se tornar impossível retomar a E/S da conexão utilizada para suspendê-la, será necessário executar uma recuperação de travamento utilizando a opção WRITE RESUME do comando RESTART.

Em um ambiente de banco de dados particionado, não é necessário suspender gravações de E/S em todas a partições de maneira simultânea. É possível suspender um subconjunto de uma ou mais partições para criar espelhamentos divididos para executar backups offline. Se o nó do catálogo estiver incluído no subconjunto, ele deve ser a última partição a ser suspensa.

O espelhamento de um banco de dados envolve principalmente a cópia de todo o conteúdo do diretório do banco de dados e do diretório do banco de dados local. O diretório do banco de dados local, sqldbdir está localizado no mesmo nível da estrutura de arquivos que o diretório do banco de dados principal. Além disso, se os contêineres do diretório de log e da área de tabela não estiverem no diretório do banco de dados, eles também devem ser copiados. Como o banco de dados espelhado dividido é dependente desses caminhos de diretório, os caminhos para os quais esses diretórios são copiados devem ser idênticos aos do sistema principal. Isso significa que a instância deve também ser a mesma. Como resultado dessa dependência, não é possível criar um banco de dados espelhado no mesmo sistema do banco de dados principal, a não ser que a nova opção "relocate" da ferramenta db2inidb seja utilizada.

O propósito da opção "relocate" é realocar um banco de dados em um determinado sistema, utilizando a arquivo de configuração especificado. Isso pode envolver alterar o diretório interno do banco de dados, o diretório do contêiner, o diretório de log, o nome da instância e os nomes do banco de dados. Assumindo-se que o diretório do banco de dados, diretórios de contêiner e diretório de registro foram espelhados com sucesso nos diferentes caminhos de diretório no mesmo sistema que o banco de dados principal, a ferramenta db2inidb pode ser utilizada juntamente com a opção "relocate" para atualizar os caminhos internos do banco de dados espelhado. Um cenário de utilização com essa opção pode ser encontrado abaixo.

Dependendo de como os dispositivos de armazenamento estão sendo espelhados, as utilizações de db2inidb irão variar. As seguintes utilizações assumem que todo o banco de dados está espelhado, consistentemente através do sistema de armazenamento.

Em um ambiente com vários nós, a ferramenta db2inidb deve ser executada em cada partição antes que o espelhamento dividido possa ser utilizado a partir de qualquer uma das partições. A ferramenta db2inidb pode ser executada em todas as partições simultaneamente utilizando o comando db2_all.

  1. Clonando um Banco de Dados

    O objetivo aqui é ter um clone do banco de dados principal para ser utilizado em outro sistema. O seguinte procedimento descreve como um banco de dados clone pode ser feito:

    1. Suspenda gravações de E/S no banco de dados principal, digitando o seguinte comando:
           db2 set write suspend for database
      
    2. Utilize comandos em nível de sistema operacional e em nível de subsistema para dividir o espelhamento do banco de dados principal. Certifique-se de dividir os dados e os logs.
    3. Reinicie gravações de E/S no banco de dados principal, digitando o seguinte comando:
           db2 set write resume for database
      

      Após executar o comando, o banco de dados principal deve voltar ao estado normal.

    4. Monte o espelhamento dividido do banco de dados principal em outro sistema.
    5. Inicie a instância do banco de dados no outro sistema digitando o seguinte comando:
           db2start
      
    6. Inicie a recuperação de falha do DB2 digitando o seguinte comando:
      db2inidb database_name AS  SNAPSHOT
      
      Nota:
      Esse comando removerá o estado de gravação suspensa e atualizará as alterações feitas por transações que estavam ocorrendo no momento da divisão.

    Você também pode utilizar esse processo para fazer um backup offline, mas se restaurado no banco de dados principal, esse backup não poderá ser utilizado para atualização, porque a cadeia de logs não será igual.

  2. Utilizando o Espelhamento Dividido como um Banco de Dados de Reserva

    Como o banco de dados espelhado (de reserva) é continuamente atualizado por meio de logs, novos logs que são criados pelo banco de dados principal são constantemente recuperados do sistema principal. O seguinte procedimento descreve como um espelhamento dividido pode ser utilizado como um banco de dados de espera:

    1. Suspenda gravações de E/S no banco de dados principal:
      	db2 set write suspend for database
      
    2. Utilize comandos em nível de sistema operacional e de subsistema para dividir o espelhamento do banco de dados principal. Certifique-se de dividir apenas os dados, e não os logs.
    3. Reinicie as gravações de E/S no banco de dados principal de modo que ele retorne ao processamento normal.
      	db2 set write resume for database
      
    4. Monte o espelhamento dividido do banco de dados para outro sistema.
    5. Inicie instância do banco de dados principal utilizando o comando db2start.
    6. Posicione o espelhamento em atualização pendente e atualize o espelhamento.
      	db2inidb database_name AS STANDBY
      

      Nota:
      Esse comando removerá o estado de gravação suspensa e posicionará o banco de dados espelhado em estado de atualização pendente.
    7. Copie os logs configurando um programa de saída de usuário para recuperar arquivos de registro a partir de um sistema principal para assegurar que os registros mais recentes estejam disponíveis para esse banco de dados espelhado.
    8. Avance o banco de dados para o final dos logs.
    9. Retorne à etapa f e repita esse processo até que o banco de dados principal esteja inativo.
    10. Atualize o banco de dados até o final dos logs, utilizando a opção AND STOP para que o banco de dados fique online novamente. Ele agora estará pronto para utilização.
  3. Utilizando o Espelhamento Dividido como uma Imagem de Backup

    O seguinte procedimento descreve como utilizar o banco de dados espelhado como uma imagem de backup para restaurar no banco de dados principal:

    1. Pare a instância do banco de dados principal com o comando db2stop.
    2. Utilize comandos de sistema operacional e de subsistema de disco para copiar os dados espelhados sobre o banco de dados principal. Não copie os arquivos de log de volta. Os logs no banco de dados principal devem ser utilizados para operações de atualização.
    3. Inicie a instância do banco de dados principal com o comando db2start.
    4. Execute o seguinte comando para posicionar o banco de dados espelhado em um estado de atualização pendente e remover o estado de gravação suspensa.
      db2inidb database_name AS MIRROR
      
    5. Atualize o banco de dados até o final dos logs, utilizando a opção AND STOP para que o banco de dados fique online novamente. Ele agora estará pronto para utilização.
  4. Dividindo um Espelhamento em um Mesmo Sistema que o Banco de Dados Principal

    O seguinte procedimento descreve como utilizar a opção "relocate" da ferramenta db2inidb para espelhar um banco de dados no mesmo sistema que um banco de dados principal. O exemplo assume que o banco de dados será utilizado sob uma nova instância.

    1. Crie uma nova instância no sistema atual.
    2. Suspenda gravações de E/S no banco de dados principal:
      	db2 set write suspend for database
      
    3. Utilize comandos em nível de sistema operacional e de subsistema de disco para dividir o espelhamento a partir do banco de dados principal.
      Nota:
      O diretório do banco de dados, do banco de dados local, do contêiner e o diretório de log devem ser copiados na nova instância. Se os diretórios de contêiner ou o diretório de log existirem sob o diretório do banco de dados, somente o diretório do banco de dados e o do banco de dados local precisam ser copiados.
    4. Retome as gravações de E/S no banco de dados principal de modo que ele retorne ao processamento normal:
      	db2 set write resume for database
      
    5. Crie um arquivo de configuração com as seguintes informações:
      DB_NAME=name,optional_new_name
      DB_PATH=primary_db_dir_path,mirrored_db_dir_path
      INSTANCE=primary_instance,mirror_instance
      LOG_DIR=primary_db_log_dir,mirrored_db_log_dir
      CONT_PATH=primary_db_container_#1_path,
      mirrored_db_container_#1_path ...
      CONT_PATH=primary_db_container_#n_path,
      mirrored_db_container_#n_path
      NODENUM=node_#

      Nota:
      Os campos LOG_DIR e CONT_PATH são requeridos apenas se o diretório de log e os de contêiner existirem fora do diretório do banco de dados. Todos os outros campos são requeridos, com exceção de NODENUM que assumirá o valor de zero como padrão se não estiver especificado.
    6. Inicie o banco de dados a partir da instância recém-criada:
      	db2start
      
    7. Realoque o banco de dados espelhado, remova o estado suspenso e posicione o espelhamento em estado de atualização pendente:
      	db2inidb database_name as STANDBY relocate using config_file
      
    8. Copie os logs configurando um programa de saída de usuário para recuperar arquivos de registro a partir de um sistema principal, assegurando que os logs mais recentes estarão disponíveis para esse banco de dados espelhado.
    9. Avance o banco de dados para o final dos logs.
    10. Retorne à etapa h e repita esse processo até que o banco de dados principal esteja inativo.
    11. Atualize o banco de dados até o final dos logs, utilizando a opção AND STOP para que o banco de dados fique online novamente. Ele agora estará pronto para utilização.


[ Início da Página | Página Anterior | Próxima Página | Índice | Índice Remissivo ]