Recuperación de una base de datos desde Object Storage mediante una copia de seguridad de RMAN

En este artículo se explica cómo recuperar una copia de seguridad de Recovery Manager (RMAN) almacenada en Object Storage.

Requisitos

Necesitará lo siguiente:

Suposiciones

En los siguientes procedimientos se asume lo siguiente:

  • Se ha creado un nuevo sistema de base de datos para alojar la base de datos restaurada y no existe ninguna otra base de datos en el nuevo sistema de base de datos. Es posible realizar la restauración en un sistema de base de datos que tenga bases de datos existentes, pero esto queda fuera del ámbito de este tema.
  • Se ha perdido la base de datos original y todo lo que queda es la copia de seguridad de RMAN más reciente. En el procedimiento se asume que el sistema de base de datos (incluido en la base de datos) ya no existe.

    Note:

    Se perderán todos los datos no incluidos en la copia de seguridad más reciente.
  • Las claves de cifrado y/o de Oracle Wallet utilizadas por la base de datos original en el momento de la última copia de seguridad están disponibles.
  • La copia de seguridad de RMAN contiene una copia del archivo de control y de spfile a partir de la copia de seguridad más reciente, así como de todas las copias de seguridad de archivos de datos y archive logs necesarias para realizar una recuperación completa de la base de datos.
  • No se utilizará un catálogo de RMAN durante la restauración.

Configuración del almacenamiento en el sistema de base de datos

  1. SSH en el sistema de base de datos.
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. Conéctese como opc y, a continuación, utilice sudo para el usuario root. Utilice sudo su - con un guion para llamar al perfil del usuario root, lo cual definirá PATH en el directorio dbcli (/opt/oracle/dcs/bin).
    login as: opc
    sudo su -
  3. Puede utilizar un directorio raíz de base de datos vacío existente o crear uno nuevo para la restauración. Utilice los comandos aplicables para ayudarle a completar este paso.

    Si va a utilizar un directorio raíz de base de datos existente:

    • Utilice los Comandos de dbhome para mostrar los directorios raíz de base de datos.

      dbcli list-dbhomes
      Salida:
      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
    • Utilice los Comandos de base de datos para asegurarse de que el directorio raíz de base de datos no está asociado a ninguna base de datos.

    Si es necesario, utilice los Comandos de dbhome para crear un directorio raíz de base de datos para la restauración.

  4. Use los Comandos de dbstorage para configurar directorios para almacenamiento DATA, RECO y REDO. En el siguiente ejemplo se crean 10 GB de almacenamiento de ACFS para la base de datos rectest.
    dbcli create-dbstorage --dbname rectest --dataSize 10 --dbstorage ACFS 

    Note:

    Al restaurar una base de datos versión 11.2, se debe especificar el almacenamiento ACFS.

Restauración y recuperación de base de datos

  1. Utilice SSH para acceder al sistema de base de datos, conéctese como opc y, a continuación, conviértase en el usuario oracle.
    sudo su - oracle
  2. Cree una entrada en /etc/oratab para la base de datos. Utilice el mismo SID que la base de datos original.
    db1:/u01/app/oracle/product/12.1.0.2/dbhome_1:N
  3. Configure las variables de entorno ORACLE_HOME y ORACLE_SID mediante la utilidad oraenv.
    . oraenv
  4. Obtenga el DBID de la base de datos original. Este se puede obtener del nombre de archivo de la copia de seguridad automática de controlfile en el soporte de copia de seguridad. El nombre del archivo incluirá una cadena que contiene el DBID. El formato típico de la cadena es c-DDDDDDDDDDDD-YYYYMMDD-NN donde DDDDDDDDDDDD es el DBID, YYYYMMDD es la fecha de creación de la copia de seguridad y NN es un número de secuencia para que el nombre de archivo sea único. El DBID de los siguientes ejemplos es 1508405000. Su DBID será diferente.

    Utilice la siguiente sintaxis curl para realizar una consulta general de Object Storage. Los parámetros en rojo son los mismos parámetros que ha especificado al instalar el módulo de copia de seguridad, como se describe en Instalación del módulo de copia de seguridad del sistema de base de datos en Copia de seguridad de una base de datos en Object Storage mediante RMAN.

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

    Para buscar el nombre de la región, consulte Regiones y dominios de disponibilidad.

    Por ejemplo:

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

    Para obtener el DBID del nombre del archivo de control, utilice la siguiente sintaxis:

    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 ejemplo:

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

    En la siguiente salida de ejemplo, 1508405000 es el 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. Ejecute RMAN y conéctese a la base de datos de destino. No es necesario crear un pfile ni un spfile ni utilizar una copia de seguridad de controlfile. Estos se restaurarán en los siguientes pasos. Observe que la base de datos de destino se muestra como (not started). Esto es normal y es lo esperado en este punto.
    rman target /
    Salida:
    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 el DBID mediante el valor obtenido anteriormente.
    set dbid 1508405000;
  7. Ejecute el siguiente comando. Si el archivo de parámetros del servidor no está disponible, RMAN intenta iniciar la instancia con un archivo de parámetros del servidor ficticio. Los errores ORA-01078 y LRM-00109 son normales y se pueden ignorar.
    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 el archivo de parámetros del servidor a partir de la copia de seguridad automática.

    SBT_LIBRARY es la misma biblioteca especificada con el parámetro -libDir cuando se instaló el módulo de copia de seguridad, por ejemplo /home/oracle/lib/.

    OPC_PFILE es el mismo archivo especificado con el parámetro -configfile cuando se instaló el módulo de copia de seguridad, por ejemplo /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. Cree el directorio para audit_file_dest. El valor por defecto es /u01/app/oracle/admin/$ORACLE_SID/adump. Puede ver el valor utilizado por la base de datos original buscando en spfile la cadena audit_file_dest.
    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. Si se ha activado el seguimiento de cambios de bloque en la base de datos original, cree el directorio para el archivo de seguimiento de cambios de bloque. Será un directorio dentro de db_create_file_dest. Busque en spfile el nombre del directorio.
    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 la instancia con el archivo de parámetros del servidor restaurado.
    STARTUP FORCE NOMOUNT;
  12. Restaure el archivo de control a partir de la copia de seguridad automática de RMAN y monte la base de datos.
    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 y recupere la base de datos.
    RESTORE DATABASE;
    RECOVER DATABASE;
  14. RMAN realizará la recuperación utilizando los redo logs archivados hasta que ya no encuentre ninguno más. Es normal que se produzca un error similar al que se incluye a continuación cuando RMAN haya aplicado el último redo log archivado en la copia de seguridad y no encuentre más 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 la base de datos con resetlogs.
    ALTER DATABASE OPEN RESETLOGS;

La recuperación se ha completado. La base de datos tendrá todas las transacciones confirmadas a partir de la última copia de seguridad del redo log archivado.