Oracle Database 12c: Una introducción a los conceptos de Respaldo, Recuperación y Recuperación a un punto en el tiempo (PITR) de PDBs

Por Deiby Gómez Robles, Yenugula Venkata RaviKumar (OCM) y Nassyam Basha (OCP)
Publicado en Abril 2014

Sean bienvenidos estimados tecnólogos de Oracle a este artículo que servirá de base para adentrarnos en los nuevos conceptos de la versión 12c de la base de datos Oracle. Oracle 12c ha cambiado radicalmente con respecto a las versiones anteriores, ha tenido muchas mejoras en el optimizador basado en costos (CBO), en la portabilidad de sus bases de datos, en la flexibilidad al realizar los cambios tanto físicos como lógicos y en su arquitectura haciéndola adecuada para hacer frente al nuevo mundo de “Cloud Computing”. La versión 12c ha introducido principalmente  los siguientes dos nuevos conceptos:

  • Base de Datos de tipo Contenedor (CDB): Es una base de datos que tiene la capacidad de almacenar lógicamente varias bases de datos, a estas bases de datos internas se les llama “Pluggable Database (PDB)”.
  • Base de Datos de tipo “Pluggable” (PDB): Una PDB es un conjunto de esquemas de base de datos que son presentados a los usuarios y aplicaciones como una representación de una base de datos separada o independiente.

En la base de datos Oracle versión 12c, una instancia es asociada con un CDB, esto quiere decir que cada PDB no tiene su propia instancia, sino que las “N” PDBs que existen dentro de un CDB  comparten una misma instancia.

Características generales de la versión 12c:

  • En las versiones anteriores a la versión 12c, todas las bases de datos no son de tipo Contenedor.
  • Iniciando con la versión 12c una base de datos puede ser de tipo Contenedor o puede continuar siendo convencional, no CDB. 
  • La base de datos Oracle en versión 12c soporta la nueva arquitectura “multitenant”que permite tener varias sub bases de datos dentro de una base de datos maestra. La base de datos maestra es un CDB y las sub bases de datos son de tipo PDBs.
  • Un Contenedor llamado “ROOT” (CDB$ROOT) contiene los “tablespaces” SYSTEM, SYSAUX, UNDO y TEMP y por supuesto, los control files y los archivos “redo log”.
  • Un contenedor llamado “SEED” (PDB$SEED) contiene los tablespaces SYSTEM, SYSAUX, TEMP, EXAMPLE usados como una plantilla para crear nuevas  PDBs.
  • Todo CDB siempre mantiene un SEED y un ROOT.
  • El SEED no puede ser abierto para lecturas y escrituras sino solamente para lecturas.

Características de las PDBs:

  • Las PDBs permiten que los DBAs consoliden un gran número de aplicaciones de base de datos dentro de una única y sencilla instalación de software.
  • Cada PDB puede mantener sus propios usuarios.
  • Una PDB es un contenedor que mantiene los datos y código de las aplicaciones y también mantiene sus propios metadatos dentro de los “Tablespace” SYSTEM, SYSAUX y opcionalmente TEMP.
  • Cada PDB tiene un identificador que lo hace único dentro de todo el CDB.
  • Una PDB puede ser creada haciendo uso del SEED.
  • Una PDB puede ser creada desde una base de datos que no es CDB.
  • Es posible crear varios “Tablespace” como sean requeridos por el usuario dentro de una determinada PDB, pero la PDB siempre usará un común control file, “Tablespace” “UNDO” y archivos “redo logs”, todos pertenecientes al CDB.
  • Las PDBs pueden ser removidas de un CDB y luego conectarse a otro CDB.
  • Los detalles de “Undo” y “Redo” de lasPDBs serán agregados dentro de los archivo “Redo Logs” del CDB. Oracle Golden Gate 12c fue modificado para que pueda entender este tipo de archivos “redo logs”.

 Antes de la versión 12c, si se tenía un gran número de aplicaciones dependientes de bases de datos se tenía que tomar en cuenta los siguientes factores:

  • Demasiados procesos de fondo  duplicados debido a las numerosas instancias de bases de datos.
  • Demasiada memoria duplicada debido a los SGAs de todas las instancias de base de datos.
  • Varias copias de los metadatos que proporciona Oracle (Espacio para los diccionarios de datos para las múltiples bases de datos).
  • Actualización de versiones para múltiples bases de datos aumentando el trabajo para los DBAs.
  • Los metadatos de la información del negocio eran mezclados con los metadatos proporcionados por Oracle.
  • Múltiples respaldos y tareas programadas para diferentes bases de datos. 

Ventajas de usar CDBs y PDBs:

Oracle 12c ha traído las siguientes ventajas con respecto al antiguo manejo de múltiples instancias manteniendo cada una de ellas una diferente base de datos:

  • Oracle 12c consolida el uso de múltiples instancias de bases de datos dentro de una sola y centralizada instancia, impidiendo que los procesos de fondo y las estructuras en memoria se dupliquen N-1 veces más, donde N es el número de bases de datos.
  • El tiempo de los DBAses reducido para tareas como parchado y actualización de versiones pues únicamente se tendrá que parchar o actualizar una base de datos.
  • Ningún cambio en las aplicaciones son requeridos para poder utilizar una PDB, pues esta es presentada al usuario como una base de datos independiente.
  • El aprovisionamiento de base de datos es rápido y sencillo al tener las opciones de “Clonación”, “Plug” y “Unplug”.
  • Proporciona aislamiento, pues las PDBs no comparten información entre ellas a no ser que se utilice “Database Link”.
  • Es totalmente compatible con Oracle Real Application Clusters (RAC).
  • En un servidores preferible crear un mayor número de PDBs que de instancias de bases de datos.

Requisitos para realizar respaldos y recuperaciones:

  1. Si la base de datos está siendo creada usando DBCA, entonces es necesario mencionar el nombre de la PDB o si se está creando sin la opción "create as container database", es posible omitir la creación de la PDB y crearla después manualmente utilizando el siguiente comando:      
  2. SQL> create pluggable database ora pdb using 'archivo XML'
  3. Cuando se crea la base de datos usando DBCA el modo “Archivelog” será deshabilitado de facto.Entonces se debe habilitar el modo “Archive log” durante la creación usando DBCA o puede ser habilitado después manualmente con las siguientes sentencias:
    SQL> archive  log list
    SQL> shutdown  immediate;
    SQL> startup  mount;
    SQL> alter  database archivelog;
    SQL> alter  database open;
    SQL> conn / as  sysdba
    SQL> archive log list
  4. Establecer el “Fast Recovery Area”estableciendo un valor para los parámetros“DB_RECOVERY_FILE_DEST”  y  “DB_RECOVERY_FILE_DEST_SIZE”.
  5. De facto las PDB estarán en estado “mount”cuando se inicie el CDB y el “SEED” estará en modo “READ-ONLY”. Es posible crear un “trigger” para abrir automáticamente las PDBs cuando el CDB sea iniciado. El “SEED” no puede ser abierto para escrituras y lecturas.
SQL> startup    
    ORACLE instance started.    
    Total System Global Area  1653518336 bytes 
    Fixed Size                  2289016 bytes 
    Variable Size            1056965256 bytes 
    Database Buffers          587202560 bytes  
    Redo Buffers                7061504 bytes 
    Database mounted.     
    Database opened.
    
    SQL> select  con_id,dbid,name,open_mode,total_size 
    fromv$pdbs;
    
    CON_ID   DBID          NAME      OPEN_MODE      TOTAL_SIZE 
    ----------------------------------------------------------------
    2        4077192876    PDB$SEED    READ  ONLY     283115520  
    3        3864440897    ORAPDB       MOUNTED        0
    
    SQL> alter session set  container=orapdb; 
    Session altered.
    
    SQL> select name,open_mode  from v$database;
    
    NAME      OPEN_MODE 
    -------------------- 
    ORACDB    MOUNTED

Ejemplo:

Crear un“trigger”para iniciar las PDBs automáticamente. Este paso es incluido debido a que en los próximos temas se tratarán con PDBs en estado “OPEN”.

SQL> CREATE or  REPLACE trigger OPEN_PDB after startup on database
     2  begin   
     3  execute immediate 'alter pluggable database  all open';   
     4  end;  
     5  /
     Trigger created.

Si se tiene únicamente una PDB entonces es posible indicarel nombre de la PDB sin necesidad de crear un “trigger”  tal como se muestra a continuación.

SQL> select  con_id,dbid,name,open_mode,total_size 
    fromv$pdbs;
    
    CON_ID    DBID        NAME        OPEN_MODE     TOTAL_SIZE  
    -------------------------------------------------------------  
    2         4077192876  PDB$SEED    READ ONLY     283115520 
    3         3864440897  ORAPDB      MOUNTED               0
    
    SQL>alter pluggable database orapdb open; 
    Pluggable database altered.

Realizar un respaldo de una PDB con RMAN:

En la versión 12c existe el nuevo privilegio llamado SYSBACKUP al cual se le delegó todas las tareas necesarias para poder realizar los respaldos, sin embargo, dichos respaldos aún pueden ser realizados utilizando el ya conocido SYSDBA.

RMAN puede ser ejecutado desde el contenedor ROOT o desde una PDB especificando la cadena de conexión. Cuando RMAN se conecta a una PDB específica, todos los comandos estarán relacionados a esa PDB. Cuando RMAN se ejecuta desde el ROOT todos los comandos serán aplicados a todo el CDB.

Usando el comando “REPORT SCHEMA” de RMAN, se puede identificar los “datafile” utilizados por el CDB.

bash-3.2$ rman target  sys/free2go@oracdb
    RMAN>reportschema;
Report_schema_cdb.PNG

Si se está ejecutando RMAN conectado a una PDB específica y se emite el comando “REPORT SCHEMA” únicamente se verá los “datafiles” correspondientes a esa PDB.

bash-3.2$  rman target sys/free2go@orapdb  
  RMAN>reportschema;
  
  using target database control file instead of recovery catalog
  Report of database schema for database with db_unique_name ORACDB
  
  List of PermanentDatafiles 
  =========================== 
  File  Size(MB)  Tablespace        RB segs  Datafile Name 
  ----  --------  ----------------- -----    -------------------- 
  8     260       SYSTEM            ***   /u01/app/oracle/oradata/ORACDB/pdb/datafile/system_pdb_01.dbf
  9     610       SYSAUX            ***   /u01/app/oracle/oradata/ORACDB/pdb/datafile/sysaux_pdb_01.dbf
  10    5      USERS             ***    /u01/app/oracle/oradata/ORACDB/pdb/datafile/users_pdb_01.dbf
  
  List of Temporary Files
  =======================  
  File Size(MB) Tablespace Maxsize(MB) Tempfile Name 
  ---- -------- ---------  ---------   ----------------------- 
  3    20       TEMP       32767       /u01/app/oracle/oradata/ORACDB/EDE01BFA46E34B11E0437801A8C0821E/  datafile/o1_mf_temp_9c5d7lon_.dbf

Respaldo de una base de datos de tipo Contenedor:

Este procedimiento es el mismo que se realiza en un respaldo tradicional, pero en la versión 12c incluye todas las PDBs que estén dentro del CDB  incluidos el ROOT y el SEED. De facto el respaldo será situado en el “Fast Recovery Area” de acuerdo al parámetro “DB_RECOVERY_FILE_DEST” y es necesario asegurarse que existe suficiente espacio para almacenar el respaldo, esto puede ser comprobado mediante el parámetro “DB_RECOVERY_FILE_DEST_SIZE” y mediante comandos del sistema operativo tales como “df”.

RMAN> backup database plus archive log delete input;

Starting backup at 19-DEC-13
current log  archived
using channel  ORA_DISK_1
channel  ORA_DISK_1: starting archived log backup set
channel  ORA_DISK_1: specifying archived log(s) in backup set
input archived  log thread=1 sequence=6 RECID=1 STAMP=834602253
input archived  log thread=1 sequence=7 RECID=2 STAMP=834602274
input archived  log thread=1 sequence=8 RECID=3 STAMP=834604238
input archived  log thread=1 sequence=9 RECID=4 STAMP=834604771
channel ORA_DISK_1:  starting piece 1 at 19-DEC-13
channel  ORA_DISK_1: finished piece 1 at 19-DEC-13
piece  handle=/u01/app/oracle/fast_recovery_area/ORACDB/backupset/2013_12_19/
o1_mf_annnn_TAG20131219T183931_9c5w0cx5_.bkp  
tag=TAG20131219T183931 comment=NONE
channel ORA_DISK_1:  backup set complete, elapsed time: 00:00:01
channel  ORA_DISK_1: deleting archived log(s)
archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_19/
o1_mf_1_6_9c5sknwc_.arc  
RECID=1 STAMP=834602253
archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_19/
o1_mf_1_7_9c5slboc_.arc  
RECID=2 STAMP=834602274
archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_19/
o1_mf_1_8_9c5vhpcw_.arc  
RECID=3 STAMP=834604238
archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_19/
o1_mf_1_9_9c5w0cpm_.arc  
RECID=4 STAMP=834604771
Finished backup  at 19-DEC-13 

Starting backup  at 19-DEC-13
using channel  ORA_DISK_1
channel  ORA_DISK_1: starting full datafile backup set
channel  ORA_DISK_1: specifying datafile(s) in backup set
inputdatafile  file number=00001  name=/u01/app/oracle/oradata/ORACDB/datafile/
o1_mf_system_9c5czbgn_.dbf
inputdatafile  file number=00003 name=/u01/app/oracle/oradata/ORACDB/datafile/
o1_mf_sysaux_9c5cxm60_.dbf
inputdatafile  file number=00004  name=/u01/app/oracle/oradata/ORACDB/datafile/
o1_mf_undotbs1_9c5d0rvv_.dbf
inputdatafile  file number=00006  name=/u01/app/oracle/oradata/ORACDB/datafile/
o1_mf_users_9c5d0qoq_.dbf
channel  ORA_DISK_1: starting piece 1 at 19-DEC-13
channel  ORA_DISK_1: finished piece 1 at 19-DEC-13
piece  handle=/u01/app/oracle/fast_recovery_area/ORACDB/backupset/2013_12_19/
o1_mf_nnndf_TAG20131219T183933_9c5w0flg_.bkp  
tag=TAG20131219T183933 comment=NONE
channel  ORA_DISK_1: backup set complete, elapsed time: 00:00:45
channel  ORA_DISK_1: starting full datafile backup set
channel  ORA_DISK_1: specifying datafile(s) in backup set
inputdatafile  file number=00009  name=/u01/app/oracle/oradata/ORACDB/pdb/datafile/sysaux_pdb_01.dbf
inputdatafile  file number=00008  name=/u01/app/oracle/oradata/ORACDB/pdb/datafile/system_pdb_01.dbf
inputdatafile  file number=00010  name=/u01/app/oracle/oradata/ORACDB/pdb/datafile/users_pdb_01.dbf
channel  ORA_DISK_1: starting piece 1 at 19-DEC-13
channel ORA_DISK_1:  finished piece 1 at 19-DEC-13
piece  handle=/u01/app/oracle/fast_recovery_area/ORACDB/EDE01BFA46E34B11E0437801A8C0821E/backupset/2013_12_19/
o1_mf_nnndf_TAG20131219T183933_9c5w1tqp_.bkp  tag=TAG20131219T183933 comment=NONE
channel  ORA_DISK_1: backup set complete, elapsed time: 00:00:25
channel  ORA_DISK_1: starting full datafile backup set
channel  ORA_DISK_1: specifying datafile(s) in backup set
inputdatafile  file number=00007  name=/u01/app/oracle/oradata/ORACDB/datafile/o1_mf_sysaux_9c5d1gjo_.dbf
inputdatafile  file number=00005  name=/u01/app/oracle/oradata/ORACDB/datafile/o1_mf_system_9c5d1gkh_.dbf
channel  ORA_DISK_1: starting piece 1 at 19-DEC-13
channel  ORA_DISK_1: finished piece 1 at 19-DEC-13
piece  handle=/u01/app/oracle/fast_recovery_area/ORACDB/EDE01310DB1248ADE0437801A8C065D6/backupset/2013_12_19/
o1_mf_nnndf_TAG20131219T183933_9c5w2mz4_.bkp  tag=TAG20131219T183933 comment=NONE
channel  ORA_DISK_1: backup set complete, elapsed time: 00:00:26
Finished backup  at 19-DEC-13 

Starting backup  at 19-DEC-13
current log  archived
using channel  ORA_DISK_1
channel  ORA_DISK_1: starting archived log backup set
channel  ORA_DISK_1: specifying archived log(s) in backup set
input archived  log thread=1 sequence=10 RECID=5 STAMP=834604869
channel  ORA_DISK_1: starting piece 1 at 19-DEC-13
channel  ORA_DISK_1: finished piece 1 at 19-DEC-13
piece  
handle=/u01/app/oracle/fast_recovery_area/ORACDB/backupset/2013_12_19/o1_mf_annnn_TAG20131219T184109_9c5w3fct_.bkp  
tag=TAG20131219T184109 comment=NONE
channel  ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel  ORA_DISK_1: deleting archived log(s)
archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_19/o1_mf_1_10_9c5w3f6z_.arc  
RECID=5 STAMP=834604869
Finished backup  at 19-DEC-13 

Starting Control  File and SPFILE Autobackup at 19-DEC-13

piece  
handle=/u01/app/oracle/fast_recovery_area/ORACDB/autobackup/2013_12_19/o1_mf_s_834604870_9c5w3hjt_.bkp 
comment=NONE
Finished Control  File and SPFILE Autobackup at 19-DEC-13

Se puede verificar que el respaldo haya finalizado con éxito utilizando el comando "listbackup" en RMAN.

List_backup.PNG

Hasta aquí se ha realizado un respaldo completo el cual incluye el CDB y sus PDBs, sin embargo, también es posible realizar respaldos de una PDB específica.

Respaldo de una PDB:

Para realizar un respaldo de una PDB, se necesita que la conexión de RMAN sea realizada a la PDB específica. Si  la conexión se realiza a la PDB y se ejecuta el siguiente comando "backuppluggabledatabaseorapdb" se obtendrá el siguiente error:

RMAN> backup pluggable database orapdb tag  'PDB_Backup';
Starting backup  at 19-DEC-13

allocated  channel: ORA_DISK_1

channel  ORA_DISK_1: SID=1 device type=DISK
RMAN-00571:  ===========================================================
RMAN-00569:  =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571:  ===========================================================
RMAN-03002:  failure of backup command at 12/19/2013 18:56:55
RMAN-07538:  Pluggable Database qualifier not allowed when connected to a Pluggable Database

RMAN> backup pluggable database orapdb tag  'PDB_Backup';

Starting backup  at 19-DEC-13
allocated  channel: ORA_DISK_1
channel  ORA_DISK_1: SID=49 device type=DISK
channel  ORA_DISK_1: starting full datafile backup set
channel  ORA_DISK_1: specifying datafile(s) in backup set
inputdatafile  file number=00009 name=/u01/app/oracle/oradata/ORACDB/pdb/datafile/sysaux_pdb_01.dbf
inputdatafile  file number=00008 name=/u01/app/oracle/oradata/ORACDB/pdb/datafile/system_pdb_01.dbf
inputdatafile  file number=00010 name=/u01/app/oracle/oradata/ORACDB/pdb/datafile/users_pdb_01.dbf
channel  ORA_DISK_1: starting piece 1 at 19-DEC-13
channel  ORA_DISK_1: finished piece 1 at 19-DEC-13
piece  handle=/u01/app/oracle/fast_recovery_area/ORACDB/EDE01BFA46E34B11E0437801A8C0821E/backupset/2013_12_19/
o1_mf_nnndf_PDB_BACKUP_9c5x3rsf_.bkp  tag=PDB_BACKUP comment=NONE
channel  ORA_DISK_1: backup set complete, elapsed time: 00:00:15
Finished backup  at 19-DEC-13
Starting Control  File and SPFILE Autobackup at 19-DEC-13
piece  handle=/u01/app/oracle/fast_recovery_area/ORACDB/autobackup/2013_12_19/o1_mf_s_834605919_9c5x47y6_.bkp  
comment=NONE
Finished Control  File and SPFILE Autobackup at 19-DEC-13

RMAN> list backup tag='PDB_Backup';

List of Backup  Sets
===================
BS Key  Type LV  Size       Device Type Elapsed Time Completion Time
------- ---- --  ---------- ----------- ------------ ---------------
8       Full     681.70M    DISK        00:00:10     19-DEC-13

BP Key: 8   Status: AVAILABLE  Compressed: NO  Tag: PDB_BACKUP
Piece Name:  /u01/app/oracle/fast_recovery_area/ORACDB/EDE01BFA46E34B11E0437801A8C0821E/backupset/2013_12_19/
o1_mf_nnndf_PDB_BACKUP_9c5x3rsf_.bkp
List of Datafiles in backup set 8
Container  ID: 3, PDB Name: ORAPDB

File LV Type Ckp SCN   CkpTime   Name
---- -- ---- --------- --------- ----
8       Full 1752950   19-DEC-13 /u01/app/oracle/oradata/ORACDB/pdb/datafile/system_pdb_01.dbf
9       Full 1752950   19-DEC-13 /u01/app/oracle/oradata/ORACDB/pdb/datafile/sysaux_pdb_01.dbf
10      Full 1752950   19-DEC-13 /u01/app/oracle/oradata/ORACDB/pdb/datafile/users_pdb_01.dbf
RMAN>

En la salida de arriba se puede observar el identificador del contenedor y también el nombre de la PDB, por supuesto el“TAG”es opcional.

Las piezas del respaldo están localizadas en la siguiente ruta:
"/u01/app/oracle/fast_recovery_area/ORACDB/EDE01BFA46E34B11E0437801A8C0821E/backupset/2013_12_19/o1_mf_nnndf_PDB_BACKUP_9c5x3rsf_.bkp".

Como se puede observar, el  GUID también es mostrado en la ruta del respaldo. El GUID también puede ser obtenido consultando la vista v$pdbs:

SQL>  select con_id,dbid,guid,name from v$pdbs;
CON_ID   DBID         GUID                               NAME
-------  ----------   --------------------------------   ---------         
2        4077192876   EDE01310DB1248ADE0437801A8C065D6   PDB$SEED
3        3864440897   EDE01BFA46E34B11E0437801A8C0821E   ORAPDB

Toda esta información está relacionada a los respaldos completos de una PDB. También es posiblerealizar respaldos parciales de una PDB, por ejemplo, respaldos de los “datafiles” o un específico “tablespace”.Para realizar un respaldo de un “datafile” no existe ningún cambio en la versión 12c, tal como se ve en el siguiente ejemplo:

RMAN>  backup datafile 2,10; 
RMAN> backup tablespaceorapdb:users  tag='PDB_users_TBS';
  Starting backup  at 19-DEC-13
  using target  database control file instead of recovery catalog
  allocated  channel: ORA_DISK_1
  channel  ORA_DISK_1: SID=1 device type=DISK
  channel  ORA_DISK_1: starting full datafile backup set
  channel  ORA_DISK_1: specifying datafile(s) in backup set
  inputdatafile  file number=00010  
name=/u01/app/oracle/oradata/ORACDB/pdb/datafile/users_pdb_01.dbf
  channel  ORA_DISK_1: starting piece 1 at 19-DEC-13
  channel  ORA_DISK_1: finished piece 1 at 19-DEC-13
  piece  handle=/u01/app/oracle/fast_recovery_area/ORACDB/EDE01BFA46E34B11E0437801A8C0821E/
backupset/2013_12_19/o1_mf_nnndf_PDB_USERS_TBS_9c5y6dxb_.bkp  tag=PDB_USERS_TBS comment=NONE
  channel  ORA_DISK_1: backup set complete, elapsed time: 00:00:01
  Finished backup  at 19-DEC-13

Starting Control  File and SPFILE Autobackup at 19-DEC-13
piece  handle=/u01/app/oracle/fast_recovery_area/ORACDB/autobackup/2013_12_19/o1_mf_s_834607014_9c5y6g2x_.bkp  
comment=NONE
  Finished Control  File and SPFILE Autobackup at 19-DEC-13

Recuperación de una PDB con RMAN:

En caso haya algún “tablespace” o “datafile” con problemas quepertenezca a una PDB, el CDB no será afectado, únicamentela PDB con problemas no estará disponible para ser accedida. Ahora se mostrará un escenario relacionado a la recuperación de una PDB. Antes de realizar una recuperación es necesario asegurarse de tener un respaldo.

Simulación de la pérdida de un “datafile” en una PDB:

El escenario que se muestra a continuación demuestra como restaurar y recuperar un “datafile” cuando dicho “datafile”está perdido.

SQL> alter  session set container=orapdb;
  Session altered.
SQL> col name  for a100
SQL>select  file#,name from v$datafile;
FILE#     NAME
--------- -----------------------------------------------------
4         /u01/app/oracle/oradata/ORACDB/datafile/o1_mf_undotbs1_9c5d0rvv_.dbf
8         /u01/app/oracle/oradata/ORACDB/pdb/datafile/system_pdb_01.dbf
9         /u01/app/oracle/oradata/ORACDB/pdb/datafile/sysaux_pdb_01.dbf
10        /u01/app/oracle/oradata/ORACDB/pdb/datafile/users_pdb_01.dbf
SQL> !rm  /u01/app/oracle/oradata/ORACDB/pdb/datafile/system_pdb_01.dbf
SQL> !ls -ltr  /u01/app/oracle/oradata/ORACDB/pdb/datafile/system_pdb_01.dbf
  ls:  /u01/app/oracle/oradata/ORACDB/pdb/datafile/system_pdb_01.dbf: 
No such file or  directory
SQL> select  file#,error,recover from v$datafile_header;
FILE#    ERROR                REC
-------- -------------------- -----
4                             NO
8        CANNOT OPEN FILE
9                             NO
10                            NO

Cuando existen“datafiles” perdidos en una PDB, es posible conectarse al CDB y emitir los comandos necesarios para restauración o recuperación desde RMAN. Hay que notar que cuando los “datafile” no están disponibles no es posiblecerrar la PDB.

RMAN> restore  datafile 8;
  Starting restore  at 20-DEC-13
  using target  database control file instead of recovery catalog
  allocated  channel: ORA_DISK_1
  channel  ORA_DISK_1: SID=21 device type=DISK
  channel  ORA_DISK_1: starting datafile backup set restore
  channel  ORA_DISK_1: specifying datafile(s) to restore from backup set
  channel  ORA_DISK_1: restoring datafile 00008 to /u01/app/oracle/oradata/ORACDB/pdb/datafile/system_pdb_01.dbf
  channel  ORA_DISK_1: reading from backup piece  /u01/app/oracle/
  fast_recovery_area/ORACDB/EDE01BFA46E34B11E0437801A8C0821E/backupset/2013_12_20/
o1_mf_nnndf_TAG20131220T110232_9c7oow6q_.bkp
  channel ORA_DISK_1:  piece  handle=/u01/app/oracle/fast_recovery_area/ORACDB/
EDE01BFA46E34B11E0437801A8C0821E/backupset/2013_12_20/o1_mf_nnndf_TAG20131220T110232_9c7oow6q_.bkp  
  tag=TAG20131220T110232
  channel  ORA_DISK_1: restored backup piece 1
  channel  ORA_DISK_1: restore complete, elapsed time: 00:00:15
  Finishedrestore at 20-DEC-13

Verificar que haya terminado el procedimiento del restaurado del “datafile” correctamente, después se debe emitir el comando “recoverdatafile”.

RMAN> recover  datafile 8;
  Starting recover  at 20-DEC-13
  using channel  ORA_DISK_1
  starting media  recovery
  archived log for  thread 1 with sequence 20 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_20_9c7orfgl_.arc
  archived log for  thread 1 with sequence 21 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_21_9c7ph7wj_.arc
  archived log for  thread 1 with sequence 22 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_22_9c7py3bm_.arc
  archived log for  thread 1 with sequence 23 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_23_9c7q9rqr_.arc
  archived log for  thread 1 with sequence 24 is already on disk as file 
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_24_9c7qd7on_.arc
  archived log for  thread 1 with sequence 25 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_25_9c7qyomg_.arc
  archived log for  thread 1 with sequence 26 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_26_9c7rblbd_.arc
  archived log for  thread 1 with sequence 27 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_27_9c7sjr14_.arc
  archived log for  thread 1 with sequence 28 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_28_9c86jnck_.arc
  archived log for  thread 1 with sequence 29 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_29_9c86lowv_.arc
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_20_9c7orfgl_.arc  
thread=1 sequence=20
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_21_9c7ph7wj_.arc  
thread=1 sequence=21
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_22_9c7py3bm_.arc  
thread=1 sequence=22
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_23_9c7q9rqr_.arc  
thread=1 sequence=23
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_24_9c7qd7on_.arc  
thread=1 sequence=24
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_25_9c7qyomg_.arc  
thread=1 sequence=25
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_26_9c7rblbd_.arc  
thread=1 sequence=26
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_27_9c7sjr14_.arc  
thread=1 sequence=27
  media recovery  complete, elapsed time: 00:00:02
  Finishedrecover at 20-DEC-13

Enel ejemplo de arriba se trató la recuperación de un datafile del “tablespace” SYSTEM. En caso de que un“datafile”esté perdido y que no sea del “tablespace” SYSTEM se puede realizar los pasos que se muestran a continuación:

RMAN> alter  database datafile 10 offline;
  RMAN> restore  datafile 10;
  RMAN> recover  datafile 10;
  RMAN> alter  database datafile 10 online;

Pérdida de un “tablespace” en una PDB:

Si se tienen varios “datafiles”perdidos para un “tablespace”, es posible restaurar un “tablespace” completo y realizar una recuperación. En el siguiente ejemplo se creará un “tablespace” con el nombre EXAMPLE y entonces se restaurará y se recuperará.La técnica de restaurado y recuperado de un “tablespace” es la misma si el “tablespace” contiene un solo “datafile” o si posee múltiples “datafiles”.

SQL> alter  session set container=orapdb;
  Session altered.
SQL> create  tablespace example
  datafile  '/u01/app/oracle/oradata/ORACDB/pdb/example01.dbf'
  size 50m;
  Tablespace  created.
SQL> alter  tablespace example 
  adddatafile  '/u01/app/oracle/oradata/ORACDB/pdb/example02.dbf' size 50m;
  Tablespace  altered.
SQL> select  file_id,file_name
  fromcdb_data_files
  where tablespace_name = 'EXAMPLE';
FILE_ID   FILE_NAME
--------  -----------------------------------------------        
17        /u01/app/oracle/oradata/ORACDB/pdb/example01.dbf
18        /u01/app/oracle/oradata/ORACDB/pdb/example02.dbf
SQL>!rm /u01/app/oracle/oradata/ORACDB/pdb/example01.dbf
  SQL>!rm /u01/app/oracle/oradata/ORACDB/pdb/example02.dbf
SQL>!ls -ltr /u01/app/oracle/oradata/ORACDB/pdb/example*
  ls:  /u01/app/oracle/oradata/ORACDB/pdb/example*: No such file or directory

Una vez eliminados todos los “datafile” del “tablespace” EXAMPLE se realiza la recuperación de dicho “tablespace”. Para realizar la recuperación se necesita que el “tablespace” esté en estado OFFLINE. El comando "alter tablespace example offline" funciona cuando aún hay “datafiles” funcionales. En este ejemplo se han eliminado todos los “datafile”, entonces se necesitará utilizar la cláusula "IMMEDIATE" para ponerlo en estado OFFLINE.

RMAN> alter  tablespace example offline immediate;
  Statement  processed
RMAN> restore  tablespace example;
  Starting restore  at 20-DEC-13
  using channel  ORA_DISK_1
  creatingdatafile  file number=17 name=/u01/app/oracle/oradata/ORACDB/pdb/example01.dbf
  creatingdatafile  file number=18 name=/u01/app/oracle/oradata/ORACDB/pdb/example02.dbf
  restore not done;  all files read only, offline, or already restored
  Finished restore  at 20-DEC-13
  RMAN> recover  tablespace example;
  Starting recover  at 20-DEC-13
  using channel  ORA_DISK_1
  starting media  recovery
  archived log for  thread 1 with sequence 6 is already on disk as file 
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_6_9c8htxj2_.arc
  archived log for  thread 1 with sequence 7 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_7_9c8htxvk_.arc
  archived log for  thread 1 with sequence 8 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_8_9c8hv0xq_.arc
  archived log for  thread 1 with sequence 9 is already on disk as file  
/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/o1_mf_1_9_9c8hv0xh_.arc
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_6_9c8htxj2_.arc  
thread=1 sequence=6
  archived log file  name=/u01/app/oracle/fast_recovery_area/ORACDB/archivelog/2013_12_20/
o1_mf_1_7_9c8htxvk_.arc  
thread=1 sequence=7
  media recovery  complete, elapsed time: 00:00:00
  Finished recover  at 20-DEC-13
  RMAN> alter  tablespace example online;
  Statement processed
  RMAN>

Ahora el “tablespace” EXAMPLE está completamente restaurado y recuperado por lo que,si todo ha terminado satisfactoriamente, se debería encontrar en estado ONLINE.

Pérdida de una PDB completa:

En esta sección, se verá como restaurar y recuperar una PDB desde un respaldo.Si se tienenmúltiplesPDBs entonces sin tener que afectar las demás PDBs se puede restaurar y recuperar una PDB determinada.Para realizar la restauración y la recuperación es posible conectarse al contenedor ROOT y utilizar el siguiente comando "RESTORE PLUGGABLE DATABASE"  o también es posible conectarse a la PDB específica y directamente emitir el comando "RESTORE DATABASE".

Para evitar un encolamiento exclusivo en algún “datafile” en la PDB, se necesita cerrar dicha PDB y entonces seguir los pasos de restauración y recuperación. 

SQL>alter  pluggable database orapdb close;
  Pluggable  database altered.
RMAN> restore  pluggable database orapdb;
  Starting restore  at 21-DEC-13
  using target  database control file instead of recovery catalog
  allocated  channel: ORA_DISK_1
  channel  ORA_DISK_1: SID=55 device type=DISK
  channel  ORA_DISK_1: starting datafile backup set restore
  channel  ORA_DISK_1: specifying datafile(s) to restore from backup set
  channel  ORA_DISK_1: restoring datafile 00019 to  
/u01/app/oracle/oradata/ORACDB/pdb/datafile/orapdb_o1_mf_system_9cbghmrb_.dbf
  channel  ORA_DISK_1: restoring datafile 00020 to  
/u01/app/oracle/oradata/ORACDB/pdb/datafile/orapdb_o1_mf_sysaux_9cbghmpl_.dbf
  channel  ORA_DISK_1: restoring datafile 00021 to  
/u01/app/oracle/oradata/ORACDB/pdb/datafile/orapdb_users01.dbf
  channel  ORA_DISK_1: reading from backup piece  
/u01/app/oracle/fast_recovery_area/ORACDB/EE07145D1EAF1865E0437801A8C01BCF/backupset/2013_12_21/
o1_mf_nnndf_TAG20131221T124059_9cbhstcp_.bkp
  channel  ORA_DISK_1: piece handle=/u01/app/oracle/fast_recovery_area/
ORACDB/EE07145D1EAF1865E0437801A8C01BCF/
backupset/2013_12_21/o1_mf_nnndf_TAG20131221T124059_9cbhstcp_.bkp  tag=TAG20131221T124059
  channel  ORA_DISK_1: restored backup piece 1
  channel  ORA_DISK_1: restore complete, elapsed time: 00:00:25
  Finished restore  at 21-DEC-13
RMAN> recover  pluggable database orapdb;
  Starting recover  at 21-DEC-13
  using channel  ORA_DISK_1
  starting media  recovery
  media recovery  complete, elapsed time: 00:00:00
  Finished recover  at 21-DEC-13
RMAN>alter  pluggable database orapdb open;
  Statement processed

Recuperación a un punto en el tiempo de una PDB (DBPITR):

El concepto de recuperación hasta un punto en el tiempo es nombrado de manera abreviada como “DBPITR”. Es posible que nos enfrentemos a problemas como que una tabla fueeliminada, filas de una tabla fueron eliminadas o una tabla de una base de datos de producción fue truncada. En tales casos una recuperación hasta un punto en el tiempo debe ser realizado.

Nota: Para realizar una DBPITR se utilizará RMAN.

Requerimientos para utilizar DBPITR en una PDB:

  • La base de datos necesita estar en modo “Archivelog”.
  • Se necesita tener un respaldo completo delCDB, si el SCN objetivo es 10000 por ejemplo, entonces el respaldo debería iniciar desde SCNinferior a 10000, por ejemplo 8000, 9000 o menor.
  • Es necesario tener todos los “archive log” posteriores al respaldo completo.

Revisar el estado del modo “Archive log” y del respaldo antes de realizar modificaciones, eliminaciones o cualquier otra operación.

SQL> select  name,open_mode from v$pdbs;
NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
ORAPDB                         READ WRITE
SQL> archive  log list
  Database log  mode             Archive Mode
  Automatic archival             Enabled
  Archive  destination           USE_DB_RECOVERY_FILE_DEST
  Oldest online log  sequence    3
  Next log sequence  to archive  5
  Current log sequence           5

Ahora se realizará un respaldo completo y siempre se recomienda verificar el estado de dicho respaldo:

RMAN> list backup tag='BEFORE_DBPITR';
List of Backup  Sets
===================
BS Key  Size       Device Type Elapsed Time  Completion Time
------- ---------- ----------- ------------  ---------------
68      13.21M     DISK        00:00:02      21-DEC-13

BP Key: 68   Status: AVAILABLE  Compressed: YES 
Tag:  BEFORE_DBPITR
Piece Name:  /u01/app/oracle/fast_recovery_area/ORACDB/backupset/2013_12_21/
o1_mf_annnn_BEFORE_DBPITR_9cbpl5l2_.bkp
List of Archived Logs in backup set 68

Thrd  Seq     Low SCN    Low Time   Next SCN   Next Time
----  ------- ---------- ---------  ---------- ---------
1     1       2273638    21-DEC-13  2281354    21-DEC-13
1     2       2281354    21-DEC-13  2281403    21-DEC-13
1     3       2281403    21-DEC-13  2284137    21-DEC-13
1     4       2284137    21-DEC-13  2284199    21-DEC-13
1     5       2284199    21-DEC-13  2289882    21-DEC-13
BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
72      12.50K     DISK        00:00:00     21-DEC-13

BP Key: 72   Status: AVAILABLE  Compressed: YES 
Tag:  BEFORE_DBPITR
Piece Name:  /u01/app/oracle/fast_recovery_area/ORACDB/backupset/2013_12_21/
o1_mf_annnn_BEFORE_DBPITR_9cbpp6ob_.bkp
List of Archived Logs in backup set 72

Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
---- ------- ---------- --------- ---------- ---------
1    6       2289882    21-DEC-13 2289956    21-DEC-13

Entonces, ahora se tiene la base de datos en modo “Archive log” y también se ha realizado un exitoso respaldo completo de la base de datos al cual se le asignó la etiqueta "BEFORE_DBPITR".

SQL>  alter session set container=orapdb;
  Session altered.
SQL> select  name,open_mode from v$pdbs;
NAME                           OPEN_MODE
------------------------------ ----------
ORAPDB                         READ WRITE
SQL> create  tablespacedbpitr
  datafile  '/u01/app/oracle/oradata/ORACDB/pdb/datafile/dbpitr_01.dbf'
  size 100m;
  Tablespace  created.
SQL> create  user pdbuser identified by manager 
  defaulttablespacedbpitr;
  User created.
SQL> connect  pdbuser/manager@orapdb;
  Connected.
SQL> create  table pdbtable(
  emp_namevarchar2(10),
  salary  number(5));
  Table created.
SQL> insert  into pdbtable values ('emp_one',60000);
  1 row created.
  SQL> insert  into pdbtable values ('emp_two',70000);
  1 row created.
  SQL> insert  into pdbtable values ('emp_three',80000);
  1 row created.
  SQL> commit;
  Commit complete.
SQL> select  timestamp_to_scn(sysdate) from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
2291250
SQL> select *  from pdbtable;
EMP_NAME       SALARY
----------  ---------
emp_one         60000
emp_two         70000
emp_three       80000

Se han insertado tres registros en la tabla “pdbtable” y se ha realizado “commit”. Para realizar “DBPITR” es necesario conocer el momento al cual necesitamos recuperar la base de datos. Por ello, se debe tener el SCN que se quiere alcanzar o  la fecha a la cual se necesita recuperar.También es posible utilizar funciones para obtener estos datos, por ejemplo:

  • timestamp_to_scn
  • scn_to_timestamp

 SQL> select timestamp_to_scn(sysdate) from dual;

TIMESTAMP_TO_SCN(SYSDATE)
--------------------------
2291262

SQL> select  scn_to_timestamp(2291262) from dual;
SCN_TO_TIMESTAMP(2291262)
----------------------------------------------------------------
21-DEC-13 03.17.30.000000000 PM

Después de reunir los detalles del SCN o la fecha deseada de recuperación, se truncará la tabla completa(simulando un error de usuario), de esta manera todos los registros en la tabla "pdbtable" estarán perdidos.

SQL> truncate  table pdbtable;
  Table truncated.
SQL> select *  from pdbtable;
  no rows selected

Ahora se obtendrá el SCN y la fecha posterior al fallopara nuestra referencia con el objetivode podercomparar el SCN anterior y posteriora la operación de truncado.

SQL> select  timestamp_to_scn(sysdate) from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
2291764
SQL> select  scn_to_timestamp(2291764) from dual;
SCN_TO_TIMESTAMP(2291764)
----------------------------------------------------------------
21-DEC-13 03.27.18.000000000 PM

Antes de realizar la recuperación la base de datos es necesario que esta esté cerrada. Se necesita cerrar únicamente la PDB en la cual ocurrió el problema, en este caso un truncado de una tabla.

bash-3.2$ rman 
  RMAN> connect  target "sys as sysbackup" 
  target database  Password: 
  connected to  target database: ORACDB (DBID=2508982653) 
RMAN>alter  pluggable database orapdb close; 
  using target  database control file instead of recovery catalog 
  Statement processed

Se ha cerrado la PDB “ORAPDB”, ahora se debe realizar la recuperación hasta un punto en el tiempo anterior al momento de la operación de truncado. En los pasos anteriores recaudamos la información necesaria para realizar la recuperación, esto es el SCN o la fecha, es posible entonces realizar la recuperación utilizando cualquiera de esos dos datos. Antes de realizar el “DBPITR” se necesita crear un destino auxiliar y tener suficiente espacio para almacenar las copias de los “datafile”.

bash-3.2$ rman  target /
RMAN> run
  2> {
  3> set until  scn 2291262;
  4> restore  pluggable database orapdb;
  5> recover  pluggable database orapdb auxiliary destination='/home/oracle/working/aux_pdb';
  6>alter  pluggable database orapdb open resetlogs;
  7> }
executing  command: SET until clause
Starting restore  at 21-DEC-13
  using target  database control file instead of recovery catalog
  allocated  channel: ORA_DISK_1
  channel  ORA_DISK_1: SID=57 device type=DISK
creatingdatafile  file number=22 name=/u01/app/oracle/oradata/ORACDB/pdb/datafile/dbpitr_01.dbf
  channel  ORA_DISK_1: starting datafile backup set restore
  channel  ORA_DISK_1: specifying datafile(s) to restore from backup set
  channel  ORA_DISK_1: restoring datafile 00019 to  
/u01/app/oracle/oradata/ORACDB/pdb/datafile/orapdb_o1_mf_system_9cbghmrb_.dbf
  channel  ORA_DISK_1: restoring datafile 00020 to  
/u01/app/oracle/oradata/ORACDB/pdb/datafile/orapdb_o1_mf_sysaux_9cbghmpl_.dbf
  channel  ORA_DISK_1: restoring datafile 00021 to  
/u01/app/oracle/oradata/ORACDB/pdb/datafile/orapdb_users01.dbf
  channel  ORA_DISK_1: reading from backup piece  
/u01/app/oracle/fast_recovery_area/ORACDB/EE07145D1EAF1865E0437801A8C01BCF/backupset/2013_12_21/
o1_mf_nnndf_TAG20131221T143720_9cbpn00l_.bkp
  channel  ORA_DISK_1: piece  
handle=/u01/app/oracle/fast_recovery_area/ORACDB/EE07145D1EAF1865E0437801A8C01BCF/backupset/2013_12_21/
o1_mf_nnndf_TAG20131221T143720_9cbpn00l_.bkp  tag=TAG20131221T143720
  channel  ORA_DISK_1: restored backup piece 1
  channel  ORA_DISK_1: restore complete, elapsed time: 00:00:35
  Finished restore  at 21-DEC-13
.....................................
Oracle instance  shut down
Removing  automatic instance
  Automatic  instance removed
  auxiliary  instance file  /home/oracle/working/aux_pdb/ORACDB/datafile/o1_mf_sysaux_9cbt6k0m_.dbf deleted
  auxiliary  instance file  /home/oracle/working/aux_pdb/ORACDB/controlfile/o1_mf_9cbt6c34_.ctl deleted
  Finished recover  at 21-DEC-13
Statement processed
Pluggable Database Point-In-Time recovery  successfully completed without any errors.

Se ha incluido el comando "alter pluggable database ora pdb  open reset logs", por lo tanto la PDB estará disponible para operaciones de lecturas y escrituras después de finalizar la recuperación. Ahora es momento de verificar los datos, si se fue capaz de recuperar los registros que fueron eliminados al realizar el truncado en la tabla.

bash-3.2$  sqlpluspdbuser/manager@orapdb
SQL> select *  from pdbtable;
EMP_NAME       SALARY
----------  ---------
emp_one         60000
emp_two         70000
emp_three       80000

Se tenían todos los datos eliminados por la operación de truncado y ahora vemos que los datos nuevamente existen. Cuando se realiza una recuperación sobre una sencilla PDB cualquier otra PDB o incluso el contenedor no serán afectados.

SQL> select  db_incarnation#,pdb_incarnation#,
  status,incarnation_time
  fromv$pdb_incarnation
  where  status='CURRENT'; 
DB_INCARNATION#  PDB_INCARNATION# STATUS  INCARNATION_TIME 
---------------  ---------------- ------- -------------------- 
5                1                CURRENT 21-DEC-2013 03:17:42

Se recomienda verificar el tiempo de reencarnación y el SCN antes del truncado para comprobar si le recuperación fue realizada exitosamente.

Deiby Gomez es un DBA con experiencia en Oracle Exadata Database Machine y Soluciones de Alta Disponibilidad. Deiby frecuentemente da conferencias en distintos eventos de Oracle en Guatemala tales como "Oracle Technology Network Tour", "Java Day", "Primer Simposio de Oracle" y en varias Universidades de su país de residencia (Guatemala). Deiby es el primer Oracle ACE de Guatemala. Es "Oracle RAC 11g and Grid Infraestructure Administrator", "Exadata Database Machine X3 Administrator", "Oracle Linux Certified Implementation Specialist" y "Oracle SOA Implementation Certified Expert".

Yenugula Venkata Ravikumar es un DBA con más de 15 años de experiencia especializada en entornos de alta disponibilidad de bases de datos (RAC, Data Guard, entre otros), afinamiento y rendimiento, migraciones, backup y recuperación, Oracle Exadata X2 y X3, es experto en sistemas operativos tales como AIX, HP-UX y Linux. Ha participado como conferencista en varios eventos de Oracle en la India, donde reside actualmente. Obtuvo el titulo "Oracle Certified Master (OCM 10g)" en el 2009.

Nassyam Basha es un DBA. Es un OCP 11g con conocimientos en tecnologías Oracle tales como Data Guard, RMAN, RAC. Él ha realizado más de 90 configuraciones de Data Guard en diferentes plataformas, desde RAC a no-RAC y viceversa. Ha realizado migraciones exitosas con “switchovers” y “failovers” para varias bases de datos críticas de producción. Él participa activamente en los foros de Oracle utilizando el usuario “CKPT” y ha obtenido más de  10000 puntos (nivel gurú). Él constantemente publica artículos en su blog www.oracle-ckpt.com y es  co-autor del libro “Oracle Data Guard 11gR2 administration guide”.