oracle

Olá a todos. No post anterior, vimos como migrar e atualizar uma base de dados do 11g para o 12c. Essa base migrada será do tipo “non-CDB”. Para concluír o procedimento, será necessário converter essa base “non-CDB” para a arquitetura Multitenant, permitindo que ela seja “plugada” em um CDB. Neste post mostrarei como fazer isso.

 

1. Considerações iniciais

Todas as bases pré-12c são chamadas de “non-CDB”

No 12c, caso uma base seja criada com o parâmetro ENABLE_PLUGGABLE_DATABASE = FALSE, essa base também é do tipo “non-CDB”.

Existem algumas maneiras de criar um PDB a partir de um “non-CDB”:

* Usando o pacote DBMS_PDB, que gera os metadados para a criação do PDB. Esse pacote geram um .xml contendo metadados sobre os datafiles do non-CDB. Neste post vamos usar esse pacote.

OBS1: A limitação dessa tecnica é que o non-CDB deve ser 12c ou superior. Para que bases de dados de versões anteriores possam ser convertidas para um PDB através dessa tecnica, essas bases devem ser atualizadas para o 12c.

* Datapump, usando a feature de Transportable Tablespaces

* Goldengate

 

2. Passos

2.1) Colocar a base non-CDB em read-only

SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN READ ONLY;

 

2.2) Gerar um XML contendo a estrutura da base non-CDB

BEGIN
DBMS_PDB.DESCRIBE(pdb_descr_file => '/path/destino/base_noncdb.xml');
END;

 

2.3) Desligar a base non-CDB

 

2.4) Setar as variáveis de ambiente da base CDB que hospedará a base non-CDB, e se conectar a ela

export ORACLE_SID=base_cdb

export ORACLE_HOME=<path_base_12c>

sqlplus / as sysdba

 

2.5) Checar se a base non-CDB é compatível com a base CDB que a hospedará

SET SERVEROUTPUT ON
DECLARE
hold_var boolean;
begin
-- fornecer o destino do xml criado no passo 2.2
hold_var := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file=> '/path/destino/base_noncdb.xml');
if hold_var then
dbms_output.put_line('YES');    --indica que não há problemas
else
dbms_output.put_line('NO');      -- indica problemas. checar a view pdb_plug_in_violations
end if;
end;
/

 

2.6) Criar o PDB a partir do XML criado no passo 2.2

CREATE PLUGGABLE DATABASE dkpdb
USING '/path/destino/base_noncdb.xml'
COPY
FILE_NAME_CONVERT = ('/u01/oradata/origem/','/u01/oradata/CDB/destino/');

 

2.7) Se conectar a PDB recem-criada e executar o seguinte script. Após a execução desse script, a nova base PDB deve ser aberta em READ-WRITE (tentar abri-la em READ-ONLY lançará um erro):

sqlplus sys/senha123@pdb

@?/rdbms/admin/noncdb_to_pdb.sql

 

2.8) Ao término desse procedimento, a base non-CDB ainda existirá, bem como existirá o PDB criado a partir dessa base de dados.

 

Com isso, a base “non-CDB” migrada do 11g para o 12c fará parte de um CDB como uma Pluggable Database.

Até a próxima, pessoal.