CDB & PDB

Seit Oracle 12 sind die DB-Instanzen mandantenfähig. In einer Container-Datenbank (CDB) können keine, eine oder mehrere Plugin-Database (PDB) angelegt werden.

SHOW pdbs
CON_ID CON_NAME   OPEN MODE  RESTRICTED
------ ---------- ---------- ----------
     2 PDB$SEED   READ ONLY  NO
     3 ORCLPDB1   MOUNTED
     4 ORCLPDB    READ WRITE NO

Hier im Beispiel gibt es eine Vorlage-PDB (PDB$SEED), eine inaktive (ORCLPDB1) und eine aktive Datenbank (ORCLPDB). Als z.B. sysdba kann man zw. den Containern wechseln.

ALTER SESSION SET container=ORCLPDB;

Der aktuelle Container ist:

SELECT
  SYS_CONTEXT('USERENV', 'CON_NAME') AS CUR_CONTAINER
FROM DUAL;
CUR_CONTAINER
-------------
ORCLPDB

Manage PDBs

Öffnen einer PDB (sysdba):

SQL> alter pluggable database ORCLPDB open;

SQL> show pdbs

CON_ID CON_NAME        OPEN MODE  RESTRICTED
------ --------------- ---------- ----------
     2 PDB$SEED        READ ONLY  NO
     3 ORCLPDB1        MOUNTED
     4 ORCLPDB         READ WRITE NO

Status des PDB für nächsten Reboot sichern (sysdba):

ALTER pluggable DATABASE ORCLPDB SAVE STATE;

-- anzeigen der saved-states ...
SELECT con_name, state
  FROM dba_pdb_saved_states;
CON_NAME   CON_NAME
---------- ----------
ORCLPDB    OPEN

Und einmal testen:

SQL> shutdown immediate;
Datenbank geschlossen.
Datenbank dismounted.
ORACLE-Instanz heruntergefahren.
SQL> startup
ORACLE-Instanz hochgefahren.
Total System Global Area 1543500872 bytes
Fixed Size                  9135176 bytes
Variable Size            1073741824 bytes
Database Buffers          452984832 bytes
Redo Buffers                7639040 bytes
Datenbank mounted.
Datenbank geoffnet.
-- anzeigen der saved-states ...
SELECT con_name, state
  FROM dba_pdb_saved_states;
CON_NAME   CON_NAME
---------- ----------
ORCLPDB    OPEN

PDB tnsnames.ora

Für die PDBs sollten entsprechen Einträge in der tnsnames.ora vorgenommen werden:

ORCLPDB =
  (DESCRIPTION =
     (ADDRESS =
       (PROTOCOL = TCP)
       (HOST     = 192.168.1.110)
       (PORT     = 1521))
     (CONNECT_DATA =
       (SERVER       = DEDICATED)
       (SERVICE_NAME = ORCLPDB))
   )