Já a alguns anos a Oracle disponibilizou em seu banco de dados o conceito de banco de dados plugável (PDB). Em linhas gerais, um banco de dados com esse conceito é como se fosse um “super banco de dados” que permite que você anexe a ele banco de dados “virtuais”, com tablespaces e recursos de administração específicos, como se tivéssemos vários bancos de dados em um só.

Esse recurso é muito interessante primeiro por conta da portabilidade desses bancos, que podem ser manejados entre vários CDB (Container Database – Banco de dados que contém os PDB Pluggable Database), bem como permite o gerenciamento independente dessas estruturas sem necessidade de hardwares ou instâncias separadas.

Aqui vamos abordar o passo a passo para a criação e devida ativação de um PDB no Oracle Cloud. Os passos aqui descritos foram aplicados em um banco de dados Oracle 18c Standard Edition, porém os mesmos passos se aplicam para ao Oracle a partir da versão 12.2, lembrando que a versão Standard só aceita no máximo 3 bancos plugáveis, enquanto a Enterprise, 252 PDBs.

Para podermos iniciar é importante que se tenha acesso ao banco de dados com um usuário com direitos de SYSDBA ou SYSOPER.

O primeiro passo, estando conectado no servidor de banco de dados por uma conexão ssh é passar sua conexão para o usuário oracle do Linux.

$ sudo su oracle

Uma vez conectado podemos acessar o sqlplus com o usuário sys, por exemplo.

$ sqlplus / as sysdba

Para verificarmos os PDB existentes podemos usar o comando show pdbs, que irá listar os bancos criados.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB_01                         READ WRITE NO
         4 PDB_02                         READ WRITE NO
         5 PDB_03                         READ WRITE NO

Para se acessar o CDB basta usar o comando abaixo:

SQL> alter session set container=cdb$root;

Para se acessar qualquer PDB, usamos o comando:

SQL> alter session set container=<NOME DO PDB>;

Antes de prosseguirmos é importante entendermos a estrutura de tablespaces em um banco de dados container:

  • O CDB terá o tablespace de undo, que atenderá todos os PDB. Não haverá tablespace de undo no PDB.
  • O CDB terá um tablespace temporário, porém os PDB poderão ter sua própria estrutura temporária, ou usar diretamente a do CDB (Essa definição irá depender do tamanho da aplicação e das bases de dados e deverá ser dimensionada pelo DBA);
  • Os tablespaces de sistema ficarão sempre no CDB, sem a necessidade de existirem no PDB;
  • Os tablespaces de dados são recomendados serem criados no PDB, para organizar a informação de cada banco separadamente e facilitar a portabilidade. Eles podem ter o mesmo nome em PDB distintos.

Se quiser verificar os tablespaces por PDB pode-se usar o seguinte select:

SQL> select t.*, c.name from v$tablespace t, v$containers c where t.con_id=c.con_id;

Explicados alguns conceitos e comandos básicos, podemos partir para a criação do PDB propriamente dito.

Para executar a criação do PDB é preciso estar conectado ao CDB:

SQL> alter session set container=cdb$root;

Em seguida rode o comando de criação do PDB (Atenção para usar um nome de usuário admin que não exista!):

SQL> create pluggable database <NOME DO PDB> admin user <NOME DO USUÁRIO ADMIN> identified by <SENHA DO USUÁRIO ADMIN>;

Eventualmente você pode ser surpreendido com o erro ORA-65010: maximum number of pluggable databases created. Isso ocorre porque há uma variável de ambiente no Oracle (MAX_PDBS) que define a quantidade máxima de PDBS que o banco de dados irá aceitar (Lembrando que caso o banco de dados seja versão standard o número máximo aceito é 3). Caso isso aconteça basta mudar essa variável com os comandos abaixo:

SQL> alter session set container=cdb$root;
SQL> alter system set max_pdbs=<QUANTIDADE DE PDB DESEJADA> scope=spfile;
SQL> shutdown immediate
SQL> startup

Após a criação do PDB, precisamos mudar o status dele para aberto, com o comando abaixo:

SQL> alter pluggable database <NOME DO PDB> open;

Após esse passo já pode verificar que o PDB foi criado com o comando show pdbs explicado acima.

Todavia, mesmo com o PDB criado e aberto e até conseguindo nos conectar a ele, ainda não conseguimos criar tablespace ou objetos nele, pois o Oracle no OCI trabalha com suas senha criptografadas em um wallet e por default o PDB é criado sem isso habilitado como autologin.

Por conta disso teremos que modificar esse wallet para fazer esse ajuste, seguindo os passos abaixo:

  • Verifique o status do wallet no banco de dados container:
SQL> alter session set container=cdb$root;
SQL> SELECT wrl_parameter, status, wallet_type FROM v$encryption_wallet;

Por default, o status do wallet é aberto e está como autologin.

  • Desabilite a opção de autologin movendo o arquivo cwallet.sso do diretório TDE Wallet, conforme o exemplo abaixo:
$ cd /u01/app/oracle/admin/ORCL/tde_wallet
$ mkdir bak_cwallet
$ mv cwallet.sso bak_cwallet/

Verifique se não há o arquivo cwallet.sso no diretório /u01/app/oracle/admin/ORCL/tde_wallet (a localização desse diretório pode variar conforme sua instalação).

  • Feche o wallet no banco de dados de container.
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE close;

Certifique-se que o status do wallet é FECHADO:

SQL> SELECT wrl_parameter, status, wallet_type FROM v$encryption_wallet; 

Reabra o wallet usando uma senha de sua escolha:

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE open IDENTIFIED BY <SENHA DO WALLET>;

Altere para o recém criado container para ajustar a senha:

SQL> alter session set container=<NOME DO PDB>;
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE open IDENTIFIED BY <SENHA DO WALLET>;
SQL> administer key management set key identified by <SENHA DO WALLET> with backup; 

Verifique o status do wallet do PDB:

SQL> SELECT wrl_parameter, status, wallet_type FROM v$encryption_wallet;

Alterne para o banco de dados container para habilitar o autologin:

SQL> alter session set container=CDB$ROOT;
SQL> administer key management create AUTO_LOGIN keystore from keystore '<CAMINHO COMPLETO DE LOCALIZAÇÃO DO TDE WALLET>' identified by <SENHA DO WALLET>;

Para que as mudanças tenham efeito, reinicie o banco de dados:

SQL> shutdown immediate
SQL> startup

Confirme que o todas as entradas do wallet estão como autologin:

SQL> SELECT wrl_parameter, status, wallet_type FROM v$encryption_wallet;

Após esses passos o seu PDB está pronto para receber o seu tablespace. Lembre-se de criá-lo dentro do PDB:

SQL> alter session set container=<NOME DO PDB>;
SQL> create tablespace <NOME DO TABLESPACE> datafile size <TAMANHO DO DATAFILE>;

Pronto! Seu PDB já está pronto para uso! Lembre-se que é preciso ajustar o listener do servidor de banco de dados para distribuir conexões ao PDB, usando os comandos abaixo, com um usuário que direitos de SYSBDA ou SYSOPER:

SQL> alter system set listener_networks='(( NAME=net1)(LOCAL_LISTENER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<HOST DO BANCO DE DADOS>)(PORT=<PORTA DO BANCO DE DADOS>)))))' scope=spfile;
SQL> alter system register;

Também é necessário, na estação, alterar o TNSNAMES.ORA para apontar para o PDB, acrescentando o seguinte bloco no arquivo:

NOME_DA_CONEXAO =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = <HOST DO BANCO DE DADOS)(PORT = <PORTA DO BANCO DE DADOS>))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = <NOME DO SERVIÇO DO PDB>)
    )
  )

Caio Almeida

Diretor Executivo da Cibernet Solutions, engenheiro eletrônico, gerente de projetos, DBA, corintiano e aficionado por cultura pop.

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.