[ 2015-08-02 ]

Duplicación de tablespaces de una PDB

RMAN permite duplicar no sólo la CBD sino que también puede hacerlo con una  o múltiples PDBs  utilizando el comando DUPLICATE. También puede duplicar un conjunto de tablespaces dentro de una PDB. Para esto debe estar conectado en el root de la CDB como un usuario que tenga  privilegios de SYSDBA o SYSBACKUP. De aquí en adelante podrá ver ejemplos de duplicación de de Pluggable Databases (PDBs).  La siguiente tabla muestra las opciones para duplicación de PDBs.
Opción de DUPLICATE
Explicación
PLUGGABLE DATABASE pdb_name
Duplica las PDBs especificadas en la CDB. Use una coma como delimitador para duplicar múltiples PDBs.
SKIP PLUGGABLE DATABASE pdb_name
Duplica todos las PDBs en la CDB, exceptuando las PDBs especificadas por pdb_name. Use una coma como delimitador para especificar múltiples PDBs que deben ser excluidas.
TABLESPACE pdb_name:tablespace_name
Duplica los tablespace especificados dentro de una PDB. El nombre del tablespace debe ser especificado con el nombre de la PDB que lo contiene como prefijo. Si usted omite el nombre de la PDB, el root es tomado como default.
SKIP TABLESPACE pdb_name:tablespace_name
Duplica todos los tablespaces en la CDB exceptuando aquellos especificados  en la PDB indicada.


En el siguiente ejemplo estamos trabajando inicialmente como base de datos origen con la CDB llamada “prmcdb”  que será duplicada en la CDB llamada “dupcdb” como en otras partes de esta serie de artículos. Antes de la duplicación, creamos nuevos tablespaces en las PDBS prmpdb01 y  prmpdb02. En la PDB prmpdb01 creamos los tablespaces  PDB01_TBS1 and PDB01_TBS2 y  en prmpdb02 los tablespaces PDB02_TBS1 and PDB02_TBS2.
[oracle@oel62-ora12c-prm ~]$ export ORACLE_SID=prmcdb
[oracle@oel62-ora12c-prm ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 12.1.0.1.0 Production on Mon Apr 14 11:17:19 2014
 
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
 
SQL> select con_id, tablespace_name from cdb_tablespaces order by  1,2;
 
  CON_ID TABLESPACE_NAME
-------- ------------------------------
       1 SYSAUX
       1 SYSTEM
       1 TEMP
       1 UNDOTBS1
       1 USERS
       2 SYSAUX
       2 SYSTEM
       2 TEMP
       3 SYSAUX
 
  CON_ID TABLESPACE_NAME
-------- ------------------------------
       3 SYSTEM
       3 TEMP
       3 USERS
       4 SYSAUX
       4 SYSTEM
       4 TEMP
       4 USERS
       5 SYSAUX
       5 SYSTEM
 
  CON_ID TABLESPACE_NAME
-------- ------------------------------
       5 TEMP
       5 USERS
 
20 rows selected.
 
SQL> select name from v$datafile;
 
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/prmcdb/system01.dbf
/u01/app/oracle/oradata/prmcdb/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/undotbs01.dbf
/u01/app/oracle/oradata/prmcdb/pdbseed/system01.dbf
/u01/app/oracle/oradata/prmcdb/users01.dbf
/u01/app/oracle/oradata/prmcdb/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb01/system01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb01/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb01/prmpdb01_users01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb02/system01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb02/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb02/prmpdb02_users01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb03/system01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb03/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb03/prmpdb03_users01.dbf
 
15 rows selected.
 
SQL> alter session set container=prmpdb01;
 
Session altered.
 
SQL> create tablespace PDB01_TBS1 datafile '/u01/app/oracle/oradata/prmcdb/prmpdb01/pdb01_tbs1.dbf' size 10M;
 
Tablespace created.
 
SQL> create tablespace PDB01_TBS2 datafile '/u01/app/oracle/oradata/prmcdb/prmpdb01/pdb01_tbs2.dbf' size 10M;
 
Tablespace created.
 
SQL> alter session set container=prmpdb02;
 
Session altered.
 
SQL> create tablespace PDB02_TBS1 datafile '/u01/app/oracle/oradata/prmcdb/prmpdb02/pdb02_tbs1.dbf' size 10M;
 
Tablespace created.
 
SQL> create tablespace PDB02_TBS2 datafile '/u01/app/oracle/oradata/prmcdb/prmpdb02/pdb02_tbs2.dbf' size 10M;
 
Tablespace created.
 
SQL> alter session set container=CDB$ROOT;
 
Session altered.
 
SQL> select con_id, tablespace_name from cdb_tablespaces order by  1,2;
 
    CON_ID TABLESPACE_NAME
---------- ------------------------------
       1 SYSAUX
       1 SYSTEM
       1 TEMP
       1 UNDOTBS1
       1 USERS
       2 SYSAUX
       2 SYSTEM
       2 TEMP
       3 PDB01_TBS1
       3 PDB01_TBS2
       3 SYSAUX
 
  CON_ID TABLESPACE_NAME
-------- ------------------------------
       3 SYSTEM
       3 TEMP
       3 USERS
       4 PDB02_TBS1
       4 PDB02_TBS2
       4 SYSAUX
       4 SYSTEM
       4 TEMP
       4 USERS
       5 SYSAUX
       5 SYSTEM
 
  CON_ID TABLESPACE_NAME
-------- ------------------------------
       5 TEMP
       5 USERS
 
24 rows selected.
 
SQL> select name from v$datafile;
 
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/prmcdb/system01.dbf
/u01/app/oracle/oradata/prmcdb/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/undotbs01.dbf
/u01/app/oracle/oradata/prmcdb/pdbseed/system01.dbf
/u01/app/oracle/oradata/prmcdb/users01.dbf
/u01/app/oracle/oradata/prmcdb/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb01/system01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb01/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb01/prmpdb01_users01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb02/system01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb02/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb02/prmpdb02_users01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb03/system01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb03/sysaux01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb03/prmpdb03_users01.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb01/pdb01_tbs1.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb01/pdb01_tbs2.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb02/pdb02_tbs1.dbf
/u01/app/oracle/oradata/prmcdb/prmpdb02/pdb02_tbs2.dbf
 
19 rows selected.

En este caso duplicamos el tablespace PDB01_TBS1 de la PDB prmpdb01 utilizando el comando duplicate de RMAN con las siguientes opciones:
Opción de duplicación
TABLESPACE - tablespace prmpdb01:pdb01_tbs1
Tipo de duplicación
Active Database Duplication
Método de duplicación
Pull-Based
Tipo de backup utilizado
BACKUPSETS   (default)
Número de “Target Channels”
1   (default)
Número de “Auxiliary Channels”
1  (default)

El comando duplicate de RMAN en este caso quedará de la siguiente manera:
duplicate database to dupcdb tablespace prmpdb01:pdb01_tbs1
  from active database 
  spfile 
    parameter_value_convert  ='prmcdb','dupcdb' 
   set db_file_name_convert  ='prmcdb','dupcdb'
   set log_file_name_convert ='prmcdb','dupcdb';

Descripción del código:

Como puede verse en el código, RMAN duplicará el tablespace pbd01_tbs1 del la PDB prmpdb01. RMAN duplicará solamente la PDB prmpdb01, excluyendo todos las otras PDBs  y duplicando solamente el tablespace especificado, ignorando todos los demásLos canales target y auxiliary  no son asignados de manera explícita en este código. RMAN asigna solamente un channel  default para target  y  otro para auxiliary   (ORA_ DISK_1 and ORA_AUX_DISK_1).  La cantidad de target y auxiliary channels  es la misma, esto significa que en este caso RMAN utilizara el método Pull-Based para la duplicación. También utilizamos para este caso los parámetros  parameter_value_convert  y  db{log}_file_name_convert en el comando duplicate. El uso de estos parámetros está explicado en la primera parte (parte 1) de esta serie de artículos.
En la salida podemos observar un procedimiento normal de duplicación  como siempre  fue  en versiones anteriores.

Veamos este código en acción:

No hay comentarios:

Publicar un comentario