Recupera un database dallo storage degli oggetti mediante backup RMAN

In questo articolo viene descritto come recuperare un backup di Recovery Manager (RMAN) memorizzato nello storage degli oggetti.

Prerequisiti

Avrai bisogno di quanto segue:

Supposizioni

Le procedure riportate di seguito presuppongono quanto segue:

Impostare lo storage sul sistema DB

  1. SSH sul sistema DB.

    ssh -i <private_key_path> opc@<db_system_ip_address>
  2. Eseguire il login come opc, quindi eseguire sudo per l'utente root. Usare sudo su - con un trattino per richiamare il profilo dell'utente root, che imposterà il valore PATH nella directory dbcli (/opt/oracle/dcs/bin).

    login as: opc
    sudo su -
  3. È possibile utilizzare una home database vuota esistente o crearne una nuova per il ripristino. Utilizzare i comandi applicabili per completare questo passaggio.

    Se si utilizzerà una home del 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 Dbstorage per impostare le directory per la memorizzazione DATA, RECO e REDO. Nell'esempio seguente vengono creati 10 GB di storage ACFS per il database di rettest.

    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 contenente 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 DBID sarà diverso.

    Usare la sintassi curl seguente per eseguire una query generale dello storage degli oggetti. I parametri in rosso corrispondono ai 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 sintassi seguente:

    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. Esegui RMAN e connettiti al database di destinazione. Non è necessario creare un pfile o spfile o utilizzare un backup controlfile. Questi verranno ripristinati nei passaggi seguenti. Si noti che 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 sopra.

    set dbid 1508405000;
  7. Eseguire il comando riportato di seguito. 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 durante l'installazione del modulo di backup, ad esempio /home/oracle/lib/.

    OPC_PFILE è lo stesso file specificato con il parametro -configfile durante l'installazione del 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. È possibile vedere l'impostazione utilizzata dal database originale cercando nello spfile 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 il tracciamento delle modifiche ai blocchi è stato abilitato nel database originale, creare la directory per il file di tracciamento delle modifiche ai blocchi. Questa sarà una directory in db_create_file_dest. Cercare nel file 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. Ripristinare e recuperare il database.

    RESTORE DATABASE;
    RECOVER DATABASE;
  14. RMAN recupererà utilizzando i redo log archiviati fino a quando non sarà più possibile trovarli. È 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 l'opzione resetlogs.

    ALTER DATABASE OPEN RESETLOGS;

Il recupero è completo. Il database avrà tutte le transazioni di cui è stato eseguito il commit a partire dall'ultimo redo log archiviato di cui è stato eseguito il backup.