Recuperare un database dallo storage degli oggetti mediante il backup RMAN

Questo articolo spiega come recuperare un backup di Recovery Manager (RMAN) memorizzato nello storage degli oggetti.

Prerequisiti

Avrai bisogno di:

Supposizioni

Le procedure seguenti presuppongono quanto segue:

  • È stato creato un nuovo sistema DB per ospitare il database ripristinato e non esistono altri database nel nuovo sistema DB. È possibile eseguire il ripristino in un sistema DB con database esistenti, ma che non rientra nell'ambito di questo argomento.
  • Il database originale viene perso e tutto ciò che rimane è l'ultimo backup RMAN. La procedura presuppone che il sistema DB (incluso il database) non esista più.

    Nota

    Tutti i dati non inclusi nel backup più recente andranno persi.
  • Sono disponibili le chiavi di cifratura e/o Oracle Wallet utilizzate dal database originale al momento dell'ultimo backup.
  • Il backup RMAN contiene una copia del control file e dello spfile a partire dal backup più recente, nonché tutti i backup dei file di dati e del log di archivio necessari per eseguire un recupero completo del database.
  • Durante il ripristino non verrà utilizzato un catalogo RMAN.

Impostare lo storage sul sistema DB

  1. SSH al sistema DB.
    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. Eseguire il login come opc, quindi sudo per l'utente root. Usare sudo su - con un trattino per richiamare il profilo dell'utente root, che imposterà il PATH sulla directory dbcli (/opt/oracle/dcs/bin).
    login as: opc
    sudo su -
  3. È possibile utilizzare una home del database vuota esistente o crearne una nuova per il ripristino. Utilizzare i comandi applicabili per completare questo passo.

    Se si utilizza una home di database esistente:

    • Utilizzare i comandi Dbhome per elencare le home del database.

      dbcli list-dbhomes
      Output:
      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
    • Utilizzare i comandi del database per assicurarsi che la home del database non sia associata ad alcun database.

    Se necessario, utilizzare i comandi Dbhome per creare una home del database per il ripristino.

  4. Utilizzare i comandi di Dbstorage per impostare le directory per la memorizzazione DATA, RECO e REDO. L'esempio seguente crea 10 GB di storage ACFS per il database più retto.
    dbcli create-dbstorage --dbname rectest --dataSize 10 --dbstorage ACFS 

    Nota

    Quando si ripristina un database versione 11.2, è necessario specificare lo storage ACFS.

Eseguire il ripristino e il recupero del database

  1. SSH al sistema DB, eseguire il login come opc, quindi diventare l'utente oracle.
    sudo su - oracle
  2. Creare una voce in /etc/oratab per il database. Utilizzare lo stesso SID del database originale.
    db1:/u01/app/oracle/product/12.1.0.2/dbhome_1:N
  3. Impostare le variabili di ambiente ORACLE_HOME e ORACLE_SID utilizzando la utility oraenv.
    . oraenv
  4. Ottenere il DBID del database originale. Ciò può essere ottenuto dal nome file del backup automatico controlfile sul supporto di backup. Il nome del file includerà una stringa che contiene il DBID. Il formato tipico della stringa è c-DDDDDDDDDDDD-YYYYMMDD-NN, dove DDDDDDDDDDDD è il DBID, YYYYMMDD è la data di creazione del backup e NN è un numero di sequenza per rendere univoco il nome del file. Il DBID negli esempi seguenti è 1508405000. Il tuo DBID sarà diverso.

    Usare la seguente sintassi curl per eseguire una query generale dello storage degli oggetti. I parametri in rosso sono gli stessi parametri specificati durante l'installazione del modulo di backup come descritto in Installazione del modulo di backup sul sistema DB in Backup di un database nello storage degli oggetti mediante RMAN.

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

    Per cercare il nome dell'area, vedere Aree e domini di disponibilità.

    Ad esempio:

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

    Per ottenere il DBID dal nome del control file, utilizzare la seguente sintassi:

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

    Ad esempio:

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

    Nell'output di esempio riportato di seguito, 1508405000 è il 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. Eseguire RMAN e connettersi al database di destinazione. Non è necessario creare un file pfile o spfile o utilizzare un file controlfile di backup. Questi verranno ripristinati nei passaggi seguenti. Il database di destinazione è (not started). Questo è normale e previsto a questo punto.
    rman target /
    Output:
    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. Impostare il DBID utilizzando il valore ottenuto in precedenza.
    set dbid 1508405000;
  7. eseguire il comando seguente. Se il file dei parametri del server non è disponibile, RMAN tenta di avviare l'istanza con un file dei parametri del server fittizio. Gli errori ORA-01078 e LRM-00109 sono normali e possono essere ignorati.
    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. Ripristinare il file dei parametri del server dal backup automatico.

    SBT_LIBRARY è la stessa libreria specificata con il parametro -libDir quando è stato installato il modulo di backup, ad esempio /home/oracle/lib/.

    Il file OPC_PFILE è lo stesso specificato con il parametro -configfile quando è stato installato il modulo di backup, ad esempio /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. Creare la directory per audit_file_dest. L'impostazione predefinita è /u01/app/oracle/admin/$ORACLE_SID/adump. Per visualizzare l'impostazione utilizzata dal database originale, eseguire una ricerca nello spfile per la stringa 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. Se la registrazione delle modifiche ai blocchi è stata abilitata nel database originale, creare la directory per il file di registrazione delle modifiche ai blocchi. Questa sarà una directory sotto db_create_file_dest. Cercare in spfile il nome della directory.
    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. Riavviare l'istanza con il file dei parametri del server ripristinato.
    STARTUP FORCE NOMOUNT;
  12. Ripristinare il control file dal backup automatico RMAN ed eseguire il MOUNT del database.
    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. Ripristina e recupera il database.
    RESTORE DATABASE;
    RECOVER DATABASE;
  14. RMAN eseguirà il recupero utilizzando i redo log archiviati fino a quando non riuscirà a trovarne altri. È normale che si verifichi un errore simile a quello riportato di seguito quando RMAN ha applicato l'ultimo redo log archiviato nel backup e non riesce a trovare altri log.
    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. Aprire il database con resetlogs.
    ALTER DATABASE OPEN RESETLOGS;

Il recupero è stato completato. Il database avrà tutte le transazioni di cui è stato eseguito il commit all'ultimo redo log archiviato di cui è stato eseguito il backup.