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.
Links úteis
Vamos fazer o unplug utilizando o método de XML.
- Existe o método unplug archive log, que é bem similar a este, mas a escolha entre os métodos pode variar de acordo com sua necessidade e ambiente.
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';
- Note que o local em que o arquivo será gerado, deve ser um local acessível em seu servidor.
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:
- db_create_file_dest
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