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.
Pingback: ALL options for creating a PDB using Create Puggable Database command – Bruno Santos da Silva