Überprüfen Sie, ob die Datenbank CDB oder Nicht-CDB ist
SQL> cdb aus v$database auswählen;CDB---YES
Verbinden mit Container
$ export ORACLE_SID=pcdb01$ sqlplus / as sysdbaSQL> show con_nameCON_NAME------------------------------CDB$ROOTSQL> show con_idCON_ID------------------------------1SQL> show pdbs;CON_ID CON_NAME OFFENER MODUS EINGESCHRÄNKT-------- -- ------------------------------ ---------- -------- --2 PDB$SEED NUR LESEN NEIN3 PRD_PDB_CON LESEN SCHREIBEN NEIN4 PRD_PDB_TEN LESEN SCHREIBEN NEIN
Durch PDBs navigieren
SQL> Sitzungssatz ändern container=PDB$SEED;Sitzung geändert.SQL> Sitzungssatz ändern container=PRD_PDB_CON;Sitzung geändert.SQL>
Informationen zu PDBs
SQL> SPALTE PDB_NAME FORMAT A15SQL> SPALTE 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
Parameter prüfen/ändern
SQL> select * from v$system_parameter;SQL> select * from PDB_SPFILE$;SQL> alter system set parameter_name=value;SQL> alter system set parameter_name=value CONTAINER=CURRENT;
Starten und Herunterfahren von PDB
Einige typische Werte:
START [NOMOUNT | MONTAGE | EINSCHRÄNKEN | AKTUALISIEREN | KRAFT | SCHREIBGESCHÜTZT]
HERUNTERFAHREN [SOFORT | ABORT]
$ export ORACLE_SID=pcdb01$ sqlplus / as sysdbaSQL> sofort herunterfahren;
Plug-in-Datenbank stoppen
SQL> alter Pluggable Database PRD_PDB_CON close [sofort];SQL> alter Pluggable Database ALL EXCEPT PRD_PDB_CON close [sofort];SQL> alter Pluggable Database ALL close;SQL> alter Pluggable Database PRD_PDB_CON close [sofort] [Instanzen=alle];
Oder:
SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;SQL> sofort herunterfahren;
Plugin-Datenbank starten
STARTKRAFT
STARTEN ÖFFNEN LESEN SCHREIBEN [EINSCHRÄNKT]
START ÖFFNEN NUR LESEN [EINSCHRÄNKT]
STARTUP-UPGRADE
SHUTDOWN [SOFORT]
SQL> alter Pluggable Database PDB01 open;SQL> alter Pluggable Database ALL EXCEPT PRD_PDB_CON open;SQL> alter Pluggable Database ALL open;SQL> alter Pluggable Database PDB01 open [instances=all];
Oder:
SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;SQL> startup;SQL> alter PLUGGABLE DATABASEOPEN READ WRITE [RESTRICTED] [FORCE];SQL> alter PLUGGABLE DATABASE OPEN READ ONLY [RESTRICTED][FORCE];SQL> alter PLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];SQL> alter PLUGGABLE DATABASE CLOSE [SOFORT];
Startzustand der PDB beibehalten (ab 12.1.0.2)
SQL> alter PLUGGABLE DATABASE pdb2 OPEN;SQL> alter PLUGGABLE DATABASE pdb2 SAVE STATE;
Die Ansicht DBA_PDB_SAVED_STATES zeigt Informationen über den gespeicherten Status von Containern an.
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 ÖFFNEN
Größe der austauschbaren Datenbank
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_TEN 4 28271.371
Startzeit der Plug-in-Datenbank
SQL> set linesize 180SQL> col name for a30SQL> col open_time for a33SQL> select con_id,name,dbid,open_mode,open_time from v$containers;CON_ID NAME DBID OPEN_MODE OPEN_TIME---------- - ---------- -------------- ---------- ---------- - --------------------------------1 CDB$ROOT 456650806 LESEN SCHREIBEN 17-MAR-18 11.59.36.176 PM -03 :002 PDB $ Seed 2688102972 Lesen Sie nur 17-mar-18 11.59.36.182 -03:003 PDB_PN1O0101 1079206163 Read Read Write 18-mar-18 12.00,589 AM -03:004 PDB_BATCHWIEB 2340495643 Read SPRECHT 18-MARR. AM -03:004 Zeilen ausgewählt.
Verfügbarkeit der austauschbaren Datenbank
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 Datenbankbetriebszeit------------------------------------CDB$ROOT 1331Tage 11 Stunden 28 MinutenPDB $SEED 1331Tage 11Stunden 28MinutenPDB_PN1O0101 1331Tage 11Stunden 28MinutenPDB_BATCHWEB 1331Tage 11Stunden 28Minuten4 Zeilen ausgewählt.
Name der Dienste
SQL> SPALTENNAMEN FORMAT 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 Zeilen ausgewählt.
Gemeinsame Benutzer mit Zugriff auf alle pdbs erstellenSQL> CREATE USER c##user1 IDENTIFIED BY password1 CONTAINER=ALL;Benutzer erstellt.SQL> GRANT CREATE SESSION TO c##user1 CONTAINER=ALL;Erteilung erfolgreich.Gemeinsame Benutzer ohne Zugriff auf pdbs erstellen
SQL> CREATE USER c##user2 IDENTIFIED BY password1;Benutzer erstellt.SQL> GRANT CREATE SESSION TO c##user2;Erteilung erfolgreich.Erstellen Sie einen lokalen Benutzer mit Zugriff nur auf pdb
SQL> CREATE USER user3 IDENTIFIED BY password3 CONTAINER=CURRENT;Benutzer erstellt.SQL> GRANT CREATE SESSION TO user3 CONTAINER=CURRENT;Erteilung erfolgreich.Gemeinsame Rolle erstellen
SQL> CONN / AS SYSDBASQL> CREATE ROLE c##role1;Rolle erstellt.SQL> GRANT CREATE SESSION TO c##role1;Erteilung erfolgreich.
Einem gemeinsamen Benutzer eine Rolle zuweisen
SQL> GRANT c##role1 TO c##user1 CONTAINER=ALL;Erteilung erfolgreich.
Geben Sie einem lokalen Benutzer eine Rolle für einen gemeinsamen Benutzer
SQL> alter SESSION SET CONTAINER =PRD_PDB_CON;Sitzung geändert.SQL> GRANT c##role1 TO user2;Erteilung erfolgreich.Lokale Rollen
SQL> CONN / AS SYSDBASQL> alter SESSION SET CONTAINER =PRD_PDB_CON;Sitzung geändert.SQL> CREATE ROLE Rolle1;Rolle erstellt.SQL> GRANT CREATE SESSION TO Rolle1;Erteilung erfolgreich.Erstellen von PDBs
SQL> erstelle austauschbare Datenbank HMLPDB admin Benutzer admin identifiziert durch PassDw1 roles =(DBA);SQL> erstelle austauschbare Datenbank DSVPDB admin Benutzer admin identifiziert durch Manager1roles =(DBA) storage (MAXSIZE 1G) FILE_NAME_CONVERT=('/u01/app /oracle/oradata/pcdb01/pcdb01_pdbseed_','/u01/app/oracle/oradata/dsvpdb/dsvpdb_');SQL> Pluggable-Datenbank DSVPDB1 aus DSVPDB erstellen file_name_convert=('/DSVPDB/','/DSVPDB1/');Ausgenommen PDBs
SQL> austauschbare Datenbank DSVPDB1 ändern schließen [sofort] [Instanzen=all];SQL> austauschbare Datenbank DSVPDB1 einschließlich Datendateien löschen;PDBs trennen
$ sqlplus / as sysdbaSQL> alter Pluggable Database PRD_PDB_CON close;SQL> alter Pluggable Database PRD_PDB_CON unplug in '/tmp/prd_pdb_con.xml';PDBs einstecken
$ sqlplus / as sysdbaSQL> erzeuge die austauschbare Datenbank PRD_PDB_CON mit '/tmp/prd_pdb_con.xml' FILE_NAME_CONVERT=('/oradata/cdb1/prd_pdb_con', '/oradata/cdb2/prd_pdb_con');SQL> verändere die austauschbare Datenbank PRD_PDB_CON öffnen;Dienste auf Oracle RAC mit CDBs konfigurieren
$ srvctl add service -db CDB01 -service new_service -pdb PRD_PDB_CON$ srvctl modify service -db CDB01 -service new_service -pdb PRD_PDB_CON$ srvctl remove service -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;/Beim Root-Container haben wir cdb_tablespaces und cdb_data_files zeigt den Tablespace und die Datendateien aller Container in der CDB.
Wenn sie mit einer PDB verbunden sind, zeigen cdb_tablespaces und cdb_data_files dieselben Informationen wie dba_tablespaces, dba_data_files für die PDB.
SQL> alter session set container=CDB$ROOT;Session altered.SQL> select tablespace_name, con_id from cdb_tablespaces order by 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 Zeilen ausgewählt.SQL> select tablespace_name from dba_tablespace_tablespaces; -----------------------------SYSTEMSYSAUXUNDOTBS1TEMPUSERSUNDOTBS26 Zeilen ausgewählt.Überprüfen der Funktion "Lokales Rückgängigmachen" in 12.2
In Oracle Database 12c Release 1 teilten sich alle Container in einer Instanz denselben Undo-Tablespace.
In Oracle 12c Release 2 kann jeder Container in einer Instanz seinen eigenen Undo-Tablespace verwenden.
SQL> sofortiges Herunterfahren;SQL> Startup-Upgrade;SQL> alter database local rückgängig machen;SQL> sofort herunterfahren;SQL> startup;SQL> col Eigenschaftsname format a30SQL> col Eigenschaftswert format a30SQL> select Eigenschaftsname, Eigenschaftswert aus Datenbankeigenschaften, wobei Eigenschaftsname ='LOCAL_UNDO_ENABLED';PROPERTY_NAME PROPERTY_VALUE----------- -------------- LOCAL_UNDO_ENABLED TRUEReferenzen
https://docs.oracle.com