{"id":2801,"date":"2021-03-18T19:57:26","date_gmt":"2021-03-18T19:57:26","guid":{"rendered":"https:\/\/swiv.com.br\/creating-a-new-pdb-by-plugging-in-an-unplugged-pdb\/"},"modified":"2026-05-27T20:02:50","modified_gmt":"2026-05-27T19:02:50","slug":"creating-a-new-pdb-by-plugging-in-an-unplugged-pdb","status":"publish","type":"post","link":"https:\/\/swiv.com.br\/index.php\/2021\/03\/18\/creating-a-new-pdb-by-plugging-in-an-unplugged-pdb\/","title":{"rendered":"Creating a new PDB by Plugging in an Unplugged PDB (with NOCOPY clause)"},"content":{"rendered":"\n<p>Outra maneira de se criar PDBs \u00e9 usando os recursos de PLUG\/UNPLUG. Neste artigo vou explorar um pouco sobre esse m\u00e9todo.<\/p>\n\n\n\n<p>Irei utilizar um PDB j\u00e1 existente em meu laborat\u00f3rio, chamado HIPOFISE2. Checando os seus arquivos de dados:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;oracle@oel8 ~]$ sqlplus \/ as sysdba\n \nSQL*Plus: Release 18.0.0.0.0 - Production on Thu Mar 18 04:32:44 2021\nVersion 18.3.0.0.0\n \nCopyright (c) 1982, 2018, Oracle.  All rights reserved.\n \n \nConnected to:\nOracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production\nVersion 18.3.0.0.0\n \nSQL&gt; set linesize 100\nSQL&gt; col name format a100\nSQL&gt; SELECT NAME FROM V$DATAFILE WHERE CON_ID = (SELECT CON_ID FROM V$PDBS WHERE NAME=&#039;HIPOFISE2&#039;);\n \nNAME\n----------------------------------------------------------------------------------------------------\n\/oracle\/dados\/TALAMO\/BD02D62DBD0C163FE0536B00A8C0EF43\/datafile\/o1_mf_system_j4cpg63g_.dbf\n\/oracle\/dados\/TALAMO\/BD02D62DBD0C163FE0536B00A8C0EF43\/datafile\/o1_mf_sysaux_j4cpg640_.dbf\n\/oracle\/dados\/TALAMO\/BD02D62DBD0C163FE0536B00A8C0EF43\/datafile\/o1_mf_undotbs1_j4cpg640_.dbf\n\/oracle\/dados\/TALAMO\/BD02D62DBD0C163FE0536B00A8C0EF43\/datafile\/o1_mf_users_j4cpgr31_.dbf\n<\/pre><\/div>\n\n\n<p>Verificando seu identificador \u00fanico, chamado de GUID:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; SELECT GUID FROM V$PDBS WHERE NAME=&#039;HIPOFISE2&#039;;\n \nGUID\n--------------------------------\nBD02D62DBD0C163FE0536B00A8C0EF43\n<\/pre><\/div>\n\n\n<p>Baixando o banco de origem (ou seja, essa opera\u00e7\u00e3o possui downtime, pois precisamos garantir que os datafiles estejam \u00edntegros, basicamente com o mesmo SCN):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; ALTER PLUGGABLE DATABASE HIPOFISE2 CLOSE IMMEDIATE;\n \nPluggable database altered.\n<\/pre><\/div>\n\n\n<p>Quando realizamos o UNPLUG do PDB, realizamos a cria\u00e7\u00e3o de um arquivo XML que possui v\u00e1rias informa\u00e7\u00f5es b\u00e1sicas sobre o banco, para que seja aproveitado no processo de PLUG posteriormente:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; ALTER PLUGGABLE DATABASE HIPOFISE2 UNPLUG INTO &#039;\/home\/oracle\/HIPOFISE2.xml&#039;;\n \nPluggable database altered.\n<\/pre><\/div>\n\n\n<p>Verificando parte do conte\u00fado do XML:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; !cat \/home\/oracle\/HIPOFISE2.xml\n&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&amp;lt;PDB&gt;\n  &amp;lt;xmlversion&gt;1&amp;lt;\/xmlversion&gt;\n  &amp;lt;pdbname&gt;HIPOFISE2&amp;lt;\/pdbname&gt;\n  &amp;lt;cid&gt;4&amp;lt;\/cid&gt;\n  &amp;lt;byteorder&gt;1&amp;lt;\/byteorder&gt;\n  &amp;lt;vsn&gt;301989888&amp;lt;\/vsn&gt;\n  &amp;lt;vsns&gt;\n    &amp;lt;vsnnum&gt;18.0.0.0.0&amp;lt;\/vsnnum&gt;\n    &amp;lt;cdbcompt&gt;18.0.0.0.0&amp;lt;\/cdbcompt&gt;\n    &amp;lt;pdbcompt&gt;18.0.0.0.0&amp;lt;\/pdbcompt&gt;\n    &amp;lt;vsnlibnum&gt;0.0.0.0.24&amp;lt;\/vsnlibnum&gt;\n    &amp;lt;vsnsql&gt;24&amp;lt;\/vsnsql&gt;\n    &amp;lt;vsnbsv&gt;8.0.0.0.0&amp;lt;\/vsnbsv&gt;\n  &amp;lt;\/vsns&gt;\n  &amp;lt;dbid&gt;3888186776&amp;lt;\/dbid&gt;\n \n...\n \n&amp;lt;loadprofile&gt;user calls=4.087375&amp;lt;\/loadprofile&gt;\n      &amp;lt;loadprofile&gt;user commits=0.905013&amp;lt;\/loadprofile&gt;\n      &amp;lt;loadprofile&gt;user logons cumulative=0.001258&amp;lt;\/loadprofile&gt;\n      &amp;lt;loadprofile&gt;user rollbacks=0.016129&amp;lt;\/loadprofile&gt;\n    &amp;lt;\/awr&gt;\n    &amp;lt;hardvsnchk&gt;0&amp;lt;\/hardvsnchk&gt;\n    &amp;lt;localundo&gt;1&amp;lt;\/localundo&gt;\n    &amp;lt;apps\/&gt;\n    &amp;lt;dbedition&gt;8&amp;lt;\/dbedition&gt;\n  &amp;lt;\/optional&gt;\n&amp;lt;\/PDB&gt;\n \nSQL&gt;\n<\/pre><\/div>\n\n\n<p>Apesar do UNPLUG tenha sido realizado, o PDB ainda faz parte do cat\u00e1logo do CDB$ROOT:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; SELECT PDB_NAME, STATUS FROM CDB_PDBS WHERE PDB_NAME IN (&#039;HIPOFISE2&#039;);\n \nPDB_NAME\n----------------------------------------------------------------------------------------------------\nSTATUS\n----------\nHIPOFISE2\nUNPLUGGED\n<\/pre><\/div>\n\n\n<p>Apenas dropando o PDB \u00e9 que temos o seu v\u00ednculo encerrado no CDB. Neste caso, apesar de remover o banco, vamos manter os seus datafiles com o par\u00e2metro abaixo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; DROP PLUGGABLE DATABASE HIPOFISE2 KEEP DATAFILES;\n \nPluggable database dropped.\n<\/pre><\/div>\n\n\n<p>Consultando novamente e confirmando que o HIPOFISE2 n\u00e3o faz mais parte do ambiente:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; SELECT PDB_NAME, STATUS FROM CDB_PDBS WHERE PDB_NAME IN (&#039;HIPOFISE2&#039;);\n \nno rows selected\n<\/pre><\/div>\n\n\n<p>Neste lab, vou plugar o PDB no mesmo CDB, mas em cen\u00e1rios reais, a inten\u00e7\u00e3o \u00e9 realizar este tipo de movimenta\u00e7\u00e3o entre CDBs diferentes. Desse modo, h\u00e1 um procedimento para que consigamos checar se o novo PDB ser\u00e1 compat\u00edvel com o CDB de destino. Podemos realizar isso atrav\u00e9s do objeto DBMS_PDB.CHECK_PLUG_COMPATIBILITY. Em caso de erros, podemos ver as mensagens em mais detalhes na view PDB_PLUG_IN_VIOLATIONS. Essa atividade realiza a leitura do arquivo XML que criamos anteriormente:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; set serveroutput on\nDECLARE\n        compatible BOOLEAN := FALSE;\nBEGIN\n        compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY( PDB_DESCR_FILE =&gt; &#039;\/home\/oracle\/HIPOFISE2.xml&#039;);\n        if compatible then\n                DBMS_OUTPUT.PUT_LINE(&#039;It is compatible&#039;);\n        else\n        DBMS_OUTPUT.PUT_LINE(&#039;It is NOT compatible&#039;);\n        end if;\nEND;\n\/SQL&gt;   2    3    4    5    6    7    8    9   10   11\nIt is compatible\n \nPL\/SQL procedure successfully completed.\n<\/pre><\/div>\n\n\n<p>Agora podemos criar o novo PDB com o recurso de PLUG IN. Como o diret\u00f3rio onde os datafiles \u00e9 exatamente o mesmo que o da origem, e queremos usar estes mesmos arquivos, utilizamos o par\u00e2metro NOCOPY:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; CREATE PLUGGABLE DATABASE HIPOFISE3 USING &#039;\/home\/oracle\/HIPOFISE2.xml&#039; NOCOPY TEMPFILE REUSE;\n \nPluggable database created.\n<\/pre><\/div>\n\n\n<p>Checando o status do novo PDB e o abrindo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; col pdb_name format a15\nSQL&gt; SELECT PDB_NAME, STATUS FROM CDB_PDBS WHERE PDB_NAME=&#039;HIPOFISE3&#039;;\n \nPDB_NAME        STATUS\n--------------- ----------\nHIPOFISE3       NEW\n \nSQL&gt; SELECT OPEN_MODE FROM V$PDBS WHERE NAME=&#039;HIPOFISE3&#039;;\n \nOPEN_MODE\n----------\nMOUNTED\n \nSQL&gt; ALTER PLUGGABLE DATABASE HIPOFISE3 OPEN;\n \nPluggable database altered.\n<\/pre><\/div>\n\n\n<p>Realizando teste de conex\u00e3o:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; connect sys\/oracle@oel8.localdomain:1521\/HIPOFISE3.localdomain as SYSDBA\nConnected.\nSQL&gt; SHOW CON_NAME CON_ID;\n \nCON_NAME\n------------------------------\nHIPOFISE3\n \nCON_ID\n------------------------------\n4\n<\/pre><\/div>\n\n\n<p>Validando que o identificador GUID \u00e9 o mesmo do PDB de origem:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; SELECT GUID FROM V$PDBS WHERE NAME=&#039;HIPOFISE3&#039;;\n \nGUID\n--------------------------------\nBD02D62DBD0C163FE0536B00A8C0EF43\n<\/pre><\/div>\n\n\n<p>Por fim, removendo arquivo XML que n\u00e3o ser\u00e1 mais utilizado:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \\&quot;wp-block-syntaxhighlighter-code\\&quot;\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nSQL&gt; !rm \/home\/oracle\/HIPOFISE2.xml\n<\/pre><\/div>\n\n\n<p>Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laborat\u00f3rio pessoal para fins de aprendizado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Outra maneira de se criar PDBs \u00e9 usando os recursos de PLUG\/UNPLUG. Neste artigo vou explorar um pouco sobre esse m\u00e9todo. Irei utilizar um PDB j\u00e1 existente em meu laborat\u00f3rio, chamado HIPOFISE2. Checando os seus arquivos de dados: Verificando seu identificador \u00fanico, chamado de GUID: Baixando o banco de origem (ou seja, essa opera\u00e7\u00e3o possui [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-2801","post","type-post","status-publish","format-standard","hentry","category-multitenant"],"_links":{"self":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=2801"}],"version-history":[{"count":1,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2801\/revisions"}],"predecessor-version":[{"id":9220,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2801\/revisions\/9220"}],"wp:attachment":[{"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=2801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=2801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swiv.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=2801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}