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, and I am also a naturalized Swedish citizen. I am a former Oracle ACE and, to keep up with academic research, I am a Computer Scientist with an MSc in Data Science and another MSc in Software Engineering. I have over ten years of experience working with companies such as IBM, Epico Tech, and Playtech across three different countries (Brazil, Hungary, and Sweden), and I have joined projects remotely in many others. I am super excited to share my interests in Databases, Cybersecurity, Cloud, Data Science, Data Engineering, Big Data, AI, Programming, Software Engineering, and data in general.
(Continue reading)