Skip to content

ORA-01033: Oracle Initialization or Shutdown in Progress

ORA-01033: Oracle Initialization or Shutdown in Progress

Section titled “ORA-01033: Oracle Initialization or Shutdown in Progress”

Error Text: ORA-01033: ORACLE initialization or shutdown in progress

The ORA-01033 error is returned to a connecting client when the Oracle instance is not yet fully open for normal connections. The instance is either in the process of starting up (sitting in NOMOUNT or MOUNT state, or performing media recovery) or it is in the process of shutting down. Until the startup sequence completes and the database transitions to OPEN status, only privileged SYSDBA/SYSOPER connections are accepted.

This error can also appear when a startup is stuck — for example, a background process has failed or media recovery cannot proceed — leaving the instance in a permanently half-open state.

1. Database Still Starting Up (NOMOUNT or MOUNT State)

Section titled “1. Database Still Starting Up (NOMOUNT or MOUNT State)”

The instance has been started with STARTUP NOMOUNT or STARTUP MOUNT and has not yet progressed to OPEN. Connections from applications or non-privileged users will fail until ALTER DATABASE OPEN completes.

A DBA issued SHUTDOWN, SHUTDOWN IMMEDIATE, or SHUTDOWN TRANSACTIONAL. The instance is draining sessions or waiting for transactions. New connection attempts receive ORA-01033.

3. Background Process Failure During Startup

Section titled “3. Background Process Failure During Startup”

A critical background process (SMON, PMON, LGWR, DBWR, CKPT) failed during startup. Oracle halts the startup sequence and the instance sits in a partially open state or terminates and attempts a restart, during which connections fail.

After a crash or incomplete recovery, ALTER DATABASE OPEN requires RESETLOGS or additional recovery steps. The database is mounted but not open; non-SYSDBA connections receive ORA-01033.

In Oracle RAC, a node may be in the middle of instance startup while the listener already has a dynamic service entry from a previous registration. Clients connecting to that node receive ORA-01033 until the instance fully opens.

In Oracle Multitenant (12c+), the CDB may be open while one or more PDBs are in MOUNT state. Connections to a mounted PDB receive ORA-01033.

-- Requires SYSDBA connection
SELECT instance_name, status, database_status, active_state
FROM v$instance;
-- Check database open mode
SELECT name, db_unique_name, open_mode, log_mode
FROM v$database;
-- View startup/shutdown phases recorded in alert log via ADR
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE originating_timestamp > SYSDATE - 1/24
ORDER BY originating_timestamp DESC
FETCH FIRST 50 ROWS ONLY;
-- Verify all critical background processes are running
SELECT name, description, pname, state
FROM v$bgprocess
WHERE paddr != '00'
ORDER BY name;
-- Identify any dead background processes
SELECT b.name, b.description
FROM v$bgprocess b
WHERE b.paddr = '00'
AND b.name IN ('SMON','PMON','LGWR','DBWR','CKPT','ARCH');
-- Requires connection to CDB$ROOT as SYSDBA
SELECT con_id, name, open_mode, restricted
FROM v$pdbs
ORDER BY con_id;

Check Active Startup or Recovery Operations

Section titled “Check Active Startup or Recovery Operations”
-- Look for outstanding recovery or datafile status issues
SELECT file#, status, error, recover, fuzzy, checkpoint_change#
FROM v$datafile_header
WHERE status != 'ONLINE'
OR recover = 'YES';
-- Check redo log status during recovery
SELECT group#, status, archived, sequence#
FROM v$log
ORDER BY group#;
-- Always start diagnosis with a privileged connection
sqlplus / as sysdba
-- Or from a remote client
sqlplus sys@//hostname:1521/service as sysdba
-- Immediately check where the instance stands
SELECT status FROM v$instance;
SELECT open_mode FROM v$database;

If the instance is in MOUNT state and startup has stopped:

-- If datafiles are consistent, open the database
ALTER DATABASE OPEN;
-- If instance crash recovery is needed, Oracle performs it automatically:
ALTER DATABASE OPEN; -- SMON will roll forward/back as needed
-- If media recovery is required
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
-- Open a single PDB
ALTER PLUGGABLE DATABASE pdb_name OPEN;
-- Open all PDBs
ALTER PLUGGABLE DATABASE ALL OPEN;
-- Save state so PDBs open automatically after future CDB startups
ALTER PLUGGABLE DATABASE ALL SAVE STATE;

If a previous shutdown did not complete cleanly and the instance appears stuck:

-- STARTUP FORCE performs a SHUTDOWN ABORT followed by a fresh STARTUP
STARTUP FORCE;
-- If STARTUP FORCE hangs, shut down the OS-level processes first, then start cleanly
-- At OS: ps -ef | grep ora_ | grep <SID> -> kill -9 each process
-- Then: sqlplus / as sysdba -> STARTUP
-- Check alert log for the specific background process error
-- ADRCI command: show alert -tail 200
-- If LGWR failed, check redo log group status
SELECT group#, status FROM v$log;
-- Clear a corrupt redo log group (only if contents are not needed for recovery)
ALTER DATABASE CLEAR LOGFILE GROUP 2;
-- If DBWR failed, check for OS-level I/O errors on datafile paths
-- v$datafile_header will show read/write errors
SELECT file#, error FROM v$datafile_header WHERE error IS NOT NULL;

6. Handle a Shutdown That Will Not Complete

Section titled “6. Handle a Shutdown That Will Not Complete”
-- Check what is blocking the shutdown
SELECT sid, serial#, username, status, last_call_et, sql_id
FROM v$session
WHERE username IS NOT NULL
AND status = 'ACTIVE'
ORDER BY last_call_et DESC;
-- Kill blocking sessions to allow SHUTDOWN IMMEDIATE to complete
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
-- If shutdown remains stuck after killing sessions, escalate
SHUTDOWN ABORT;
-- Follow immediately with a clean startup to perform crash recovery:
STARTUP;

1. Monitor Startup Completion Automatically

Section titled “1. Monitor Startup Completion Automatically”
-- Create a startup trigger to log open time and notify
CREATE OR REPLACE TRIGGER after_db_open
AFTER STARTUP ON DATABASE
BEGIN
INSERT INTO dba_startup_log(startup_time, instance_name)
VALUES (SYSDATE, SYS_CONTEXT('USERENV','INSTANCE_NAME'));
COMMIT;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/

2. Use PFILE/SPFILE Validation Before Startup

Section titled “2. Use PFILE/SPFILE Validation Before Startup”
-- Create a PFILE from SPFILE to validate parameters before a restart
CREATE PFILE = '/tmp/init_validate.ora' FROM SPFILE;
-- Review the file, then start:
STARTUP PFILE='/tmp/init_validate.ora';

3. Configure Automatic PDB Open on CDB Startup

Section titled “3. Configure Automatic PDB Open on CDB Startup”
-- Ensure PDBs open automatically — run once after PDB creation
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE ALL SAVE STATE;
-- Confirm saved state
SELECT con_name, state FROM dba_pdb_saved_states;
  • Always check V$INSTANCE.STATUS and V$DATABASE.OPEN_MODE before concluding a restart is complete
  • Review the alert log ($ORACLE_BASE/diag/rdbms/<dbname>/<sid>/trace/alert_<sid>.log) immediately after any unexpected ORA-01033
  • Use SHUTDOWN IMMEDIATE rather than SHUTDOWN ABORT in normal operations to allow clean shutdown and minimize recovery time
  • In RAC environments, wait for LREG to register services before directing application traffic to a restarted node
  • Set ENABLE_PLUGGABLE_DATABASE and SAVE STATE to avoid forgetting to open PDBs after maintenance
  • ORA-01034 - Oracle Not Available (instance is completely down)
  • ORA-01109 - Database Not Open (connected to unmounted/mounted instance)
  • ORA-01012 - Not Logged On (lost session during shutdown)
  • ORA-00600 - Internal Error (background process crash)
  1. Check status immediately as SYSDBA

    SELECT status, database_status FROM v$instance;
    SELECT open_mode FROM v$database;
  2. Open the database if it is in MOUNT

    ALTER DATABASE OPEN;
  3. Force restart a completely stuck instance

    SHUTDOWN ABORT;
    STARTUP;
-- Confirm database is fully open
SELECT name, open_mode FROM v$database;
SELECT instance_name, status FROM v$instance;
-- Open any PDBs that remained mounted
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE ALL SAVE STATE;
-- Review alert log for the root cause before considering the incident closed
-- adrci> show alert -tail 100
-- Gather diagnostic package if background process failure occurred
EXEC DBMS_SUPPORT.PACKAGE_FILE('/tmp/oradump', 'DIAG', SYSDATE-1, SYSDATE);