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:

  • Database di origine: backup del database in Object Storage Classic.
  • Database di destinazione: il nuovo database in un sistema DB in Oracle Cloud Infrastructure.

Prerequisiti

Avrai bisogno di:

  • Nome del servizio, nome di identità, contenitore, nome utente e password per Oracle Cloud Infrastructure Object Storage Classic.
  • Password di backup se è stata utilizzata la cifratura basata su password durante il backup in Object Storage Classic.
  • ID del database di origine, nome del database, nome univoco del database (obbligatorio per l'impostazione dello storage).
  • Se il database di origine è configurato con Transparent Data Encryption (TDE), sarà necessario un backup del wallet e della password del wallet.
  • Tnsnames da impostare per qualsiasi database link.
  • L'output di Opatch lsinventory per il database di origine Oracle_home, come riferimento.
  • Copia della directory sqlpatch dalla home del database di origine. Questa operazione è necessaria per il rollback nel caso in cui il database di destinazione non includa queste patch.

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. 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 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 di Dbstorage per visualizzare l'ID di storage. Per il passo successivo sarà necessario l'ID.
    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 di memorizzazione 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. In seguito sarà necessario impostarli per impostare i parametri db_create_file_dest, db_create_online_log_dest e db_recovery_file_dest per il database.

Scegliere un 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. ORACLE_HOME non deve essere già associato a un database.

Per ottenere una lista di ORACLE_HOMEs esistenti e assicurarsi che ORACLE_HOME sia vuoto, utilizzare rispettivamente i comandi Dbhome e Comandi database. Per creare un nuovo ORACLE_HOME, utilizzare i comandi Dbhome.

Copiare i wallet del database di origine

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

  1. Nel sistema DB, diventa l'utente oracle:
    sudo su - oracle
  2. Creare la seguente directory, 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, accertarsi 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 recupero.

    Per un database della 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 in 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 della versione 11.2, utilizzare il comando orapki:

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

Installazione del modulo di backup Oracle Database

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 del modulo di backup Oracle Database Cloud per OCI Classic in Uso di Oracle Database Backup Cloud Service.

Imposta variabili di ambiente

Impostare le seguenti variabili di ambiente 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 sulla posizione del file libopc.so e del parametro OPC_FILE sulla 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 quando viene installato il modulo di backup di Oracle Database Cloud 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 Come fornire la password necessaria per decifrare i backup cifrati.

Ripristina Spfile

Il seguente script della shell di esempio 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

Impostare 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 relativa all'impostazione dello storage nel 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 Oracle Managed Files (OMF) 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

Ripristinare il control file

Modificare il seguente script della shell di esempio 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 quando è stato installato il 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

Ripristina il database

  1. Visualizzare l'anteprima e convalidare il backup. Il database è ora installato e RMAN deve essere in grado di individuare il backup dal control file ripristinato. Questo passo garantisce la presenza della lista dei log di archivio e il ripristino dei componenti di backup.

    Negli esempi seguenti, modificare SBT_LIBRARY e OPC_PFILE in base alle esigenze per l'ambiente in uso.

    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 del 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 disponibile del log di archivio 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;

Reimposta i 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 la 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 scrittura in lettura. Il comando dbcli register-database tenterà di eseguire datapatch, che richiede la modalità di scrittura in lettura. Se sono presenti PDB, devono essere anche in modalità di lettura/scrittura per garantire l'esecuzione di patch dati su di essi.

  5. Dalla home oracle sul 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 e la finestra di recupero del backup 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. In questo modo, il comando dbcli register-database potrà eseguire il rollback di eventuali patch in conflitto.

    Nota

    Se si sta eseguendo la migrazione di un database versione 11.2, sono necessari ulteriori passi dopo la registrazione del database. Per ulteriori informazioni, vedere Rollback delle patch in un database della versione 11.2.

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 duplicato, quindi aggiungere eventuali stringhe di connessione pertinenti al file del database duplicato in $ORACLE_HOME/network/admin/tnsnames.ora.

Rollback delle patch in un database versione 11.2

Per i database della versione 11.2, l'applicazione sqlpatch non è automatica, pertanto tutte le patch provvisorie (precedentemente note come patch singole) applicate al database di origine che non fanno parte della PSU installata devono essere sottoposte a rollback manualmente 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 sovrapposizione sopra la patch PSU), come descritto di seguito.

Suggerimento

Alcune patch provvisorie possono includere file scritti nella directory $ORACLE_HOME/rdbms/admin e nella directory $ORACLE_HOME/sqlpatch. Oracle consiglia di eseguire il rollback di queste patch nel database di origine utilizzando le istruzioni riportate nella funzione di lettura delle patch prima di eseguire la migrazione del database nell'ambiente OCI. Se si desidera assistenza per il 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 versione 11.2. Nell'output del comando di esempio riportato di seguito, 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. Individuare l'eventuale patch di sovrapposizione utilizzando il comando lsinventory. Nell'esempio seguente, la patch numero 24460960 è la patch di sovrapposizione sopra la patch 23054359 PSU.
    $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 di sovrapposizione 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 eventuali personalizzazioni successive al ripristino.

  1. Assicurarsi che i file del database siano stati ripristinati in formato OMF.
  2. Assicurarsi che il database sia elencato nell'output dei comandi del database.
  3. Verificare i seguenti riferimenti esterni nel database e aggiornarli, se necessario:
    • Tabelle esterne: se il database di origine utilizza tabelle esterne, eseguire il backup di tali 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 richieste 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 al momento della registrazione del database, eseguire un backup di test utilizzando i comandi di backup.
  5. Se il database ripristinato contiene un CDB e un PDB, verificare che le patch siano state applicate a tutti i PDB.