Criando e Acessando um Pluggable Database (Oracle Database 12c)

Este artigo tem como objetivo demonstrar como criar um pluggable database no banco de dados 12c, garantir privilégios de acesso e de criar objetos no mesmo.

Sobre Multi Containers acesse: Introduction to the Multitenant Architecture.

Para iniciar vamos verificar os PDBS conectados no container root.

SQL> set lines 500
SQL> select name, open_mode, total_size from v$pdbs;

NAME                           OPEN_MODE  TOTAL_SIZE
------------------------------ ---------- ----------
PDB$SEED                       READ ONLY   283115520
SQL>

Vamos verificar as tablespaces no ambiente de banco de dados.

SQL> select * from v$tablespace;

       TS# NAME                           INC BIG FLA ENC     CON_ID
---------- ------------------------------ --- --- --- --- ----------
         0 SYSTEM                         YES NO  YES              1
         1 SYSAUX                         YES NO  YES              1
         2 UNDOTBS1                       YES NO  YES              1
         4 USERS                          YES NO  YES              1
         3 TEMP                           NO  NO  YES              1

5 rows selected.

SQL>

Vamos criar uma tablespace para o nosso pluggable database que iremos criar.

SQL> create tablespace TOMIASI_DADOS datafile '+DGDATA/ORCL/DATAFILE/tomiasi_dados01.dbf' size 10M autoextend on next 10M maxsize 50M;

Tablespace created.

SQL>

Já com a tablespace criada, vamos criar nosso PDB (Pluggable Database), lembrando que temos que associar um usuário a este pluggable database.
Estou criando o pluggable database tomiasi com o usuário tomiasi como administrador deste PDB.
Segue evidência abaixo:

SQL> create pluggable database tomiasi admin user tomiasi identified by tomiasi default tablespace "TOMIASI_DADOS";

Pluggable database created.

SQL>

Vamos verificar os pluggable databases.

SQL> select name, open_mode, total_size from v$pdbs;

NAME                           OPEN_MODE  TOTAL_SIZE
------------------------------ ---------- ----------
PDB$SEED                       READ ONLY   283115520
TOMIASI                        MOUNTED             0

SQL>

Como acima, criamos o pluggable database “TOMIASI” que está montado.
Para abrir o PDB, basta executar o comando abaixo:

SQL> alter pluggable database tomiasi open;

Pluggable database altered.

SQL>

Após o PDB aberto, vamos acessá-lo e garantir os privilégios necessários para o usuário tomiasi acessar o PDB “TOMIASI”.
Setando o container “TOMIASI”.
Porque setar o container?
Porque devemos setá-lo para acessá-lo, ou seja, para cada pluggable database que queira acessar a partir da container root devemos setar o PDB desejado.

SQL> alter session set container=tomiasi;

Session altered.

SQL> 

Após setar o container, possuímos controle sobre os schemas relacionado ao mesmo.
Garantindo o privilégio para o usuário tomiasi.

SQL>  grant connect, resource to tomiasi;

Grant succeeded.

SQL>

Alterando a quota do usuário na tablespace “TOMIASI_DADOS”.

SQL> alter user tomiasi quota unlimited on "TOMIASI_DADOS";

User altered.

SQL>

Vamos acessar o PDB TOMIASI com o usuário tomiasi.

SQL> conn tomiasi/tomiasi@tomiasi
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified


Warning: You are no longer connected to ORACLE.
SQL> !

O erro ocorre pois o PDB “TOMIASI” não foi configurado no TNSNAMES.
Vamos configurar o mesmo no TNSNAMES conforme abaixo:
Primeiramente, vamos com o comando “cat” visualizar o nosso atual TNSNAMES.

oracle=orcl->  cat /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = l12asm64di.localdomain)(PORT = 1521))

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = l12asm64di.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

Podemos perceber acima que temos o TNSNAMES do Banco de Dados ORCL (Container root) para o PDB.
Com o comando “vi” vamos alterar o TNSNAMES adicionando o PDB “TOMIASI” para podermos ter acesso ao PDB através do Container root ou sem conectar antes no Container root e vamos visualizar novamente o TNSNAMES após a adição.

oracle=orcl-> vi /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora
oracle=orcl-> cat /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = l12asm64di.localdomain)(PORT = 1521))

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = l12asm64di.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

TOMIASI =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = l12asm64di.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = tomiasi)
    )
  )
oracle=orcl-> exit
exit

Após configurado no TNSNAMES, vamos acessar o PDB “TOMIASI”.
Há duas formas de conectar ao PDB. Conectando através do container root (deve setar o PDB na sessão para conectar) ou direto sem conectar no container root.
Abaixo como estou conectado pelo container root e já setado o container “TOMIASI”, basta conectar no mesmo.

SQL> conn tomiasi/tomiasi@tomiasi
Connected.
SQL> 

Conectado no PDB “TOMIASI” podemos criar os objetos (tabelas, procedures, functions e etc…).
Vamos criar uma tabela e inserir um registro na mesma.

SQL> create table pessoas (p_id number, p_nome varchar2(30));

Table created.

SQL>  insert into pessoas values (1,'Maycon Tomiasi');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from pessoas;

      P_ID P_NOME
---------- ------------------------------
         1 Maycon Tomiasi

SQL>

A outra forma de conectar sem conectar no container root, é acessar com o comando abaixo, ou seja, via TNSNAMES.

oracle=orcl-> sqlplus tomiasi/tomiasi@tomiasi

SQL*Plus: Release 12.1.0.1.0 Production on Fri Aug 23 00:28:47 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Last Successful login time: Tue Aug 20 2013 19:50:49 -03:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL>

Pronto criamos o pluggable database do Banco de Dados Oracle 12c, acessamos o mesmo e criamos objetos.
Maiores informações acesse Oracle Documentation 12c.

%name Criando e Acessando um Pluggable Database (Oracle Database 12c)

Autor: Maycon Tomiasi

Formado em Tecnologia da Informação na FIPP (Faculdade de Informática de Presidente Prudente), Analista DBA Oracle pela Teiko Soluções em Tecnologia da Informação, residente em Blumenau/ SC, Certificado OCP 10g/11g/12c, OCS 11g Implementation, OCE 11g Performance Tuning, OCE 11g RAC & GRID e OPN Specialist. Conhecimentos em PHP.