Recuperar um Banco de Dados do Serviço Object Storage Usando o Backup do RMAN

Este artigo explica como recuperar um backup do RMAN (Recovery Manager) armazenado no Object Storage.

Pré-requisitos

Será necessário o seguinte:

Premissas

Os procedimentos abaixo pressupõem o seguinte:

  • Um novo sistema de banco de dados foi criado para hospedar o banco de dados restaurado e não há outro banco de dados presente no novo sistema de banco de dados. É possível restaurar para um sistema de banco de dados que tenha bancos de dados existentes, mas isso está além do escopo deste tópico.
  • O banco de dados original foi perdido e tudo o que resta é o backup mais recente do RMAN. O procedimento pressupõe que o sistema de banco de dados (incluindo o banco de dados) não existe mais.

    Observação:

    Todos os dados não incluídos no backup mais recente serão perdidos.
  • As chaves de criptografia e/ou do Oracle Wallet usadas no banco de dados original no momento do último backup estão disponíveis.
  • O backup do RMAN contém uma cópia do arquivo de controle e do spfile do backup mais recente, bem como de todos os backups do arquivo de dados e do log de arquivamento necessários para executar uma recuperação completa do banco de dados.
  • Um catálogo do RMAN não será usado durante a restauração.

Configurar o Armazenamento no sistema de banco de dados

  1. Estabeleça conexão via SSH com o Sistema de Banco de Dados.
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. Faça log-in como opc e, em seguida, sudo para o usuário raiz. Use sudo su - com um hífen para chamar o perfil do usuário raiz, que definirá o PATH para o diretório dbcli (/opt/oracle/dcs/bin).
    login as: opc
    sudo su -
  3. Você pode usar um home de banco de dados vazio existente ou criar um novo para a restauração. Use os comandos aplicáveis para concluir esta etapa.

    Se você estiver usando um home de banco de dados existente:

    • Use os Comandos Dbhome para listar os homes de banco de dados.

      dbcli list-dbhomes
      Saída:
      ID                                       Name                 DB Version Home Location
      ---------------------------------------- -------------------- ---------- ---------------------------------------------
      2e743050-b41d-4283-988f-f33d7b082bda     OraDB12102_home1     12.1.0.2   /u01/app/oracle/product/12.1.0.2/dbhome_1
    • Use os Comandos Database para garantir que o home do banco de dados não esteja associado a nenhum banco de dados.

    Se necessário, use os Comandos Dbhome para criar um home de banco de dados para a restauração.

  4. Use os Comandos Dbstorage para configurar diretórios para armazenamento DATA, RECO e REDO. O exemplo a seguir cria 10 GB de armazenamento ACFS para o banco de dados rectest.
    dbcli create-dbstorage --dbname rectest --dataSize 10 --dbstorage ACFS 

    Observação:

    Ao restaurar um banco de dados versão 11.2, o armazenamento ACFS deve ser especificado.

Executar a Restauração e Recuperação do Banco de Dados

  1. Estabeleça conexão via SSH com o sistema de banco de dados, faça log-in como opc e, em seguida, torne-se o usuário oracle.
    sudo su - oracle
  2. Crie uma entrada em /etc/oratab para o banco de dados. Use o mesmo SID do banco de dados original.
    db1:/u01/app/oracle/product/12.1.0.2/dbhome_1:N
  3. Defina as variáveis de ambiente ORACLE_HOME e ORACLE_SID usando o utilitário oraenv.
    . oraenv
  4. Obtenha o DBID do banco de dados original. Isso pode ser obtido do nome do arquivo do backup automático controlfile na mídia de backup. O nome do arquivo incluirá uma string que contém o DBID. O formato típico da string é c-DDDDDDDDDDDD-YYYYMMDD-NN, em que DDDDDDDDDDDD corresponde ao DBID, YYYYMMDD corresponde à data em que o backup foi criado e NN corresponde a um número de sequência para tornar o nome do arquivo exclusivo. O DBID nos exemplos a seguir é 1508405000. Seu DBID será diferente.

    Use a sintaxe curl a seguir para executar uma consulta geral do Object Storage. Os parâmetros em vermelho são os mesmos parâmetros especificados durante a instalação do módulo de backup, conforme descrito em Instalando o Módulo de Backup no Sistema de Banco de Dados em Fazer Backup de um Banco de Dados no Serviço Object Storage Usando o RMAN.

    curl -u '<user_ID>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>

    Para pesquisar o nome da região, consulte Regiões e Domínios de Disponibilidade.

    Por exemplo:

    curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace

    Para obter o DBID do nome do arquivo de controle, use a seguinte sintaxe:

    curl -u '<user_id>.com:<auth_token>' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/<object_storage_namespace>/<bucket_name>?prefix=sbt_catalog/c-

    Por exemplo:

    curl -u 'djones@mycompany.com:1cnk!d0++ptETd&C;tHR' -v https://swiftobjectstorage.<region_name>.oraclecloud.com/v1/myobjectstoragenamespace/dbbackups/?prefix=sbt_catalog/c-

    Na saída de amostra abaixo, 15084000 corresponde ao DBID.

    {
        "bytes": 1732,
        "content_type": "binary/octet-stream",
        "hash": "f1b61f08892734ed7af4f1ddaabae317",
        "last_modified": "2016-08-11T20:28:34.438000",
        "name": "sbt_catalog/c-1508405000-20160811-00/metadata.xml"
    }
  5. Execute o RMAN e estabeleça conexão com o banco de dados de destino. Não é necessário criar um pfile ou spfile ou usar um backup controlfile. Eles serão restaurados nas etapas a seguir. Observe que o banco de dados de destino é (not started). Isso é normal e esperado nesse ponto.
    rman target /
    Saída:
    Recovery Manager: Release 12.1.0.2.0 - Production on Wed Jun 22 18:36:40 2016
    Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
    connected to target database (not started)
  6. Defina o DBID usando o valor obtido acima.
    set dbid 1508405000;
  7. Execute o seguinte comando. Se o arquivo de parâmetros do servidor não estiver disponível, o RMAN tentará iniciar a instância com um arquivo de parâmetros do servidor dummy. Os erros ORA-01078 e LRM-00109 são normais e podem ser ignorados.
    STARTUP NOMOUNT
    startup failed: ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/u01/app/oracle/product/12.1.0.2/dbhome_1/dbs/initdb1.ora'
     
    starting Oracle instance without parameter file for retrieval of spfile
    Oracle instance started
     
    Total System Global Area    2147483648 bytes
     
    Fixed Size                     2944952 bytes
    Variable Size                847249480 bytes
    Database Buffers            1254096896 bytes
    Redo Buffers                  43192320 bytes
  8. Restaure o arquivo de parâmetros do servidor do backup automático.

    A SBT_LIBRARY é a mesma biblioteca especificada com o parâmetro -libDir de quando o Módulo de Backup foi instalado, por exemplo, /home/oracle/lib/.

    O OPC_PFILE é o mesmo arquivo especificado com o parâmetro -configfile de quando o Módulo de Backup foi instalado, por exemplo, /home/oracle/config.

    set controlfile autobackup format for device type sbt to '%F';
    run {
      allocate channel c1 device type sbt PARMS  'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore spfile from autobackup;
    }
  9. Crie o diretório para audit_file_dest. O padrão é /u01/app/oracle/admin/$ORACLE_SID/adump. Você pode ver a definição usada pelo banco de dados original, pesquisando a string audit_file_dest no spfile.
    strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep audit_file_dest
    *.audit_file_dest='/u01/app/oracle/admin/db1/adump'
     
    mkdir -p /u01/app/oracle/admin/db1/adump
  10. Se o rastreamento de alterações em blocos estiver ativado no banco de dados original, crie o diretório para o arquivo de rastreamento de alterações em blocos. O diretório estará em db_create_file_dest. Pesquise o nome do diretório no spfile.
    strings ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora | grep db_create_file_dest
    *.db_create_file_dest='/u02/app/oracle/oradata/db1'
     
    mkdir -p /u02/app/oracle/oradata/db1/<$ORA_UNQNAME if available or database name>/changetracking
  11. Reinicie a instância com o arquivo de parâmetros do servidor restaurado.
    STARTUP FORCE NOMOUNT;
  12. Restaure o arquivo de controle do backup automático do RMAN e monte o banco de dados.
    set controlfile autobackup format for device type sbt to '%F';
    run {
      allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore controlfile from autobackup;
      alter database mount;
    }
  13. Restaure e recupere o banco de dados
    RESTORE DATABASE;
    RECOVER DATABASE;
  14. O RMAN será recuperado usando redo logs arquivados até não encontrar mais logs. É normal que ocorra um erro semelhante ao abaixo quando o RMAN aplicar o último redo log arquivado no backup e não encontrar mais logs.
    unable to find archived log
    archived log thread=1 sequence=29
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of recover command at 06/28/2016 00:57:35
    RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 29 and starting SCN of 2349563
  15. Abra o banco de dados com RESETLOGS.
    ALTER DATABASE OPEN RESETLOGS;

A recuperação é concluída. O banco de dados terá todas as transações confirmadas a partir do último redo log arquivado com backup.