A partir do banco de dados Oracle versão 12C algumas coisas mudaram em relação à sua versão anterior, 11G. Uma delas é a introdução de PDB e CDB que faz com que a administração da base de dados se torne um pouco diferente. Imagine uma caixa grande com outras caixas menores dentro dela, imaginou? Pois bem, a caixa maior entenda como o CDB e as caixas menores como o PDB, explicando de uma maneira bem sucinta. Neste post, estarei explicando como se conectar em um PDB a partir de um CDB e a obter informações do mesmo.
- Conectando no CDB: Até aqui tudo parecido com a versão 11G, fazendo-se uso da v$instance para verificar o status da base:
/home/oracle> sqlplus "/as sysdba" SQL*Plus: Release 12.1.0.2.0 Production on Sun May 1 11:51:05 2016 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options SQL> select instance_name, status from gv$instance; INSTANCE_NAME STATUS ---------------- ------------ CDBORCL1 OPEN CDBORCL2 OPEN
No entanto, se não fosse pela versão apresentada no banner 12.1.0.2.0, poderíamos achar que esta base de dados tivesse somente estas instâncias e nada demais. Todavia, se tratando da versão 12C, podemos encontrar PDBs e administrar os mesmos. Sendo assim, vamos verificar os PDBS existentes nessa base.
- Verificando os PDBs existentes na base e já verificando o CDB root, no qual estamos conectados atualmente:
SQL> SQL> COLUMN PDB_NAME FORMAT A15 SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID; SQL> SQL> PDB_ID PDB_NAME STATUS ---------- --------------- --------- 2 PDB$SEED NORMAL 3 ORCL NORMAL 4 TECHDAT NORMAL 5 TDATAB NORMAL SQL> SHOW CON_NAME CON_NAME ------------------------------ CDB$ROOT
Agora que verificamos os PDBs existentes na base, vamos conectar em um deles para chegarmos ao intuito do post . Iremos usar o PDB TECHDAT.
- Se conectando em um PDB a partir de um CDB:
SQL> ALTER SESSION SET container = TECHDAT; Session altered.
- Verificando se estamos conectado no PDB mencionado:
SQL> SHOW CON_NAME CON_NAME ------------------------------ TECHDAT SQL> COLUMN PDB_NAME FORMAT A15 SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;SQL> SQL> PDB_ID PDB_NAME STATUS ---------- --------------- --------- 3 TECHDAT NORMAL
Um detalhe interessante é que quando estamos dentro do PDB a view v$instance só fará menção de fato a instância ao qual estamos conectado. Para obter informações do PDB ao qual se estar conectado, usa-se a view v$pdbs ou a DBA_PDBS utilizada anteriormente. Como no exemplo abaixo:
SQL> select name, open_mode from v$pdbs; NAME OPEN_MODE -------- ---------- TECHDAT READ WRITE
Agora que já vimos como conectar no PDB, vamos voltar ao CDB.
- Voltando ao CDB :
SQL> ALTER SESSION SET container = CDB$ROOT; Session altered. SQL> SHOW CON_NAME CON_NAME ------------------------------ CDB$ROOT
- Verificando as informações de CDB e PDB de um modo geral:
SQL> select instance_name, status from gv$instance; INSTANCE_NAME STATUS ---------------- ------------ CDBORCL1 OPEN CDBORCL2 OPEN SQL> COLUMN NAME FORMAT A8 SELECT NAME, CON_ID, DBID, CON_UID, GUID FROM V$CONTAINERS ORDER BY CON_ID;SQL> SQL> NAME CON_ID DBID CON_UID GUID -------- ---------- ---------- ---------- -------------------------------- CDB$ROOT 1 3903653274 1 EB0EDFE2CFF400A8E0430AF1183CD739 PDB$SEED 2 4103666646 4103666646 058400A8E91A0058E0530A9810484BED ORCL 3 2023794284 2023794284 05842B0BD16800DCE0530A9810482D14 TECHDAT 4 2714962256 2714962256 05897B3422E400D2E0530A9810481676 TDATAB 5 2066344434 2066344434 1F6982154AFE01EEE0530A9810483C01
Hi! I am Bruno, a Brazilian born and bred. Former Oracle ACE, Computer Scientist, MSc in Data Science, over ten years of experience in companies such as IBM, Epico Tech, and Playtech based in three different countries (Brazil, Hungary, and Sweden) and joined projects remotely in many others. I am super excited to show you my interest in Databases, Cloud, Data Science, Data Engineering, Bigdata, AI, Programming, Software Engineering, and data in general.
(Continue reading)