Oracle PDB - Unplug/Plug

Olá, nesse artigo iremos abordar o método de Unplug/Plug de um PDB.

Nesse cenário, irei desplugar 2 PDB's da instância CDBBIA e plugar na instância ORALAB. Ambos CDB's estão na versão 19C.

Vamos fazer o unplug utilizando o método de XML.

Na instância CDBBIA vamos criar um novo PDB chamado GUITARRA:

create pluggable database GUITARRA ADMIN USER pdb_admin IDENTIFIED BY oracle;

Vamos abrir o PDB para garantir que tudo está correto:

alter pluggable database GUITARRA open;

Bom, para efetuarmos o unplug, precisamos fechar o PDB:

alter pluggable database GUITARRA close immediate;

Neste momento faremos o unplug do PDB para o arquivo XML:

alter pluggable database GUITARRA unplug into '/u01/pdb_GUITARRA_unplug.xml';

Neste momento, podemos eliminar o PDB (GUITARRA) com a cláusula KEEP DATAFILES:

drop pluggable database GUITARRA keep datafiles;

Agora, vamos conectar na instância ORALAB fazer o plug do PDB.

Existem duas maneiras de plugarmos um PDB, e podemos usar uma das seguintes cláusulas (COPY ou NOCOPY), onde a cláusula COPY fará a cópia do datafile para o local destinado no:

Estou utilizando +ASM com gerenciamento via OMF.

No exemplo a seguir, iremos utilizar a cláusula COPY:

create pluggable database GUITARRA using '/u01/pdb_GUITARRA_unplug.xml' COPY;
Pluggable database created.

Vamos abrir o PDB para garantirmos que tudo está ok!

alter pluggable database GUITARRA open;
Pluggable database altered.
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TESTE                          READ WRITE NO
         4 GUITARRA                       READ WRITE NO

Agora, vamos fazer um exemplo com a cláusula NOCOPY e avaliar o comportamento de ambos:

Refiz os steps iniciais porém com o nome do PDB de AMPLIFICADOR.

Instância CDBBIA:

create pluggable database AMPLIFICADOR ADMIN USER pdb_admin IDENTIFIED BY oracle;
alter pluggable database AMPLIFICADOR open;
 alter pluggable database AMPLIFICADOR close immediate;
alter pluggable database AMPLIFICADOR unplug into '/u01/pdb_AMPLIFICADOR_unplug.xml';
drop pluggable database AMPLIFICADOR keep datafiles;

Irei fazer o Plug do PDB AMPLIFICADOR com a cláusula NOCOPY no CDB ORALAB:

create pluggable database AMPLIFICADOR using '/u01/pdb_AMPLIFICADOR_unplug.xml' NOCOPY;
Pluggable database created.

Agora vamos abrir para garantir que tudo esteja bem!

alter pluggable database AMPLIFICADOR open;
Pluggable database created.

Agora vamos observar na prática como ficam os datafiles com as cláusulas COPY e NOCOPY e para isso, vamos acessar o rman e executar o seguinte comando:

rman target /
report schema

Reparem que quando usamos a cláusule NOCOPY (AMPLIFICADOR), o caminho dos datafiles permaneceram os mesmos do CDB anterior, o que não ocorreu com a cláusula COPY (GUITARRA)

Observações:

A cláusula NOCOPY obviamente evita a necessidade de fazer a transferência dos datafiles de um local para outro, ganhando tempo em ambientes grandes.

Já com a cláusula COPY, fará com que a sua consolidação seja mais efetiva, uma vez que ficará abaixo de toda a estrutura de diretório do ambiente destino.

Então a escolha sobre qual método usar, irá depender do seu objetivo.

Antes de fazer o procedimento, tenha certeza que a versão dos bancos (CDB's) e dos patches estejam equalizados.

Caso você queira aumentar as chances de sucesso, é possível utilizar a package (DBMS_PDB.CHECK_PLUG_COMPATIBILITY) passando o caminho do XML e o nome PDB:

check_plug_compatibility.sql
SET SERVEROUTPUT ON
DECLARE
  l_result BOOLEAN;
BEGIN
  l_result := DBMS_PDB.check_plug_compatibility(
                pdb_descr_file => '/u01/pdb_AMPLIFICADOR_unplug.xml',
                pdb_name       => 'AMPLIFICADOR');
  IF l_result THEN
    DBMS_OUTPUT.PUT_LINE('compatible');
  ELSE
    DBMS_OUTPUT.PUT_LINE('incompatible');
  END IF;
END;
/

Resultado esperado:

compatible

PL/SQL procedure successfully completed.

Também vale ressaltar, que pode ser adicionado a cláusula TEMPFILE REUSE, para que não haja necessidade de se fazer a cópia do seu tempfile:

create pluggable database AMPLIFICADOR using '/u01/pdb_AMPLIFICADOR_unplug.xml' NOCOPY TEMPFILE REUSE;

Por hoje é só, e espero ter ajudado!

Abraços.

Oracle PDB - Unplug/Plug

— Autor: Fernando Rocha 12/12/2023 18H:16