Nota:
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriversi a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Ripristina PDB multi-tenant eliminato mediante istanza ausiliaria nello stesso server DBCS
Introduzione
In un container database multi-tenant (CDB), i metadati per le tabelle del dizionario dati e le definizioni di vista vengono memorizzati solo nella radice. Tuttavia, ogni pluggable database (PDB) dispone del proprio set di tabelle e viste del dizionario dati per gli oggetti di database contenuti nel PDB.
Pertanto, non è possibile ripristinare come database un pluggable database (PDB). Deve essere ripristinato come oggetto di database utilizzando un'istanza ausiliaria. Se un pluggable database (PDB)/file di dati vengono eliminati, danneggiati e così via accidentalmente, il repository/metadati per il PDB esiste ancora e può essere ripristinato e recuperato
Se un PDB viene eliminato accidentalmente o intenzionalmente utilizzando il comando DROP PLUGGABLE DATABASE <PDBNAME>, verrà eliminato il PDB e i metadati verranno rimossi dal repository. Pertanto, il ripristino del PDB (incluso PITR PDB prima dell'ora di eliminazione) non riuscirà con un errore, ad esempio RMAN-06813: could not translate pluggable database PDBxx.


Obiettivi
Ripristinare e recuperare un PDB eliminato, inclusi i file di dati. Poiché non è possibile ripristinarla nello stesso CDB, verrà creata un'istanza ausiliaria e verrà ripristinato il PDB nel CDB ausiliario nella stessa istanza e anche nell'origine.
Prerequisiti
-
Completare la configurazione del database Oracle Database Cloud Service (DBCS).
-
Esegui un backup completo del CDB
Task 1: creare un nuovo pluggable database
-
Eseguire i comandi seguenti per la creazione del pluggable database.
SQL> create pluggable database <PDBNAME3> admin user <USERNAME> identified by <PASSWORD>; COLUMN PDB_NAME FORMAT A15 SQL> SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID; PDB_ID PDB_NAME STATUS ---------- --------------- --------- 2 <PDBNAME$SEED> NORMAL 3 <PDBNAME1> NORMAL 4 <PDBNAME2> NORMAL 5 <PDBNAME3> NORMAL
Task 2: eseguire il backup del container database (CDB)
-
Connettersi a RMAN utilizzando sysdba o l'utente sysbackup e eseguire il backup del database CDB che include il pluggable database
. RMAN>BACKUP DATABASE PLUS ARCHIVELOG ALL;
Task 3: eliminare il pluggable database creato nel task 1
-
Per simulare il caso, il pluggable database viene eliminato
. SQL> drop pluggable database <PDBNAME3> INCLUDING DATAFILES ;
Task 4: ripristinare il pluggable database eliminato nello stesso database di origine
-
Tentativo di ripristinare PDB come database, nello stesso contenitore, non riuscito con errore RMAN-06813.
RMAN> restore pluggable database <PDBNAME3>; Starting restore at <MM/DD/YYYY> using channel ORA_DISK_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at <MM/DD/YYYY HH:MI:SS> RMAN-06813: could not translate pluggable database <PDBNAME3>
Task 5: Creare un'istanza ausiliaria temporanea
-
Creare un'istanza ausiliaria temporanea nella stessa origine (Server di produzione) o in un altro server (Server ausiliario) per ripristinare il container database (CDB) e il pluggable database (PDB) richiesto.
-
In questo esempio, l'istanza ausiliaria viene creata nello stesso server di origine.
-
Crea il file di inizializzazione per l'istanza ausiliaria.
-- create init<DBNAME AUX>.ora -- verify compatible parameter matches the version of your source db (init<DBCDBNAME>.ora) *.sga_target=10G *.control_files=+DATA/CDBAUX02/CONTROLFILE/control.ctl *.compatible=19.0.0.0.0 *.db_files=65534 *.db_create_file_dest=+DATA *.db_create_online_log_dest_1=+RECO *.undo_tablespace= UNDOTBS1 *.remote_login_passwordfile=EXCLUSIVE *.global_names=FALSE *.instance_name=CDBAUX02 *.audit_trail=DB *.db_name=CDB01 *.db_unique_name=CDBAUX02 *.enable_pluggable_database= TRUE *.db_recovery_file_dest=+RECO *.db_recovery_file_dest_size=40G *.wallet_root=/opt/oracle/dcs/commonstore/wallets/CDBAUX02 *.one_step_plugin_for_pdb_with_tde=FALSE *.tde_configuration='keystore_configuration=FILE' *.DB_FILE_NAME_CONVERT='CDB01_IAD1ZD','CDBAUX02' *.log_file_name_convert='+RECO/CDB01_IAD1ZD/ONLINELOG/','+RECO/CDBAUX02/ONLINELOG/'
Task 6: avviare l'istanza ausiliaria in stato nomount
-
Avviare l'istanza ausiliaria in stato nomount utilizzando i seguenti comandi.
[oracle@sud ~]$ mkdir -p /home/oracle/CDBAUX02[oracle@sud ~]$ cd /home/oracle/CDBAUX02[oracle@sud CDBAUX02]$ export ORACLE_SID=CDBAUX02
Task 7: ripristinare il control file dal backup nell'istanza IdP ed eseguire il MOUNT del database
-
Ripristinare il control file dal backup nell'istanza ausiliaria ed eseguire il MOUNT del database utilizzando i comandi riportati di seguito.
run { set dbid=1672349321; set until time "to_date('2023-05-02 17:03:27','YYYY-MM-DD HH24:MI:SS')"; allocate channel ch1 device type sbt parms 'SBT_LIBRARY=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/libopc.so ENV=(OPC_PFILE=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/97164268-b09e-4c4d-8295-e3d3337b07e0/opc_CDB01_iad1zd.ora)'; restore controlfile from 'c-1672349321-20230502-13' ; alter database mount; }
Task 8: ripristinare e recuperare il database PDB eliminato nell'istanza ausiliaria
-
Ripristinare e recuperare il database PDB eliminato nell'istanza ausiliaria utilizzando i comandi riportati di seguito.
select status from V$BLOCK_CHANGE_TRACKING; alter database disable block change tracking; select status from V$BLOCK_CHANGE_TRACKING; ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE; alter database flashback off; Changing the State of (DISABLE RECOVERY) other PDB: set lines 300 pages 300 select 'alter session set container='||name||'; '|| CHR(13) || CHR(10) ||'alter pluggable database disable recovery; ' from v$pdbs where name not in ('PDB03'); -
Se il database di origine dispone di più PDB e si desidera ripristinare il CDB con un solo PDB, disabilitare il recupero per tutti gli altri PDB nel database ausiliario come sopra e ripristinare solo il PDB eliminato insieme al container database radice.
run { set until time "to_date('2023-05-02 17:03:27','YYYY-MM-DD HH24:MI:SS')"; allocate channel ch1 device type sbt parms 'SBT_LIBRARY=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/libopc.so ENV=(OPC_PFILE=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/97164268-b09e-4c4d-8295-e3d3337b07e0/opc_CDB01_iad1zd.ora)'; set newname for database to '+DATA/'; restore pluggable database PDB03,root; switch datafile all; recover pluggable database PDB03,root; } -
Quando RMAN ha applicato l'ultimo redo log archiviato nel backup e non ha trovato altri log, viene visualizzato un messaggio simile al seguente: Impossibile trovare il log archiviato.
-
Recuperare il database utilizzando il comando seguente.
SQL> recover database using backup controlfile until cancel;
Task 9: aggiungere e rilasciare il redo log file in linea nel database di origine
-
Gruppi di redo log online con aggiunta (4,5,6) ed eliminazione (1,2,3) nel server di origine.

-
Vedere la dimensione dei log correnti.
select GROUP#,THREAD#,MEMBERS,STATUS,BYTES/1024/1024 from v$log; -
Creando 3 nuovi gruppi di log e assegnando loro i nomi 4, 5 e 6, ogni dimensione di 2048 MB.
alter database add logfile group 6 size 2048malter system switch logfile -
Passare al gruppo di log 4 in modo da eliminare i gruppi di log 1, 2 e 3.
alter database drop logfile group 3 -
Recuperare tutti i nomi dei membri di log per i gruppi.
select member from v$logfile;
Task 10: aprire il database in resetlog nell'istanza ausiliaria
-
Aprire il database in resetlog nell'istanza ausiliaria utilizzando il comando seguente.
SQL> alter database open resetlogs;
Task 11: modificare il pluggable database nell'istanza ausiliaria
-
Modifica il pluggable database per la lettura della modalità di scrittura nell'istanza ausiliaria.
SQL> alter pluggable database <PDBNAME3> open read write;
Task 12: Creare un utente e concedere l'autorizzazione per dblink
-
Crea utenti e concede l'autorizzazione per dblink nell'istanza ausiliaria e nell'origine.
CREATE USER C##PDBCLONEDBA IDENTIFIED BY "XXXXXXX"; GRANT CREATE SESSION TO C##PDBCLONEDBA CONTAINER=ALL; GRANT CREATE PLUGGABLE DATABASE TO C##PDBCLONEDBA CONTAINER=ALL; GRANT CREATE DATABASE LINK TO C##PDBCLONEDBA CONTAINER=ALL; GRANT SELECT ANY DICTIONARY TO C##PDBCLONEDBA CONTAINER=ALL; GRANT CREATE JOB TO C##PDBCLONEDBA CONTAINER=ALL; GRANT EXECUTE ON DBMS_SCHEDULER TO C##PDBCLONEDBA CONTAINER=ALL; -
Creare un database link nell'origine.
CREATE DATABASE LINK "CDBAUX02" CONNECT TO C##PDBCLONEDBA IDENTIFIED BY "XXXXXXX" USING '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.174)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = CDBAUX02)))'; 2 SQL> alter session set global_names=FALSE; Session altered. SQL> select * from dual@CDBAUX02; D -- x
Task 13: duplicare il pluggable database PDB03 nell'origine
-
Copiare il pluggable database PDB03 nell'origine.
CREATE PLUGGABLE DATABASE PDB03 FROM PDB03@CDBAUX02 NO REKEY KEYSTORE IDENTIFIED BY "XXXXXXX"; -
Modificare lo stato dei PDB in un CDB: ad esempio, si supponga che il contenitore corrente sia la radice. L'istruzione seguente apre i PDB nel CDB con la modalità aperta READ WRITE.
alter pluggable database PDB03 open read write;
Conferme
- Autore - Aditya Srivastawa (Principal Cloud Architect)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Explorer di Oracle Learning.
Per la documentazione sul prodotto, visitare il sito Oracle Help Center.
Restore a dropped multitenant PDB using auxiliary instance on the same DBCS server
F81982-01
May 2023
Copyright © 2023, Oracle and/or its affiliates.