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>
Nenhum comentário:
Postar um comentário