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ás. Los 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:
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ás. Los 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