Recupera un database dall'area di memorizzazione degli oggetti OCI Classic

Questo articolo spiega come recuperare un database utilizzando un backup creato da Oracle Database Backup Module e memorizzato in Oracle Cloud Infrastructure Object Storage Classic.

In questo argomento vengono utilizzati i seguenti termini:

Prerequisiti

Avrai bisogno di 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. 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 tdetest.

    dbcli create-dbstorage --dbname tdetest --dataSize 10 --dbstorage ACFS

    Nota: quando si esegue la migrazione di un database versione 11.2, è necessario specificare lo storage ACFS.

  4. Utilizzare i comandi Dbstorage per elencare l'ID storage. Avrai bisogno dell'ID per il prossimo passo.

    dbcli list-dbstorages

    Output:

    ID                                       Type   DBUnique Name        Status
    ---------------------------------------- ------ -------------------- ----------
    9dcdfb8e-e589-4d5f-861a-e5ba981616ed     Acfs   tdetest              Configured
  5. Utilizzare i comandi Dbstorage con l'ID storage del passo precedente per elencare le posizioni DATA, RECO e REDO.

    dbcli describe-dbstorage --id 9dcdfb8e-e589-4d5f-861a-e5ba981616ed

    Output:

    DBStorage details
    ----------------------------------------------------------------
                         ID: 9dcdfb8e-e589-4d5f-861a-e5ba981616ed
                    DB Name: tdetest
              DBUnique Name: tdetest
             DB Resource ID:
               Storage Type: Acfs
              DATA Location: /u02/app/oracle/oradata/tdetest
              RECO Location: /u03/app/oracle/fast_recovery_area/
              REDO Location: /u03/app/oracle/redo/
                      State: ResourceState(status=Configured)
                    Created: August 24, 2016 5:25:38 PM UTC
                UpdatedTime: August 24, 2016 5:25:53 PM UTC
  6. Prendere nota delle posizioni DATA, RECO e REDO. Saranno necessari in un secondo momento per impostare i parametri db_create_file_dest, db_create_online_log_dest e db_recovery_file_dest per il database.

Scegliere una ORACLE_HOME

Decidere quale ORACLE_HOME utilizzare per il ripristino del database, quindi passare alla home con le impostazioni ORACLE_BASE, ORACLE_HOME e PATH corrette. La ORACLE_HOME non deve essere già associata a un database.

Per ottenere una lista di ORACLE_HOME esistenti e assicurarsi che ORACLE_HOME sia vuota, utilizzare rispettivamente i comandi Dbhome e i comandi del database. Per creare una nuova ORACLE_HOME, utilizzare i comandi Dbhome.

Copia i wallet del database di origine

Saltare questa sezione se il database di origine non è configurato con TDE.

  1. Nel sistema DB diventare l'utente oracle:

    sudo su - oracle
  2. Creare la directory seguente, se non esiste già:

    mkdir /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name>
  3. Copiare il file ewallet.p12 dal database di origine nella directory creata nel passo precedente.
  4. Nell'host di destinazione, assicurarsi che $ORACLE_HOME/network/admin/sqlnet.ora contenga la riga seguente:

    ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME)))

    Aggiungere la riga se non esiste nel file. La riga potrebbe non essere presente se si tratta di una nuova home e non è stato ancora creato alcun database su questo host.

  5. Creare il wallet di login automatico dal wallet basato su password per consentire l'apertura automatica del wallet durante le operazioni di ripristino e ripristino.

    Per un database versione 12.1 o successiva, utilizzare il comando ADMINISTER KEY MANAGEMENT:

    $cat create_autologin_12.sh
    
    #!/bin/sh
    if [ $# -lt 2 ]; then
            echo "Usage: $0 <dbuniquename><remotewalletlocation>"
            exit 1;
    fi
    
    mkdir /opt/oracle/dcs/commonstore/wallets/tde/$1
    cp $2/ewallet.p12* /opt/oracle/dcs/commonstore/wallets/tde/$1
    rm -f autokey.ora
    echo "db_name=$1"  > autokey.ora
    autokeystoreLog="autologinKeystore_`date +%Y%m%d_%H%M%S_%N`.log"
    echo "Enter Keystore Password:"
    read -s keystorePassword
    echo "Creating AutoLoginKeystore -> "
    sqlplus "/as sysdba"  <<EOF
    spool $autokeystoreLog
    set echo on
    startup nomount pfile=autokey.ora
    ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE
    FROM KEYSTORE '/opt/oracle/dcs/commonstore/wallets/tde/$1' -- Keystore location
    IDENTIFIED BY "$keystorePassword";
    shutdown immediate;
    EOF

    Modificare le autorizzazioni cwallet.sso da oracle:asmadmin a oracle:oinstall.

    ls -ltr /opt/oracle/dcs/commonstore/wallets/tde/<db_unique_name>

    Output:

    total 20
    -rw-r--r-- 1 oracle oinstall 5680 Jul  6 11:39 ewallet.p12
    -rw-r--r-- 1 oracle asmadmin 5725 Jul  6 11:39 cwallet.sso

    Per un database versione 11.2, utilizzare il comando orapki:

    orapki wallet create -wallet wallet_location -auto_login [-pwd password]

Installare il modulo Oracle Database Backup

Il file JAR del modulo di backup è incluso nel sistema DB, ma è necessario installarlo.

  1. SSH al sistema DB, eseguire il login come opc, quindi diventare l'utente oracle.

    ssh -i <path to SSH key used when launching the DB System> opc@<DB System IP address or hostname>
    sudo su - oracle
  2. Spostarsi nella directory che contiene il file opc_install.jar del modulo di backup.

    cd /opt/oracle/oak/pkgrepos/orapkgs/oss/<version>/
  3. Per installare il modulo di backup, vedere la sintassi dei comandi descritta in Installazione di Oracle Database Cloud Backup Module per OCI Classic in Uso di Oracle Database Backup Cloud Service.

Imposta variabili d'ambiente

Impostare le variabili di ambiente riportate di seguito per le sessioni RMAN e SQL*Plus per il database.

ORACLE_HOME=<path of Oracle Home where the database is to be restored>
ORACLE_SID=<database instance name>
ORACLE_UNQNAME=<db_unique_name in lower case>
NLS_DATE_FORMAT="mm/dd/yyyy hh24:mi:ss"

Allocazione di un canale SBT RMAN

Per ogni operazione di ripristino, allocare un canale SBT e impostare il parametro SBT_LIBRARY nella posizione del file libopc.so e del parametro OPC_FILE nella posizione del file opc_sbt.ora, ad esempio:

ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/<ORACLE_HOME>/dbs/opc_sbt.ora)';

Per ulteriori informazioni su questi file, vedere File creati durante l'installazione di Oracle Database Cloud Backup Module per OCI Classic in Uso di Oracle Database Backup Cloud Service.

Assicurarsi che la decifrazione sia attivata

Assicurarsi che la decifrazione sia attivata per tutte le sessioni di ripristino RMAN.

set decryption wallet open identified by <keystore password>;

Per ulteriori informazioni, vedere Providing the Password Required to Decrypt Encrypted Backups.

Ripristina Spfile

Lo script shell di esempio riportato di seguito ripristina lo spfile. Impostare la variabile $dbID sul dbid del database da ripristinare. Per impostazione predefinita, spfile viene ripristinato in $ORACLE_HOME/dbs/spfile<sid>.ora.

rman target / <<EOF

spool log to "`date +%Y%m%d_%H%M%S_%N`_dbid_${dbID}_restore_spfile.log"
startup nomount
set echo on
run {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
SET DBID=$dbID;
RESTORE SPFILE FROM AUTOBACKUP;
shutdown immediate;
EOF

Imposta i parametri del database

  1. Avvia il database in modalità NOMOUNT.

    startup nomount
  2. Aggiornare spfile e modificare i seguenti parametri.

    • Se il tipo di storage del database è ACFS, utilizzare le posizioni DATA, RECO e REDO ottenute dall'output del comando dbcli describe-dbstorage, come descritto nella sezione Imposta storage sul sistema DB:

      alter system set db_create_file_dest='/u02/app/oracle/oradata/' scope = spfile;
      alter system set db_create_online_log_dest_1='/u03/app/oracle/redo' scope = spfile;
      alter system set db_recovery_file_dest='/u03/app/oracle/fast_recovery_area' scope = spfile;
    • Se il tipo di memorizzazione del database è ASM:

      alter system set db_create_file_dest='+DATA' scope = spfile;
      alter system set db_create_online_log_dest_1='+RECO' scope = spfile;
      alter system set db_recovery_file_dest='+RECO' scope = spfile;
    • Il set db_recovery_file_dest_size non è impostato o è impostato in modo errato:

      alter system set db_recovery_file_dest_size=<sizeG> scope=spfile;
    • Impostare audit_file_dest sul valore corretto:

      alter system set audit_file_dest=/u01/app/oracle/admin/<db_unique_name in lower case>/adump
  3. Rimuovere il parametro control_files. I parametri OMM (Oracle Managed Files) verranno utilizzati per creare il control file.

    alter system reset control_files scope=spfile;
  4. Riavviare il database in modalità nomount utilizzando i nuovi parametri aggiunti.

    shutdown immediate
    startup nomount

Ripristina il control file

Modificare lo script della shell di esempio seguente per l'ambiente in uso per ripristinare il control file. Impostare la variabile $dbID sul dbid del database da ripristinare. Impostare SBT_LIBRARY sulla posizione specificata nel parametro -libDir durante l'installazione del modulo di backup. Impostare OPC-PFILE sulla posizione specificata nel parametro -configFile, che per impostazione predefinita è ORACLE_HOME/dbs/opcSID.ora.

rman target / <<EOF

spool log to "`date +%Y%m%d_%H%M%S_%N`_dbid_${dbID}_restore_controlfile.log"
set echo on
run {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/<Backup Module libDir>/libopc.so ENV=(OPC_PFILE=/<Backup Module configFile>/opcSID.ora)';
SET DBID=$dbID;
RESTORE CONTROLFILE FROM AUTOBACKUP;
alter database mount;
}

exit;
EOF

Ripristino del database

  1. Visualizzare in anteprima e convalidare il backup. Il database è ora attivato e RMAN dovrebbe essere in grado di individuare il backup dal control file ripristinato. Questo passo consente di assicurarsi che l'elenco dei log di archivio sia presente e che i componenti di backup possano essere ripristinati.

    Negli esempi riportati di seguito, modificare SBT_LIBRARY e OPC_PFILE in base alle esigenze dell'ambiente.

    rman target / <<EOF
    
    spool log to "`date +%Y%m%d_%H%M%S_%N`_restore_database_preview.log"
    set echo on
    run {
        ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        ALLOCATE CHANNEL c2 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        ALLOCATE CHANNEL c3 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        restore database validate header preview;
    }

    Esaminare l'output e se sono presenti messaggi di errore, analizzare la causa del problema.

  2. Reindirizzare il ripristino utilizzando set newname per ripristinare i file di dati in formato OMF e utilizzare switch datafile all per consentire l'aggiornamento del control file con le nuove copie dei file di dati.

    rman target / <<EOF
    
    spool log to "`date +%Y%m%d_%H%M%S_%N`_restore_database_preview.log"
    set echo on
    run {
        ALLOCATE CHANNEL c1 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        ALLOCATE CHANNEL c2 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        ALLOCATE CHANNEL c3 DEVICE TYPE sbt MAXPIECESIZE 2 G FORMAT '%d_%I_%U' PARMS 'SBT_LIBRARY=/tmp/oss/libopc.so ENV=(OPC_PFILE=/tmp/oss/opc_sbt.ora)';
        set newname for database to new;
        restore database;
        switch datafile all;
        switch tempfile all;
        recover database;
    }

    Questo recupero tenterà di utilizzare l'ultimo backup del log di archivio disponibile e quindi non riuscirà con un errore, ad esempio:

    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of recover command at 07/20/2016 12:09:02
    RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 22 and starting SCN of 878327
  3. Per completare il recupero incompleto, eseguire un recupero utilizzando il numero di sequenza e il numero di thread visualizzati nel messaggio RMAN-06054, ad esempio:

    recover database until sequence 22 thread 1;

Reimpostazione dei log

Reimpostare i log.

alter database open resetlogs;

Preparati a registrare il database

Prima di registrare il database:

  1. Assicurarsi che il valore del parametro COMPATIBLE del database sia accettabile. Se il valore è inferiore al minimo, il database non può essere registrato finché non si aggiorna la compatibilità del database.
  2. Verificare che il database sia stato registrato con il listener e il nome del servizio.

    lsnrctl services
  3. Assicurarsi che il password file sia stato ripristinato o creato per il nuovo database.

    ls -ltr $ORACLE_HOME/dbs/orapw<oracle sid>

    Se il file non esiste, crearlo utilizzando l'utility orapwd.

    orapwd file=<$ORACLE_HOME/dbs/orapw<$ORACLE_SID>> password=<sys password>
  4. Assicurarsi che il database ripristinato sia aperto in modalità lettura/scrittura.

    select open_mode from v$database;

    L'output del comando deve indicare la modalità di lettura scrittura. Il comando dbcli register-database tenterà di eseguire datapatch, che richiede la modalità di lettura e scrittura. Se sono presenti PDB, devono essere anche in modalità di lettura/scrittura per garantire che DataPatch venga eseguito su di essi.

  5. Dalla home oracle nel database ripristinato, utilizzare il comando seguente per verificare la connessione a SYS:

    conn sys/<password>@//<hostname>:1521/<database service name>

    Questa connessione è necessaria per registrare il database in un secondo momento. Risolvere eventuali problemi di connessione prima di continuare.

  6. Assicurarsi che il database sia in esecuzione su spfile utilizzando il comando SQL*Plus.

    SHOW PARAMETERS SPFILE
  7. (Facoltativo) Se si desidera gestire il backup del database con l'interfaccia della riga di comando dbcli, è possibile associare una configurazione di backup nuova o esistente al database migrato al momento della registrazione o dopo la registrazione. Una configurazione di backup definisce la destinazione del backup e la finestra di recupero per il database. Utilizzare i comandi Backupconfig per creare, elencare e visualizzare le configurazioni di backup.
  8. Copiare la cartella $ORACLE_HOME/sqlpatch dal database di origine al database di destinazione. Ciò consentirà al comando dbcli register-database di eseguire il rollback di eventuali patch in conflitto.

Nota: se si esegue la migrazione di un database della versione 11.2, dopo la registrazione del database sono necessari passi aggiuntivi. Per ulteriori informazioni, vedere Rollback Patches on a Version 11.2 Database.

Registrare il database nel sistema DB

I comandi del database registrano il database ripristinato in dcs-agent in modo che possa essere gestito dallo stack dcs-agent.

Nota: il comando dbcli register-database non è disponibile nei sistemi DB RAC a 2 nodi.

Come utente root, utilizzare il comando dbcli register-database per registrare il database nel sistema DB, ad esempio:

dbcli register-database --dbclass OLTP --dbshape odb1 --servicename tdetest --syspassword

Output:

Password for SYS:
{
  "jobId" : "317b430f-ad5f-42ae-bb07-13f053d266e2",
  "status" : "Created",
  "message" : null,
  "reports" : [ ],
  "createTimestamp" : "August 08, 2016 05:55:49 AM EDT",
  "description" : "Database service registration with db service name: tdetest",
  "updatedTime" : "August 08, 2016 05:55:49 AM EDT"
}

Aggiorna tnsnames.ora

Controllare tnsnames.ora nella posizione di backup, controllare i database link utilizzati nel database clonato, quindi aggiungere eventuali stringhe di connessione pertinenti al file di database clonato in $ORACLE_HOME/network/admin/tnsnames.ora.

Rollback delle patch su un database della versione 11.2

Per i database della versione 11.2, l'applicazione sqlpatch non è automatizzata, pertanto è necessario eseguire il rollback manuale delle patch provvisorie (precedentemente note come patch "una tantum") applicate al database di origine che non fanno parte del PSU installato nel database di destinazione. Dopo aver registrato il database, eseguire lo script catbundle.sql e quindi lo script postinstall.sql con la patch PSU corrispondente (o la patch di overlay sopra la patch PSU), come descritto di seguito.

Suggerimento: alcune patch provvisorie possono includere i file scritti nella directory $ORACLE_HOME/rdbms/admin nonché la directory $ORACLE_HOME/sqlpatch. Oracle consiglia di eseguire il rollback di queste patch nel database di origine utilizzando le istruzioni riportate nel file read-me della patch prima di eseguire la migrazione del database nell'ambiente OCI. Per assistenza sul rollback di queste patch, contattare il Supporto Oracle.

  1. Nel sistema DB utilizzare il comando dbcli list-dbhomes per trovare il numero di patch PSU per la home del database della versione 11.2. Nell'output del comando di esempio seguente, il numero di patch PSU è il secondo numero nella colonna Versione DB:

    dbcli  list-dbhomes

    Output:

    ID                                   Name               DB Version                             Home Location                             Status
    ------------------------------------ -----------------  -------------------------------------  ----------------------------------------- ----------
    59d9bc6f-3880-4d4f-b5a6-c140f16f8c64 OraDB11204_home1   11.2.0.4.160719 (23054319, 23054359)   /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured

    Il primo numero di patch, 23054319 nell'esempio precedente, si riferisce al componente OCW nella home del database.

  2. Per trovare l'eventuale patch di overlay, usare il comando lsinventory. Nell'esempio seguente, la patch numero 24460960 è la patch di overlay sulla parte superiore della patch PSU 23054359.

    $ORACLE_HOME/OPatch/opatch lsinventory

    Output:

    ...
    Installed Top-level Products (1):
    
    Oracle Database 11g                                                  11.2.0.4.0
    There are 1 products installed in this Oracle Home.
    
    Interim patches (5) :
    
    Patch  24460960     : applied on Fri Sep 02 15:28:17 UTC 2016
    Unique Patch ID:  20539912
       Created on 31 Aug 2016, 02:46:31 hrs PST8PDT
       Bugs fixed:
         23513711, 23065323, 21281607, 24006821, 23315889, 22551446, 21174504
       This patch overlays patches:
         23054359
       This patch needs patches:
         23054359
       as prerequisites
  3. Avviare SQL*Plus ed eseguire lo script catbundle.sql, ad esempio:

    startup
    connect / as sysdba
    @$ORACLE_HOME/rdbms/admin/catbundle.sql psu apply
    exit
  4. Applicare sqlpatch, utilizzando il numero di patch overlay del passo precedente, ad esempio:

    connect / as sysdba
    @$ORACLE_HOME/sqlpatch/24460960/postinstall.sql
    exit

Nota: se nel database di origine sono installate patch singole e tali patch non fanno parte della PSU installata nell'ambiente cloud, è necessario eseguire il rollback delle modifiche SQL corrispondenti a tali patch singole. Per eseguire il rollback delle modifiche SQL, copiare lo script $ORACLE_HOME/sqlpatch/<patch#>/postdeinstall.sql dall'ambiente di origine all'ambiente cloud ed eseguire lo script postdeinstall.sql.

Elenco di controllo dopo il ripristino

Dopo aver ripristinato e registrato il database nel sistema DB, utilizzare la seguente lista di controllo per verificare i risultati ed eseguire le personalizzazioni successive al ripristino.

  1. Assicurarsi che i file di database siano stati ripristinati in formato OMF.
  2. Assicurarsi che il database sia elencato nell'output dei comandi del database.
  3. Controllare i seguenti riferimenti esterni nel database e aggiornarli se necessario:

    • Tabelle esterne: se il database di origine utilizza tabelle esterne, eseguire il backup dei dati ed eseguirne la migrazione nell'host di destinazione.
    • Directory: personalizzare le directory predefinite in base alle esigenze per il database ripristinato.
    • Database link: assicurarsi che tutte le voci TNS necessarie siano aggiornate nel file tnsnames.ora in ORACLE_HOME.
    • E-mail e URL: assicurarsi che gli indirizzi e-mail e gli URL utilizzati nel database siano ancora accessibili dal sistema DB.
    • Job pianificati: rivedere i job pianificati nel database di origine e pianificare job simili in base alle esigenze nel database ripristinato.
  4. Se è stata associata una configurazione di backup durante la registrazione del database, eseguire un backup utilizzando i comandi di backup.
  5. Se il database ripristinato contiene un CDB e PDB, verificare che le patch siano state applicate a tutti i PDB.