ORA-16433: The database or pluggable database must be opened in read/write

ORA-16433 is an error returned when a database cannot be opened. This can be a result of multiple conditions including,

  1. The inconsistency of the database
  2. Physical corruption
  3. Loss of dependent files or access issues etc..

More often than not the solution is to recover from available backups, but there can be situations where backups are not available, specially on UAT or Test setups. Although not the ideal scenario, in this type of situation you might want to open the databases even with inconsistency. 

ora 16433 The database or pluggable database must be opened in read/write

In Comes --> _ALLOW_RESETLOGS_CORRUPTION

First, if you are in a position to use _ALLOW_RESETLOGS_CORRUPTION=TRUE, that means it has to be a critical moment, and when you come across more ora- errors while you are trying to reopen the databsae, that can be annoying.

Note - _ALLOW_RESETLOGS_CORRUPTION=TRUE must only be used after Oracle support confirmation as a last resort. Also make sure to take cold backup before proceeding.

Basic steps to be followed to resolve ORA 16433 after the loss of Online redo logs using _ALLOW_RESETLOGS_CORRUPTION are listed below (if using PDBs refer Note below), 

1. Create pfile from spfile, If RAC stop all nodes except one.

2. Add or change parameters as below,

Set UNDO_MANAGEMENT=MANUAL and remove UNDO_TABLESPACE and UNDO_RETENTION.

Set CLUSTER_DATABASE=FALSE, JOB_QUEUE_PROCESSES=0.

Include  _ALLOW_RESETLOGS_CORRUPTION=TRUE

3. Recreate the controlfile with resetlogs option.

4. If any of the datafiles are in offline status, try to alter the datafile online as below,

 select file#, name, status from v$datafile where status not in ('SYSTEM', 'ONLINE');  
 alter database datafile <file#> online;  

If the status changes to RECOVER perform an incomplete recovery as below, (This is to update the status, not actual recovery)

 recover database using backup controlfile until cancel; -- type cancel in prompt  

5. Open database with reset logs,

 alter database open resetlogs;  

Additional point to consider is that, a database opened with _ALLOW_RESETLOGS_CORRUPTION=TRUE Is not supported by Oracle, hence make sure to take logical backup (i.e export/import) and recreate the database.

ORA-16433 with PDB setup

In case you are running Oracle 12c and above with PDBs enabled make sure to include below event parameter to pfile along with others mentioned in step 2 above. event="21307096 trace name context forever, level 1"

Comments

Popular posts from this blog

Oracle Multitenant - Create new service for PDB using DBMS_SERVICE

Wait for unread message on broadcast channel - Blocking Sessions