segunda-feira, 17 de outubro de 2016

Oracle 12c - Conversão de banco NON-PDB para PDB (lentidão)

A conversão de um banco de dados non-PDB para PDB, leva cerca de 20 minutos, segundo documentação da Oracle.

Mas, em uma das minhas experiências o tempo de conversão do banco de dados levou mais de 3 horas.

Pesquisando na internet sobre esse tipo de problema, encontrei 2 blogs que ajudaram a esclarecer as dúvidas e demonstram os testes feitos para chegar na solução abaixo.

O links desses sites (blogs) são:

https://ilmarkerm.eu/blog/2016/07/experiences-with-moving-to-multitenant-in-12-1-0-2/ (NONCDB_TO_PDB.SQL TAKES A REALLY LONG TIME TO EXECUTE)

https://bdrouvot.wordpress.com/2014/10/17/watch-out-for-optimizer_adaptive_features-as-it-may-have-a-huge-negative-impact/

A solução para deixarmos essa conversão mais rápida é acrescentarmos o parâmetro "alter session set optimizer_adaptive_features=false;" no script de conversão noncdb_to_pdb.sql, localizado em $ORACLE_HOME/rdbms/admin.

Sendo assim, podemos:

Editar o arquivo noncdb_to_pdb.sql e adicionar:

         alter session set optimizer_adaptive_features=false;

Logo abaixo da linha:

        exec dbms_pdb.noncdb_to_pdb(1);


Como não é recomendável alterar os arquivos do fornecedor, podemos optar por fazer a mesma alteração de parâmetro apenas passando para nossa sessão a informação com a configuração desejada, como segue abaixo:

Conectar no banco de dados PDB:

       SQL> alter session set container=nome_do_pdb;
Configurar o parâmetro para a sessão ativa:

       SQL> alter session set optimizer_adaptive_features=false;

Executar o script de conversão:

       SQL> $ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

O ganho estimado no tempo final de execução é de pelo menos 20%.