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:
- Un nuovo sistema DB in cui ripristinare il database (vedere le ipotesi riportate di seguito). Per ulteriori informazioni, vedere Panoramica della creazione di un sistema DB.
- Il modulo di backup di Oracle Database Cloud deve essere installato nel sistema DB. Per ulteriori informazioni, vedere Installazione del modulo di backup sul sistema DB in Backup di un database nello storage degli oggetti mediante RMAN.
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
- SSH al sistema DB.
ssh -i <private_key_path> opc@<db_system_ip_address>
- 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 -
- È 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.
Output:dbcli list-dbhomes
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.
-
- 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
- SSH al sistema DB, eseguire il login come opc, quindi diventare l'utente oracle.
sudo su - oracle
- 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
- Impostare le variabili di ambiente
ORACLE_HOME
eORACLE_SID
utilizzando la utility oraenv.. oraenv
- 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
, doveDDDDDDDDDDDD
è il DBID,YYYYMMDD
è la data di creazione del backup eNN
è 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" }
- Eseguire RMAN e connettersi al database di destinazione. Non è necessario creare un file
pfile
ospfile
o utilizzare un filecontrolfile
di backup. Questi verranno ripristinati nei passaggi seguenti. Il database di destinazione è(not started)
. Questo è normale e previsto a questo punto.
Output:rman target /
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)
- Impostare il DBID utilizzando il valore ottenuto in precedenza.
set dbid 1508405000;
- 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
- 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; }
- 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 stringaaudit_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
- 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 inspfile
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
- Riavviare l'istanza con il file dei parametri del server ripristinato.
STARTUP FORCE NOMOUNT;
- 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; }
- Ripristina e recupera il database.
RESTORE DATABASE; RECOVER DATABASE;
- 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
- 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.