Creating a new PDB by Plugging in an Unplugged PDB (with COPY clause)

A cláusula COPY, como padrão no processo de PLUG IN, realiza uma cópia dos arquivos referenciados no XML para um novo local, e para isso, podemos utilizar o FILE_NAME_CONVERT (caso o OMF não esteja sendo usado), ou utilizado o valor do DB_CREATE_FILE_DEST para fazer este “De-Para”.

Checando ambiente relacionado ao PDB HIPOFISE3:

[oracle@oel8 ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 18.0.0.0.0 - Production on Thu Mar 18 19:23:38 2021
Version 18.3.0.0.0
 
Copyright (c) 1982, 2018, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
 
SQL> SELECT NAME FROM V$PDBS;
 
NAME
--------------------------------------------------------------------------------
PDB$SEED
HIPOFISE1
HIPOFISE3
 
SQL> ALTER PLUGGABLE DATABASE HIPOFISE3 CLOSE IMMEDIATE;
 
Pluggable database altered.
 
SQL> set linesize 100
SQL> col name format a100
SQL> SELECT NAME FROM V$DATAFILE WHERE CON_ID = (SELECT CON_ID FROM V$PDBS WHERE NAME='HIPOFISE3');
 
NAME
----------------------------------------------------------------------------------------------------
/oracle/dados/TALAMO/BD02D62DBD0C163FE0536B00A8C0EF43/datafile/o1_mf_system_j4cpg63g_.dbf
/oracle/dados/TALAMO/BD02D62DBD0C163FE0536B00A8C0EF43/datafile/o1_mf_sysaux_j4cpg640_.dbf
/oracle/dados/TALAMO/BD02D62DBD0C163FE0536B00A8C0EF43/datafile/o1_mf_undotbs1_j4cpg640_.dbf
/oracle/dados/TALAMO/BD02D62DBD0C163FE0536B00A8C0EF43/datafile/o1_mf_users_j4cpgr31_.dbf
 
SQL> SELECT GUID FROM V$PDBS WHERE NAME='HIPOFISE3';
 
GUID
--------------------------------
BD02D62DBD0C163FE0536B00A8C0EF43

Fazendo o UNPLUG:

SQL> ALTER PLUGGABLE DATABASE HIPOFISE3 UNPLUG INTO '/home/oracle/BSS.xml';
 
Pluggable database altered.

Criando um diretório que abrigará os novos datafiles copiados:

[oracle@oel8 TALAMO]$ pwd
/oracle/dados/TALAMO
[oracle@oel8 TALAMO]$ mkdir HIPOFISE2
[oracle@oel8 TALAMO]$ chmod 775 HIPOFISE2/

Dropando o PDB de origem. mantendo seus datafiles:

SQL> DROP PLUGGABLE DATABASE HIPOFISE3 KEEP DATAFILES;
 
Pluggable database dropped.

Checando compatibilidade do novo PDB no CDB (apesar de que vamos realizar o PLUG IN no mesmo CDB de origem):

SQL> set serveroutput on
DECLARE
        compatible BOOLEAN := FALSE;
BEGIN
        compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY( PDB_DESCR_FILE => '/home/oracle/BSS.xml');
        if compatible then
                DBMS_OUTPUT.PUT_LINE('It is compatible');
        else
        DBMS_OUTPUT.PUT_LINE('It is NOT compatible');
        end if;
END;
/SQL>   2    3    4    5    6    7    8    9   10   11
It is compatible
 
PL/SQL procedure successfully completed.

Ao tentar criar o PDB, como o recurso de OMF está habilitado, o Oracle reporta a seguinte mensagem. Para resolver, segui o Oracle Note “ORA-01276 Errors Reported in PDB (Doc ID 1912436.1)“, que reporta que não é possível utilizar o FILE_NAME_CONVERT caso o OMF seja usado.

SQL> CREATE PLUGGABLE DATABASE HIPOFISE2 USING '/home/oracle/BSS.xml' COPY FILE_NAME_CONVERT=('/oracle/dados/TALAMO/BD02D62DBD0C163FE0536B00A8C0EF43', '/oracle/dados/TALAMO/HIPOFISE2');
CREATE PLUGGABLE DATABASE HIPOFISE2 USING '/home/oracle/BSS.xml' COPY FILE_NAME_CONVERT=('/oracle/dados/TALAMO/BD02D62DBD0C163FE0536B00A8C0EF43', '/oracle/dados/TALAMO/HIPOFISE2')
*
ERROR at line 1:
ORA-01276: Cannot add file
/oracle/dados/TALAMO/HIPOFISE2/datafile/o1_mf_system_j4cpg63g_.dbf.  File has
an Oracle Managed Files file name.

Como o OMF fará o trabalho por nós, omiti o convert do comando:

SQL> SHO PARAMETER db_create_file_dest
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      /oracle/dados
SQL> CREATE PLUGGABLE DATABASE HIPOFISE2 USING '/home/oracle/BSS.xml' COPY;
 
Pluggable database created.

Notamos que o GUID foi preservado, e desse modo, o diretório que abrigam os datafiles seguiram o mesmo padrão:

SQL> SELECT GUID FROM V$PDBS WHERE NAME='HIPOFISE2';
 
GUID
--------------------------------
BD02D62DBD0C163FE0536B00A8C0EF43
 
SQL> !ls -lthr /oracle/dados/TALAMO/BD02D62DBD0C163FE0536B00A8C0EF43
total 4.0K
drwxr-x---. 2 oracle oinstall 4.0K Mar 18 19:45 datafile

Abrindo o PDB e removendo o arquivo XML:

SQL> ALTER PLUGGABLE DATABASE HIPOFISE2 OPEN;
 
Pluggable database altered.
 
SQL> ! rm /home/oracle/BSS.xml

Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laboratório pessoal para fins de aprendizado.

1 thought on “Creating a new PDB by Plugging in an Unplugged PDB (with COPY clause)”

  1. Pingback: ALL options for creating a PDB using Create Puggable Database command – Bruno Santos da Silva

Leave a Comment

Your email address will not be published.