In oracle 12c , when we startup the CDB, the PDBS will be in MOUNTED stage. We need to open them manually using alter pluggable PDB open. To make the PDBS open automatically, we can use the saved state option . This feature is available from Oracle 12.1.0.2  onwards 

For more information about CDB and PDB , refer   Oracle 12c multitenent architecture

DEMO:

1.  Restart the container database:

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.


SQL> startup
ORACLE instance started.

Total System Global Area 1.4529E+10 bytes
Fixed Size                  7649368 bytes
Variable Size            8489273256 bytes
Database Buffers         5939134464 bytes
Redo Buffers               93011968 bytes
Database mounted.
Database opened.

2. Check the status of PDBS:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           MOUNTED
         4 PDB2                           MOUNTED
         5 NONCDB                         MOUNTED
		 

   We can see the PDBS are in MOUNTED stage after starting CDB. Lets open them

3. Open the PDBS:

SQL> alter pluggable database NONCDB open;

Pluggable database altered.

SQL>  alter pluggable database PDB1 open;

Pluggable database altered.

SQL> alter pluggable database PDB2 open;

Pluggable database altered.

SQL>  show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           READ WRITE NO
         5 NONCDB                         READ WRITE NO

Now use save state command to save the states, so that next time ,when container db restarts, PDBs will in READ WRITE MODE automatically.

4. Save the PDB state:

SQL> alter pluggable database NONCDB save state;

Pluggable database altered.

SQL>  alter pluggable database PDB1 save state;

Pluggable database altered.

SQL> alter pluggable database PDB2 save state;

Pluggable database altered.

5. check the saved state in dba_pdb_saved_states

SQL> select con_name, state from dba_pdb_saved_states;

CON_NAME                STATE
----------------------- --------------
NONCDB                  OPEN
PDB1                    OPEN
PDB2                    OPEN

6.Bounce the container database, to check the PDB state:

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1.4529E+10 bytes
Fixed Size 7649368 bytes
Variable Size 8489273256 bytes
Database Buffers 5939134464 bytes
Redo Buffers 93011968 bytes
Database mounted.
Database opened.

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
5 NONCDB READ WRITE NO

We can observed that PDBs are in READ WRITE mode automatically.

DISCARD STATE OPTION:

 

      We can discard the saved state, so that next time CDB restarts, PDBs will start with MOUNT STATE only.
Lets discard state for PDB2 .

 

SQL> select con_name, state from dba_pdb_saved_states;

CON_NAME                STATE
----------------------- --------------
NONCDB                  OPEN
PDB1                    OPEN
PDB2                    OPEN


SQL> alter pluggable database PDB2 discard state;

Pluggable database altered.

SQL>   select con_name, state from dba_pdb_saved_states;

CON_NAME                STATE
----------------------- --------------
NONCDB                  OPEN
PDB1                    OPEN

1. Bounce the CDB to check the PDB State:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           READ WRITE NO
         5 NONCDB                         READ WRITE NO

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area 1.4529E+10 bytes
Fixed Size                  7649368 bytes
Variable Size            8489273256 bytes
Database Buffers         5939134464 bytes
Redo Buffers               93011968 bytes
Database mounted.
Database opened.

SQL>  show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           MOUNTED
         5 NONCDB                         READ WRITE NO

We can observe that, only PDB2 started in MOUNTED stage, because we have discarded the saved state for PDB2 .

 

As this feature is not available in 12.1.0.1 , we can create a trigger to open the PDBs automatically, with container database startup.

CREATE TRIGGER open_all_pdbs
  AFTER STARTUP ON DATABASE
BEGIN
   EXECUTE IMMEDIATE ‘ALTER PLUGGABLE DATABASE ALL OPEN’;
END ;
/

 

 

SEE ALSO:

How to convert non-cdb to pdb in oracle 12c