Verifique se o banco de dados é CDB ou não CDB
SQL> selecione cdb de v$database;CDB---YES
Conectando ao contêiner
$ export ORACLE_SID=pcdb01$ sqlplus / as sysdbaSQL> show con_nameCON_NAME-------------------CDB$ROOTSQL> show con_idCON_ID------------------------------1SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED------- ------------------------------- ---------- -------- --2 PDB$SEED APENAS LEITURA NO3 PRD_PDB_CON LEIA ESCRITA NO4 PRD_PDB_TEN LEIA ESCREVER NÃO
Navegar pelos PDBs
SQL> alter session set container=PDB$SEED;Session changes.SQL> alter session set container=PRD_PDB_CON;Session changes.SQL>
Informações sobre PDBs
SQL> COLUMN PDB_NAME FORMAT A15SQL> COLUMN PDB_NAME FORMAT A15SQL> SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;PDB_ID PDB_NAME STATUS---------- ---------- ----- ---------2 PDB$SEED NORMAL3 PRD_PDB_CON NORMAL4 PRD_PDB_TEN NORMAL
Verificando/alterando o parâmetro
SQL> selecione * de v$system_parameter;SQL> selecione * de PDB_SPFILE$;SQL> altere o sistema set parameter_name=valor;SQL> altere o sistema set parameter_name=value CONTAINER=CURRENT;
Inicialização e desligamento do PDB
Alguns valores típicos:
INICIALIZAÇÃO [NOMOUNT | MONTE | RESTRITO | ATUALIZAR | FORÇA | SOMENTE LEITURA]
DESLIGAMENTO [IMEDIATO | ABORT]
$ export ORACLE_SID=pcdb01$ sqlplus / as sysdbaSQL> desligamento imediato;
Parar banco de dados conectável
SQL> altera o banco de dados conectável PRD_PDB_CON close [imediato];SQL> altera o banco de dados conectável TODOS EXCETO PRD_PDB_CON close [imediato];SQL> altera o banco de dados conectável TODOS fecha;SQL> altera o banco de dados conectável PRD_PDB_CON close [imediato] [instâncias=todos];
Ou:
SQL> altera SESSION SET CONTAINER =PRD_PDB_CON;SQL> encerramento imediato;
Iniciar banco de dados conectável
FORÇA DE INICIALIZAÇÃO
INICIAR ABRIR LER ESCREVER [RESTRICT]
INICIALIZAÇÃO ABERTA APENAS LEITURA [RESTRICT]
ATUALIZAÇÃO DE INICIALIZAÇÃO
DESLIGAMENTO [IMEDIATO]
SQL> altera o banco de dados conectável PDB01 aberto;SQL> altera o banco de dados conectável TODOS, EXCETO PRD_PDB_CON aberto;SQL> altera o banco de dados conectável TODOS abertos;SQL> altera o banco de dados conectável PDB01 aberto [instâncias=todos];
Ou:
SQL> altera SESSION SET CONTAINER =PRD_PDB_CON;SQL> startup;SQL> altera PLUGGABLE DATABASEOPEN READ WRITE [RESTRICTED] [FORCE];SQL> altera PLUGGABLE DATABASE OPEN READ ONLY [RESTRICTED][FORCE];SQL> altera PLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];SQL> altera PLUGGABLE DATABASE CLOSE [IMMEDIATE];
Preservar o estado de inicialização do PDB (12.1.0.2 em diante)
SQL> altera PLUGGABLE DATABASE pdb2 OPEN;SQL> altera PLUGGABLE DATABASE pdb2 SAVE STATE;
A exibição DBA_PDB_SAVED_STATES exibe informações sobre o estado salvo dos contêineres.
SQL> COLUMN con_name FORMAT A20SQL> COLUMN instance_name FORMAT A20SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;CON_NAME INSTANCE_NAME STATE-------------------- --- ----------------- --------------PRD_PDB_CON pcdb01 ABERTO
Tamanho do banco de dados conectável
SQL> COLUMN NAME FORMAT A20SQL> SELECT DBID, NAME, CON_ID, CON_UID, TOTAL_SIZE FROM V$CONTAINERS ORDER BY CON_ID;DBID NAME CON_IDCON_UID TOTAL_SIZE---------- -------- ----------- ---------- ---------- -------- --2732069181 CDB$ROOT 1 1 03552543733 PDB$SEED 2 3552543733 7759462404008367944 PRD_PDB_CON 3 4008367944 12037652482667104724 PRD_PDB_TEN937 286pre11
Tempo de inicialização do banco de dados conectável
SQL> set linesize 180SQL> col name for a30SQL> col open_time for a33SQL> selecione con_id,name,dbid,open_mode,open_time de v$containers;CON_ID NAME DBID OPEN_MODE OPEN_TIME---------- - --------------- -------------- ---------- ---------- - --------------------------------1 CDB$ROOT 456650806 LEIA ESCREVER 17-MAR-18 11.59.36.176 PM -03 :002 PDB $ SEED 2688102972 Somente leitura 17-mar-18 11.59.36.182 -03:003 PDB_PN1O0101 1079206163 Read 18-mar-18 12.00.589 AM -03:004 PDB_BEBEB 23.00.589 AM -03:0044 AM -03:004 linhas selecionadas.
Tempo de atividade do banco de dados conectável
SQL> set linessize 180SQL> col name for a30SQL> col open_time for a28SQL> selecione name,floor(sysdate-cast(open_time as date))||'Days '||floor(((sysdate-cast(open_time as date))-floor(sysdate-cast(open_time as date)))*24)||'horas '||round(((sysdate-cast(open_time as date)-floor(sysdate-cast(open_time as date)) ) *24)-floor((sysdate-cast(open_time as date)-floor(sysdate-cast(open_time as date))*24)))*60)||'minutos' "Database Uptime"de v$containers;NAME Tempo de atividade do banco de dados--------------- ---------------------------CDB$ROOT 1331Dias 11horas 28minutosPDB $SEED 1331Dias 11horas 28minutosPDB_PN1O0101 1331Dias 11horas 28minutosPDB_BATCHWEB 1331Dias 11horas 28minutos4 linhas selecionadas.
Nome dos serviços
SQL> FORMATO DO NOME DA COLUNA A30SQL> SELECT NAME,CON_ID,PDB FROM V$SERVICES ORDER BY CON_ID;NAME CON_ID PDB----------------------- ------- ---------- ------------------------------pcdb01XDB 1 CDB $ROOTSYS$BACKGROUND 1 CDB$ROOTSYS$USERS 1 CDB$ROOTpcdb01 1 CDB$ROOTprd_pdb_con 3 PRD_PDB_CONprd_pdb_ten 4 PRD_PDB_TEN6 linhas selecionadas.
Criar usuários comuns com acesso a todos os pdbsSQL> CREATE USER c##user1 IDENTIFIED BY password1 CONTAINER=ALL;Usuário criado.SQL> GRANT CREATE SESSION TO c##user1 CONTAINER=ALL;Grant bem-sucedida.Criar usuários comuns sem acesso a pdbs
SQL> CREATE USER c##user2 IDENTIFIED BY password1;Usuário criado.SQL> GRANT CREATE SESSION TO c##user2;Grant foi bem-sucedido.Criar usuário local com acesso apenas ao pdb
SQL> CREATE USER user3 IDENTIFIED BY password3 CONTAINER=CURRENT;Usuário criado.SQL> GRANT CREATE SESSION TO user3 CONTAINER=CURRENT;Grant bem-sucedido.Criar função comum
SQL> CONN / AS SYSDBASQL> CREATE ROLE c##role1;Função criada.SQL> GRANT CREATE SESSION TO c##role1;Grant bem-sucedida.
Conceder função a um usuário comum
SQL> GRANT c##role1 TO c##user1 CONTAINER=ALL;Grant bem-sucedido.
Conceder função a um usuário comum a um usuário local
SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;Sessão alterada.SQL> GRANT c##role1 TO user2;Grant bem-sucedido.Funções locais
SQL> CONN / AS SYSDBASQL> alter SESSION SET CONTAINER =PRD_PDB_CON;Sessão alterada.SQL> CREATE ROLE role1;Role created.SQL> GRANT CREATE SESSION TO role1;Grant bem-sucedido.Criando PDBs
SQL> cria banco de dados conectável HMLPDB admin usuário admin identificado por PassDw1 roles =(DBA);SQL> cria banco de dados conectável DSVPDB admin user admin identificado por Manager1roles =(DBA) storage (MAXSIZE 1G) FILE_NAME_CONVERT=('/u01/app /oracle/oradata/pcdb01/pcdb01_pdbseed_','/u01/app/oracle/oradata/dsvpdb/dsvpdb_');SQL> cria banco de dados conectável DSVPDB1 a partir de DSVPDB file_name_convert=('/DSVPDB/','/DSVPDB1/');Excluindo PDBs
SQL> altera o banco de dados conectável DSVPDB1 close [imediate] [instances=all];SQL> descarta o banco de dados conectável DSVPDB1 incluindo arquivos de dados;Desconectando PDBs
$ sqlplus / as sysdbaSQL> altera o banco de dados conectável PRD_PDB_CON close;SQL> altera o banco de dados conectável PRD_PDB_CON desplugue em '/tmp/prd_pdb_con.xml';Conectando PDBs
$ sqlplus / as sysdbaSQL> cria o banco de dados conectável PRD_PDB_CON usando '/tmp/prd_pdb_con.xml' FILE_NAME_CONVERT=('/oradata/cdb1/prd_pdb_con', '/oradata/cdb2/prd_pdb_con');SQL> altera o banco de dados conectável PRD_PDB_CON abrir;Configurando serviços no Oracle RAC com CDBs
$ srvctl adicionar serviço -db CDB01 -service new_service -pdb PRD_PDB_CON$ srvctl modificar serviço -db CDB01 -service new_service -pdb PRD_PDB_CON$ srvctl remover serviço -db CDB01 -service new_serviceBEGINDBMS_SERVICE.CREATE_SERVICE(service_name => 'new_service',network_name => 'new_service.com');END;/BEGINDBMS_SERVICE.DELETE_SERVICE(service_name => 'new_service');END;/
Com o container root, temos cdb_tablespaces e cdb_data_files mostra o tablespace e os arquivos de dados de todo o container no CDB.
Quando conectado a um PDB, cdb_tablespaces e cdb_data_files mostram as mesmas informações que dba_tablespaces, dba_data_files para o PDB.
SQL> alter session set container=CDB$ROOT;Session changes.SQL> selecione tablespace_name, con_id de cdb_tablespaces ordenar por con_id;TABLESPACE_NAME CON_ID----- ----------- --------SYSTEM 1SYSAUX 1UNDOTBS2 1TEMP 1USERS 1UNDOTBS1 1SYSTEM 3SYSAUX 3TBS_GEN_01 3TEMP 3TBS_CON_IDX_01 3TBS_CON_DT_01 3USERS 3SYSTEM 4SYSAUX 4TBS_GEN_01 4USERS 4TEMP 418 rowsTABLESP.SQL> selecione tablespace_name de dba_tablespaces; -----------------------------SYSTEMSYSAUXUNDOTBS1TEMPUSERSUNDOTBS26 linhas selecionadas.Como verificar o recurso Desfazer local na versão 12.2
No Oracle Database 12c Release 1, todos os contêineres em uma instância compartilhavam o mesmo tablespace de undo.
No Oracle 12c Release 2, cada contêiner em uma instância pode usar seu próprio tablespace de undo.
SQL> desligamento imediato;SQL> inicialização atualização;SQL> alterar banco de dados local desfazer em;SQL> desligamento imediato;SQL> inicialização;SQL> col property_name formato a30SQL> col property_value formato a30SQL> selecionar property_name, property_value de database_properties onde property_name ='LOCAL_UNDO_ENABLED';PROPERTY_NAME PROPERTY_VALUE---------------- -------------- LOCAL_UNDO_ENABLED TRUEReferências
https://docs.oracle.com