Verifica se il database è CDB o non CDB
SQL> seleziona cdb da v$database;CDB---SI
Collegamento al container
$ export ORACLE_SID=pcdb01$ sqlplus / as sysdbaSQL> mostra con_nameCON_NAME------------------------------CDB$ROOTSQL> mostra con_idCON_ID----------------1SQL> mostra pdbs;CON_ID CON_NAME MODALITÀ APERTA RISERVATA-------- -- --------------- ---------- -------- --2 PDB$SEED SOLO LETTURA NO3 PRD_PDB_CON LETTURA SCRITTURA NO4 PRD_PDB_TEN LETTURA SCRITTURA NO
Naviga tra i PDB
SQL> alter session set container=PDB$SEED;Sessione alterata.SQL> alter session set container=PRD_PDB_CON;Sessione alterata.SQL>
Informazioni sui PDB
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 NORMALE
Controllo/modifica parametro
SQL> seleziona * da v$parametro_di_sistema;SQL> seleziona * da PDB_SPFILE$;SQL> altera il set di sistema nome_parametro=valore;SQL> altera il set di sistema nome_parametro=valore CONTAINER=CURRENT;
Avvio e spegnimento del PDB
Alcuni valori tipici:
AVVIO [NOMOUNT | MONTAGGIO | LIMITAZIONE | AGGIORNAMENTO | FORZA | SOLA LETTURA]
SPEGNIMENTO [IMMEDIATO | ABORT]
$ export ORACLE_SID=pcdb01$ sqlplus / as sysdbaSQL> spegnimento immediato;
Interrompi database collegabile
SQL> altera il database collegabile PRD_PDB_CON chiudi [immediato];SQL> altera il database collegabile TUTTI TRANNE PRD_PDB_CON chiudi [immediato];SQL> altera il database collegabile TUTTI chiudi;SQL> altera il database collegabile PRD_PDB_CON chiudi [immediato] [instances=all];
Oppure:
SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;SQL> spegnimento immediato;
Avvia database collegabile
FORZA DI AVVIO
AVVIO APRI LEGGI SCRIVICI [RESTRICT]
STARTUP APERTO SOLA LETTURA [RESTRICT]
AGGIORNAMENTO STARTUP
SHUTDOWN [IMMEDIATO]
SQL> modifica il database collegabile PDB01 aperto;SQL> modifica il database collegabile TUTTO TRANNE PRD_PDB_CON aperto;SQL> modifica il database collegabile TUTTO aperto;SQL> modifica il database collegabile PDB01 aperto [instances=all];
Oppure:
SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;SQL> startup;SQL> alter PLUGGABLE DATABASEOPEN READ WRITE [RESTRICTED] [FORCE];SQL> alter PLUGGABLE DATABASE APRI SOLA LETTURA [RESTRICTED][FORCE];SQL> alter PLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];SQL> alter PLUGGABLE DATABASE CHIUDI [IMMEDIATO];
Preserva lo stato di avvio del PDB (da 12.1.0.2 in poi)
SQL> alter PLUGGABLE DATABASE pdb2 OPEN;SQL> alter PLUGGABLE DATABASE pdb2 SAVE STATE;
La vista DBA_PDB_SAVED_STATES mostra informazioni sullo stato salvato dei contenitori.
SQL> COLUMN con_name FORMAT A20SQL> COLUMN nome_istanza FORMAT A20SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;CON_NAME INSTANCE_NAME STATE-------------------- --- ------------------ --------------PRD_PDB_CON pcdb01 APERTO
Dimensioni del database collegabile
SQL> FORMATO NOME COLONNA A20SQL> SELECT DBID, NAME, CON_ID, CON_UID, TOTAL_SIZE DA V$CONTAINERS ORDINA PER 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_TEN 43711>08
Tempo di avvio del database collegabile
SQL> imposta linesize 180SQL> col nome per a30SQL> col open_time per a33SQL> seleziona con_id,name,dbid,open_mode,open_time da v$containers;CON_ID NAME DBID OPEN_MODE OPEN_TIME---------- - --------------- -------------- ---------- ---------- - --------------------------------1 CDB$ROOT 456650806 LEGGI SCRIVI 17-MAR-18 11.59.36.176 PM -03 :002 pdb $ seed 2688102972 Leggi solo 17 marzo-18 11.59.36.182 PM -03:003 PDB_PN1O0101 1079206163 Leggi 18 marzo 12.00.00.00.589 AM -03:004 PDB_BATCHWEB 2340495643 AM -03:004 righe selezionate.
Tempo di attività del database collegabile
SQL> set linesize 180SQL> col name for a30SQL> col open_time for a28SQL> select name,floor(sysdate-cast(open_time as date))||'Days '||floor(((sysdate-cast(open_time as) date))-floor(sysdate-cast(open_time as date)))*24)||'hours '||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)||'minutes' "Database Uptime"from v$containers;NAME Tempo di attività del database--------------- --------------------------- CDB$ROOT 1331Giorni 11ore 28minutiPDB $SEED 1331Giorni 11ore 28minutiPDB_PN1O0101 1331Giorni 11ore 28minutiPDB_BATCHWEB 1331Giorni 11ore 28minuti4 righe selezionate.
Nome dei servizi
SQL> NOME COLONNA FORMATO A30SQL> SELEZIONA NOME,CON_ID,PDB DA V$SERVIZI ORDINA PER CON_ID;NOME 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 righe selezionate.
Crea utenti comuni con accesso a tutti i pdbSQL> CREATE USER c##user1 IDENTIFIED BY password1 CONTAINER=ALL;Utente creato.SQL> GRANT CREATE SESSION TO c##user1 CONTAINER=ALL;Concessione riuscita.Crea utenti comuni senza accesso a pdbs
SQL> CREATE USER c##user2 IDENTIFIED BY password1;Utente creato.SQL> GRANT CREATE SESSION TO c##user2;Concessione riuscita.Crea utente locale con accesso solo a pdb
SQL> CREATE USER user3 IDENTIFIED BY password3 CONTAINER=CURRENT;Utente creato.SQL> GRANT CREATE SESSION TO user3 CONTAINER=CURRENT;Concessione riuscita.Crea ruolo comune
SQL> CONN / AS SYSDBASQL> CREATE ROLE c##role1;Ruolo creato.SQL> GRANT CREATE SESSION TO c##role1;Concessione riuscita.
Concedi il ruolo a un utente comune
SQL> GRANT c##role1 TO c##user1 CONTAINER=ALL;Grant riuscito.
Concedi il ruolo a un utente comune a un utente locale
SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;Sessione alterata.SQL> GRANT c##role1 TO user2;Concessione riuscita.Ruoli locali
SQL> CONN / AS SYSDBASQL> alter SESSION SET CONTAINER =PRD_PDB_CON;Sessione alterata.SQL> CREATE ROLE role1;Ruolo creato.SQL> GRANT CREATE SESSION TO role1;Concessione riuscita.Creazione di PDB
SQL> crea database collegabile HMLPDB admin user admin identificato da PassDw1 ruoli =(DBA);SQL> crea database collegabile DSVPDB admin user admin identificato da Manager1roles =(DBA) storage (MAXSIZE 1G) FILE_NAME_CONVERT=('/u01/app /oracle/oradata/pcdb01/pcdb01_pdbseed_','/u01/app/oracle/oradata/dsvpdb/dsvpdb_');SQL> crea il database collegabile DSVPDB1 da DSVPDB file_name_convert=('/DSVPDB/','/DSVPDB1/');Esclusi i PDB
SQL> altera il database collegabile DSVPDB1 chiudi [immediato] [instances=all];SQL> elimina il database collegabile DSVPDB1 inclusi i file di dati;Scollegamento dei PDB
$ sqlplus / as sysdbaSQL> altera il database collegabile PRD_PDB_CON close;SQL> altera il database collegabile PRD_PDB_CON unplug in '/tmp/prd_pdb_con.xml';Collegamento dei PDB
$ sqlplus / as sysdbaSQL> crea il database collegabile PRD_PDB_CON usando '/tmp/prd_pdb_con.xml' FILE_NAME_CONVERT=('/oradata/cdb1/prd_pdb_con', '/oradata/cdb2/prd_pdb_con');SQL> altera il database collegabile PRD_PDB_CON aperto;Configurazione dei servizi su Oracle RAC con CDB
$ srvctl aggiungi servizio -db CDB01 -servizio nuovo_servizio -pdb PRD_PDB_CON$ srvctl modifica servizio -db CDB01 -servizio nuovo_servizio -pdb PRD_PDB_CON$ srvctl rimuovi servizio -db CDB01 -servizio nuovo_servizioBEGINDBMS_SERVICE.CREATE_SERVICE(nome_servizio => 'nuovo_servizio',nome_rete => 'nuovo_servizio.com');END;/BEGINDBMS_SERVICE.DELETE_SERVICE(nome_servizio => 'nuovo_servizio');END;/Con il contenitore radice, abbiamo cdb_tablespaces e cdb_data_files mostra il tablespace e i file di dati di tutto il contenitore nel CDB.
Quando sono collegati a un PDB, cdb_tablespaces e cdb_data_files mostrano le stesse informazioni di dba_tablespaces, dba_data_files per il PDB.
SQL> alter session set container=CDB$ROOT;Session alterato.SQL> seleziona tablespace_name, con_id da cdb_tablespaces ordina per con_id;TABLESPACE_NAME CON_ID------------------- ----------- --------SISTEMA 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 righe_tabella_spazio_selezionate da_SQL_tablespaces;tablespace_baACEd_tablespaces_seleziona_tabella_SQL> -----------------------------SYSTEMSYSAUXUNDOTBS1TEMPUSERSUNDOTBS26 righe selezionate.Come verificare la funzione di annullamento locale in 12.2
In Oracle Database 12c Release 1 tutti i contenitori in un'istanza condividevano lo stesso spazio tabella di annullamento.
In Oracle 12c Release 2 ogni contenitore in un'istanza può utilizzare il proprio spazio tabella di annullamento.
SQL> spegnimento immediato;SQL> aggiornamento avvio;SQL> altera database locale annulla su;SQL> spegnimento immediato;SQL> avvio;SQL> col nome_proprietà formato a30SQL> col valore_proprietà formato a30SQL> seleziona nome_proprietà, valore_proprietà da proprietà_database dove nome_proprietà ='LOCAL_UNDO_ENABLED';PROPERTY_NAME PROPERTY_VALUE---------------- -------------- LOCAL_UNDO_ENABLED TRUERiferimenti
https://docs.oracle.com