domingo, 24 de dezembro de 2017

Clonando PDB Remotos

Como nova da Oracle de Multitenant o Clone de banco de dados é uma feature muito interessante da Oracle que faz parte do pacote de Fast Provisiong, básicamente o clone tem uma origem e um destigo, sendo que a origem pode ser um PDB de um CDB Local, um PDB de um CDB Remoto ou um Non-CDB.

Basicamente na versão 12.1 existe 2 formas de provisionar copiar o PDB a partir de outro PDB ou plugar um PDB, neste post irei provisionar um PDB copiando os arquivos de um PDB remote, ou como a Oracle denomina um clone remoto:



Ambiente


Atributo Origem Destino
Hostname ol6-ora121-rac1 ol6-ora121-rac1
CDB CDBRJ CDBSP
PDB PDB_RIO PDB_RIO_COPY
File Location +DATA +DATA
Service PDB_RIO PDB_RIO_COPY
DB Link clone_pdb_rio

Ambos os CDB residem no mesmo servidor e estão registrados no mesmo listener, portanto obrigatóriamente é preciso tratar o nome do serviço, no caso irei renomear o PDB de PDB_RIO para PDB_RIO_COPY assim o servico criado não será o mesmo da origem.

Pre-requisitos


Básicamente todos os clones de PDBs devem seguir estes pré-requisitos;

  • O CDB deve estar aberto e em read/write;
  • Deve se estar conectado no CDB$ROOT com usuário comum com privilegio de CREATE PLUGGABLE DATABASE;
  • O Nome do PDB deve ser unico em todos os CDBs do mesmo servidor;
  • Compatibilidade de Character set do CDB de Origem com o Destino;
  • Tablespaces de usuarios comuns devem existentes na Origem também devem existir no destino
  • Ambos ambientes devem possuir o mesmo endian

Clonando um PDB Remoto


Para se clonar um PDB Remoto devemos seguir os seguintes passos abaixo, o CDB de destino irá se conectar no PDB de origem e irá copiar os arquivos para o destino.

  • O PDB Remoto deve estar em um estado transacional consistente e em read only.
  • Criar um dblink entre a origem, pode ser o PDB ou CDB, e o CDB de destino
  • Utilizar o comando "create pluggable database from"
  • Abrir o PDB


Exemplo


Origem

Na origem devemos fechar o pdb de forma consistente, deixa-lo me read only e criar um usuário que será utilizado pelo dblink remoto para clonar a base de dados.



SQL> show con_name;



CON_NAME

------------------------------

CDB$ROOT

SQL> 


SQL> select con_id, name, open_mode from v$containers where name='PDB_RIO';

    CON_ID NAME   OPEN_MODE
---------- ------------------------------ ----------
3 PDB_RIO   READ WRITE

SQL>

SQL> alter session set container=PDB_RIO;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
PDB_RIO
SQL> 


SQL> alter session set container=PDB_RIO;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
PDB_RIO
SQL> CREATE USER clone_user IDENTIFIED BY oracle;

User created.

SQL> GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE TO clone_user;

Grant succeeded.

SQL> shutdown immediate;

Pluggable Database closed.

SQL> alter database open read only;

Database altered.

SQL> 


Destino

No CDB que deverá receber o clone do PDB remoto devemos criar o DBLink apontando para a Origem, e por conta do parametro db_create_file_dest os arquivos do PDB serão criados pelo OMF, sem a necessidade de utilizar clausula de conversão.


TNS a Ser configurada

TNS_PDB_RIO =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ol6-ora121-rac1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = PDB_RIO)))



SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
CDBSP1

SQL> 

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> 

SQL> CREATE DATABASE LINK link_pdb_rio CONNECT TO pdb_clone IDENTIFIED BY oracle USING 'TNS_PDB_RIO';

Database link created.

SQL> show parameter create_file

NAME      TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest      string +DATA

SQL> select CON_ID, NAME, OPEN_MODE from v$containers;

    CON_ID NAME   OPEN_MODE
---------- ------------------------------ ----------
1 CDB$ROOT   READ WRITE
2 PDB$SEED   READ ONLY

SQL> 

SQL> CREATE PLUGGABLE DATABASE pdb_rio_copy FROM pdb_rio@link_pdb_rio;

Pluggable database created.

SQL> alter pluggable database pdb_rio_copy open;

Pluggable database altered.

SQL> select CON_ID, NAME, OPEN_MODE from v$containers;

    CON_ID NAME   OPEN_MODE
---------- ------------------------------ ----------
1 CDB$ROOT   READ WRITE
2 PDB$SEED   READ ONLY
3 PDB_RIO_COPY   READ WRITE

SQL> 



Referencia



Nenhum comentário: