When 12.1.0.1 came out, one of the gripes was that upon a CDB start, all the PDBs were in the mounted mode. The DBA had to open them manually, or use a database trigger to do that.
12.1.0.2 introduced SAVE STATE - according to the docs:
The trouble is that this is simply wrong, it does not work like this. Oracle has a table externalized as DBA_PDB_SAVED_STATES and this stores the state. The table is updated only by the SAVE STATE command - and reflects the status when the SAVE STATE was issued, not when the database goes down.
It simply stores the open mode of the database and the CDB will open the database in this mode when the CDB opens. Lack of a row implies MOUNTED mode, i.e. the CDB won't do anything.
The row is deleted by the DISCARD STATE command - or by issuing the SAVE STATE when the PDB is mounted.
Let's see a short example: P2 does not have state saved. We open it read only, save the state, open it read write and restart the database. P2 comes up as read only - the state which it was when we saved the state, not the state it was when we shut the CDB down. The saved state is still OPEN READ ONLY.
12.1.0.2 introduced SAVE STATE - according to the docs:
For example, if a PDB is in open read/write mode before the CDB is restarted, then the PDB is in open read/write mode after the CDB is restarted; if a PDB is in mounted mode before the CDB is restarted, then the PDB is in mounted mode after the CDB is restarted.
The trouble is that this is simply wrong, it does not work like this. Oracle has a table externalized as DBA_PDB_SAVED_STATES and this stores the state. The table is updated only by the SAVE STATE command - and reflects the status when the SAVE STATE was issued, not when the database goes down.
It simply stores the open mode of the database and the CDB will open the database in this mode when the CDB opens. Lack of a row implies MOUNTED mode, i.e. the CDB won't do anything.
The row is deleted by the DISCARD STATE command - or by issuing the SAVE STATE when the PDB is mounted.
Let's see a short example: P2 does not have state saved. We open it read only, save the state, open it read write and restart the database. P2 comes up as read only - the state which it was when we saved the state, not the state it was when we shut the CDB down. The saved state is still OPEN READ ONLY.
SQL> select name, open_mode from v$pdbs; NAME OPEN_MODE ------------- ---------- PDB$SEED READ ONLY UNITSRC READ WRITE P2 MOUNTED SQL> alter pluggable database p2 open read only; Pluggable database altered. SQL> alter pluggable database p2 save state; Pluggable database altered. SQL> select con_name, state from DBA_PDB_SAVED_STATES; CON_NAME STATE ---------- -------------- UNITSRC OPEN P2 OPEN READ ONLY SQL> alter pluggable database p2 close; Pluggable database altered. SQL> alter pluggable database p2 open; Pluggable database altered. SQL> select name, open_mode from v$pdbs; NAME OPEN_MODE ------------- ---------- PDB$SEED READ ONLY UNITSRC READ WRITE P2 READ WRITE SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 838860800 bytes Fixed Size 2929936 bytes Variable Size 335547120 bytes Database Buffers 494927872 bytes Redo Buffers 5455872 bytes Database mounted. Database opened. SQL> select name, open_mode from v$pdbs; NAME OPEN_MODE ------------- ---------- PDB$SEED READ ONLY UNITSRC READ WRITE P2 READ ONLY SQL> select con_name, state from DBA_PDB_SAVED_STATES; CON_NAME STATE ---------- -------------- UNITSRC OPEN P2 OPEN READ ONLY
Comments