Clonar PDB no Mesmo CDB – Banco de Dados 12c

13 jun

Clonar PDB no Mesmo CDB – Banco de Dados 12c

Design sem nome (2)

Introdução

Esse tutorial tem objetivo de mostrar como se realiza um clone de um pluggable database (PDB) em um mesmo container (CDB). Tendo como benefício o provisionamento de um ambiente paralelo, de modo versátil, para testes de aplicação, simulações de funcionalidades, etc.
No Oracle 11g isso seria feito via RMAN DUPLICATE ou datapump, consegue ver o benefício para nós DBAS?

Pré-requisitos

  • Recursos de hardware disponíveis.
  • Banco de dados 12c instalado.
  • Container.
  • Um PDB para ser fonte do clone.

Comandos Extras:

Meu banco de dados é CDB ou non-CDB?
select name,cdb,con_dbid from v$database;
Qual nome do meu CDB?
SQL> show com_name
Quais PDB existem no meu CDB e qual open_mode?
SELECT name, open_mode FROM v$pdbs;
Como mudar minha sessão para PDB/CDB?
ALTER SESSION SET container = pdb1;
ALTER SESSION SET container = cdb$root;

Procedimentos

Variáveis:

  • ORACLE_HOME: /u01/app/oracle/12.2.0.1/db1
  • Porta listener: 1539
  • Container: CDB$ROOT
  • PDB: ORCLPDB

Preparando o PDB fonte para o clone

Setar variáveis de ambiente (Oracle HOME,BASE,SID)
. oraenv

Baixar pluggable database
sqlplus / as sysdba
SQL> alter pluggable database ORCLPDB close immediate;

Abrir em modo read only
SQL> alter pluggable database ORCLPDB open read only;

Criar diretório para clone
SQL> host
cd /u02
mkdir nome_pasta_pdb
exit

Configurando diretório para ser alvo na criação do Clone
sqlplus / as sysdba
SQL> alter system set db_create_file_dest='/u02/ nome_pasta_pdb';

Clonado PDB
sqlplus / as sysdba
SQL> create pluggable database CLONE_NAME from ORCLPDB;

Abrindo pluggable database
sqlplus / as sysdba
SQL> alter pluggable database ORCLPDB open;
SQL> alter pluggable database ORCLPDB save state;
-- Torna permanente o estágio do PDB.

Conectando no PDB clone
system/oracle@localhost:1539/CLONE_NAME;

Observe como fica o status do LISTENER
lsnrctl status

Como ficaria meu TNSnames para entrado do PDB?
CLONE_NAME =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db1-fs.localdomain)(PORT = 1539))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = CLONE_NAME)
)
)

Referências

http://www.oracle.com/technetwork/pt/articles/database-performance/database-multitenant-oracle12cr1-2555858-ptb.html

https://oracle-base.com/articles/12c/multitenant-connecting-to-cdb-and-pdb-12cr1

https://oracle-base.com/articles/12c/multitenant-clone-remote-pdb-or-non-cdb-12cr1