Oracle 12c - Multitenant Container e Pluggable Database - Clonando PDB a partir de um PDB existente

Fala pessoal, tudo bem?

No artigo de hoje quero demonstrar como podemos clonar um Pluggable Database (PDB) a partir de um PDB já existente em nosso container.



Bom, vamos lá. Conectamos em nosso Oracle 12c e subimos o banco:

SQL*Plus: Release 12.1.0.2.0 Production on Sun Sep 10 14:27:44 2017

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

SQL> conn / as sysdba
Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  754974720 bytes
Fixed Size                  2928968 bytes
Variable Size             524291768 bytes
Database Buffers          222298112 bytes
Redo Buffers                5455872 bytes
Database mounted.
Database opened.

Verificamos nossos containers disponíveis e que já foram criados:

SQL> SELECT CON_ID, NAME FROM V$CONTAINERS;

CON_ID NAME
---------- ------------------------------
1 CDB$ROOT
2 PDB$SEED
3 PDB01
4 PDB02

Vamos ver mais detalhes do nosso PDB01 que já existe. Repare que nosso banco está aberto para leitura/escrita(READ WRITE):

SQL> SELECT A.CON_ID, A.NAME, B.STATUS, A.OPEN_MODE, A.TOTAL_SIZE
FROM V$PDBS A, DBA_PDBS B
WHERE A.CON_ID = B.PDB_ID; 

CON_ID NAME                           STATUS    OPEN_MODE  TOTAL_SIZE
---------- ------------------------------ --------- ---------- ----------
2 PDB$SEED                       NORMAL    READ ONLY   796917760
3 PDB01                          NORMAL    READ WRITE 2158755840
4 PDB02                          NORMAL    MOUNTED             0

Como estamos conectados em nosso CDB(Root) vamos ver a localização dos datafiles:

SQL> select file_id,file_name from dba_data_files;

FILE_ID FILE_NAME
---------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 /u01/oradata/CDB01/system01.dbf
3 /u01/oradata/CDB01/sysaux01.dbf
4 /u01/oradata/CDB01/undotbs01.dbf
6 /u01/oradata/CDB01/users01.dbf
12 /u01/oradata/CDB01/cdb_users01.dbf

Agora vamos nos conectar no PDB01 e verificar a localização dos datafiles:

SQL> alter session set container = PDB01;

Session altered.

SQL> select file_id,file_name from dba_data_files;

FILE_ID FILE_NAME
---------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
8 /u01/oradata/CDB01/PDB01/system01.dbf
9 /u01/oradata/CDB01/PDB01/sysaux01.dbf
10 /u01/oradata/CDB01/PDB01/SAMPLE_SCHEMA_users01.dbf
11 /u01/oradata/CDB01/PDB01/example01.dbf
13 /u01/oradata/CDB01/PDB01/tbs_pdb_users.dbf

Tudo certo. Agora que sabemos a localização dos datafiles do CDB e do PDB, vamos voltar ao CDB e clonar nosso PDB.
Vamos então criar o PDB03 a partir do PDB01, como vemos abaixo:

SQL> alter session set container = CDB$ROOT;

Session altered.

SQL> create pluggable database PDB03 from PDB01
file_name_convert = ('/u01/oradata/CDB01/PDB01/','/u01/oradata/CDB01/PDB03/')
path_prefix = '/u01/oradata/CDB01/PDB03';  

Pluggable database created.

Legal, PDB03 criado!
Vamos conferir. Repare que o PDB03 está com status NEW e ainda montado:

SQL> SELECT A.CON_ID, A.NAME, B.STATUS, A.OPEN_MODE, A.TOTAL_SIZE
FROM V$PDBS A, DBA_PDBS B
WHERE A.CON_ID = B.PDB_ID;

CON_ID NAME                           STATUS    OPEN_MODE  TOTAL_SIZE
---------- ------------------------------ --------- ---------- ----------
2 PDB$SEED                       NORMAL    READ ONLY   796917760
3 PDB01                          NORMAL    READ WRITE 2158755840
4 PDB02                          NORMAL    MOUNTED             0
5 PDB03                          NEW       MOUNTED             0

SQL>

Vamos abrir nosso PDB03 para leitura/escrita e conferir na sequência:

SQL> alter pluggable database PDB03 open;

Pluggable database altered.

SQL> SELECT A.CON_ID, A.NAME, B.STATUS, A.OPEN_MODE, A.TOTAL_SIZE
FROM V$PDBS A, DBA_PDBS B
WHERE A.CON_ID = B.PDB_ID;  

CON_ID NAME                           STATUS    OPEN_MODE  TOTAL_SIZE
---------- ------------------------------ --------- ---------- ----------
2 PDB$SEED                       NORMAL    READ ONLY   796917760
3 PDB01                          NORMAL    READ WRITE 2158755840
4 PDB02                          NORMAL    MOUNTED             0
5 PDB03                          NORMAL    READ WRITE 2158755840

SQL>

É isso ai pessoal.
Sucesso!

Ronaldo.

Nenhum comentário:

Postar um comentário