Restaurar Backup

Restaure os dados do backup do banco de dados de origem para o banco de dados de destino.

Instalar o Backup do Oracle Database no Banco de Dados de Destino

Copie o arquivo oci_install.jar para o host do banco de dados de destino e execute o comando para instalar o Backup do Oracle Database no destino.

Instalar o Oracle Database Backup Cloud Service no banco de dados de origem
  1. Copie o arquivo oci_install.jar para o host do banco de dados de destino por meio do bastion host e descompacte-o.
    BASTION_IP=BASTION_IP # public IP
    DB_HOST=DB_HOST # private IP
    
    scp -o ProxyCommand="ssh -W %h:%p
    opc@${BASTION_IP}" oci_install.jar 
    opc@${DB_HOST}:~/
    
    ssh -J opc@${BASTION_IP} opc@${DB_HOST} 'sudo chown oracle:oinstall oci_install.jar; sudo mv oci_install.jar
    /home/oracle/'
  2. Faça SSH no banco de dados de destino do OCI por meio do bastion host e alterne para o usuário oracle.
    ssh -J opc@${BASTION_IP} opc@${DB_HOST}
    sudo su - oracle
  3. Faça backup da wallet atual e instale a wallet no banco de dados de destino.
    mv $ORACLE_HOME/data/wallet $ORACLE_HOME/data/wallet_bck
    mkdir -p $ORACLE_HOME/data/wallet
    unzip wallet.zip -d $ORACLE_HOME/data/wallet/
  4. Execute o comando do Módulo de Backup do Database Cloud para instalar a biblioteca e criar o arquivo config.
    Este é o mesmo comando executado para instalar o Oracle Database Backup Cloud Service no banco de dados de origem, embora a variável ORACLE_HOME possa ser diferente.
    java -jar oci_install.jar \
    -host https://objectstorage.region.oraclecloud.com \
    -pubFingerPrint wallet_public_key_fingerprint \
    -tOCID tenancy_OCID \
    -uOCID user_OCID \
    -cOCID compartment_OCID \
    -libDir $ORACLE_HOME/lib \
    -walletDir $ORACLE_HOME/data/wallet \
    -pvtKeyFile $ORACLE_HOME/data/wallet/oci_pvt \
    -bucket bucket_name \
    -configFile ~/config
    
    O arquivo config aparece na pasta home do usuário oracle.
  5. Faça backup do arquivo SPF do banco de dados de destino original com o SID_NAME.
    Se você não fizer backup do arquivo SPF do banco de dados de destino original, o RMAN tentará usá-lo para restaurar o backup e falhar.
    mv $ORACLE_HOME/dbs/spfileSID_NAME.ora $ORACLE_HOME/dbs/spfileSID_NAME.ora.bck

Configurar o Armazenamento de Backup no Banco de Dados de Destino

Configure o dispositivo de armazenamento SBT_TAPE de backup no banco de dados de destino.

  1. Execute o comando de destino do RMAN.
    rman target /
  2. Configure o dispositivo de armazenamento SBT_TAPE de backup no banco de dados de destino.
    Use a variável de ambiente ORACLE_HOME para definir a biblioteca SBT.
    RMAN> CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=ORACLE_HOME/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
    

Definir o DBID e Restaurar o Arquivo SPF do Backup

Execute os comandos do RMAN para definir o DBID e a senha de decriptografia para restaurar o arquivo SPF do backup. Ao definir o DBID, você usará o RMAN para substituir o DBID de destino pelo DBID de origem.

  1. Defina o ID do banco de dados (DBID).
    RMAN> run {
    shutdown immediate;
    set dbid DBID number;
    STARTUP FORCE NOMOUNT;
    }
  2. Defina a senha de decriptografia (a senha que foi usada para criptografia) e restaure o arquivo SPF do backup.
    RMAN> SET DECRYPTION IDENTIFIED BY password;
    RMAN> set controlfile autobackup format for device type sbt to '%F';
    RMAN> run {
      allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=ORACLE_HOME/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore spfile from autobackup;
    }
  3. Saia do RMAN.

Criar um Diretório para o Arquivo de Auditoria

Crie um diretório de destino para o arquivo de auditoria.

O local 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 na spfile restaurada.

O spfile é um arquivo binário, exigindo que as strings sejam analisadas corretamente. No entanto, quebras de linha podem estar presentes que impedem um simples grep de fornecer o caminho completo. A opção -s "" em strings remove quebras de linha e o comando sed faz parsing do texto depois de audit_file_dest. Como o comando sed não trata regex não ganancioso, o comando awk é necessário para cortar o fim do arquivo.

  • Crie a pasta com o comando xargs adicionado:
    strings -s "" ${ORACLE_HOME}/dbs/spfile*.ora | sed -E "s|.*audit_file_dest='(.*)'.*|\1|" | awk -F"'" '{print $1}' | xargs mkdir -p 

Restaurar e Recuperar o Banco de Dados

Use o RMAN para restaurar o arquivo de controle do backup e, em seguida, restaurar e recuperar o banco de dados. O RMAN recupera o banco de dados usando redo logs arquivados.

  1. Abra o RMAN e restaure o arquivo de controle do backup. Use o número do DBID e a senha de depreciação definida anteriormente.
    Rman target /
    RMAN> set dbid DBID number;
    RMAN> STARTUP FORCE NOMOUNT;
    RMAN> SET DECRYPTION IDENTIFIED BY password;
    RMAN> set controlfile autobackup format for device type sbt to '%F';
    RMAN> run {
    allocate channel c1 device type sbt PARMS 'SBT_LIBRARY=ORACLE_HOME/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
      restore controlfile from autobackup;
      alter database mount;
    }
  2. Restaurar e recuperar o banco de dados usando o RMAN.
    RMAN> run {
    CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=ORACLE_HOME/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/home/oracle/config)';
    RESTORE DATABASE;
    RECOVER DATABASE;
    }
    Quando o RMAN tiver aplicado o último redo log arquivado no backup e não conseguir localizar mais logs, uma mensagem semelhante à seguinte será exibida: unable to find archived log
  3. Abra o banco de dados com resetlogs.
    RMAN> ALTER DATABASE OPEN RESETLOGS;
  4. Pronta o banco de dados de destino para receber conexões.
  5. Reinstale o Listener TNS editando a configuração do listener para criar um listener estático.
    nano $ORACLE_HOME/network/admin/listener.ora
  6. Adicione a seção a seguir ao Listener TNS para definir ORACLE_HOME e o nome do CDB do banco de dados de origem.

    Substitua ORACLE_HOME pelo valor do caminho de ORACLE_HOME e SID_NAME pelo Nome do Serviço (nome do CDB) do banco de dados de origem.

    SID_LIST_LISTENER=
      (SID_LIST=
        (SID_DESC=
          (ORACLE_HOME=ORACLE_HOME)
          (SID_NAME=SID_NAME))
      )
    
  7. Edite o arquivo tnsname.
    nano $ORACLE_HOME/network/admin/tnsnames.ora
  8. Edite o SERVICE_NAME para corresponder ao nome SID do banco de dados de origem (sem o nome do domínio).
    (SERVICE_NAME = SID_NAME)
  9. Reinicie o listener.
    $ORACLE_HOME/bin/lsnrctl stop
    $ORACLE_HOME/bin/lsnrctl start
    $ORACLE_HOME/bin/lsnrctl status
    
O banco de dados deve estar acessível.