ORA-00474: SMON Process Terminated with Error
ORA-00474 is a critical Oracle database error that occurs when the SMON (System Monitor) background process terminates unexpectedly. SMON is responsible for essential tasks such as instance recovery, temporary segment cleanup, and extent coalescing in dictionary-managed tablespaces. When SMON goes down, Oracle typically brings down the entire instance, requiring immediate DBA intervention.
Top 3 Causes
1. Data Dictionary or System Tablespace Corruption
Block corruption in the SYSTEM or SYSAUX tablespace is one of the leading causes of SMON failure. Since SMON continuously accesses the data dictionary, any I/O error or corrupted block in these tablespaces can cause an immediate crash.
-- Check for block corruption
SELECT FILE#, BLOCK#, BLOCKS, CORRUPTION_TYPE
FROM V$DATABASE_BLOCK_CORRUPTION;
-- Check datafile status
SELECT FILE#, NAME, STATUS
FROM V$DATAFILE
WHERE STATUS != 'ONLINE';
2. Rollback / UNDO Segment Issues During Instance Recovery
After an abnormal shutdown, SMON performs instance recovery by rolling back uncommitted transactions. If an UNDO segment is corrupted or a specific transaction cannot be rolled back, SMON will fail and terminate with an error.
-- Check rollback segment status
SELECT SEGMENT_NAME, STATUS, TABLESPACE_NAME
FROM DBA_ROLLBACK_SEGS;
-- Temporarily offline a problematic UNDO segment via SPFILE
ALTER SYSTEM SET "_offline_rollback_segments" = '_SYSSMU3_123456789$'
SCOPE=SPFILE;
-- Verify UNDO tablespace usage
SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES)/1024/1024, 2) AS TOTAL_MB,
SUM(DECODE(STATUS,'ACTIVE',1,0)) AS ACTIVE_EXTENTS
FROM DBA_UNDO_EXTENTS
GROUP BY TABLESPACE_NAME;
3. OS-Level Resource Exhaustion (OOM / ulimit)
If the server runs out of physical memory or if OS-level limits (ulimit) are set below Oracle's recommended values, the OS OOM Killer may terminate Oracle background processes including SMON. Always check OS logs alongside Oracle alert logs.
-- Check current SGA usage
SELECT POOL, NAME, ROUND(BYTES/1024/1024, 2) AS MB
FROM V$SGASTAT
WHERE POOL IS NOT NULL
ORDER BY BYTES DESC
FETCH FIRST 10 ROWS ONLY;
-- Monitor background process status
SELECT PNAME, PID, SPID, BACKGROUND
FROM V$PROCESS
WHERE BACKGROUND = 1
ORDER BY PNAME;
Quick Fix Solutions
Step 1 – Check Alert Log and Trace Files First
-- Find trace file location
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';
-- Find ADR home
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'ADR Home';
Step 2 – Run RMAN Validation
-- Connect to RMAN and validate the database
-- RMAN> VALIDATE DATABASE;
-- RMAN> VALIDATE DATAFILE 1;
-- After validation, review corruption details
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
Step 3 – Clean Up Temporary Segments Manually
-- Identify temporary segments
SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE = 'TEMPORARY';
-- Shrink TEMP tablespace (Oracle 11g+)
ALTER TABLESPACE TEMP SHRINK SPACE KEEP 100M;
Prevention Tips
1. Enable Block Checksum and Schedule Regular RMAN Validation
Enabling DB_BLOCK_CHECKSUM allows Oracle to detect corruption at the I/O level before it causes critical failures.
-- Enable block checksum
ALTER SYSTEM SET DB_BLOCK_CHECKSUM = TYPICAL SCOPE=BOTH;
-- Confirm the setting
SHOW PARAMETER db_block_checksum;
2. Monitor Background Processes and Tune UNDO Settings
Set up proactive monitoring for all Oracle background processes and ensure UNDO retention and tablespace sizing match your workload patterns.
-- Monitor UNDO health
SHOW PARAMETER undo_retention;
-- Adjust if needed
ALTER SYSTEM SET UNDO_RETENTION = 900 SCOPE=BOTH;
Related Errors
- ORA-00470 – LGWR process terminated with error
- ORA-00472 – PMON process terminated with error
- ORA-00600 – Internal error, often accompanies ORA-00474 in trace files
- ORA-01578 – Oracle data block corrupted, frequently seen alongside SMON failures
📖 Want a more detailed guide?
Check out the full in-depth version (Korean) on oraerror.com — includes detailed analysis, additional SQL examples, and prevention tips.
Top comments (0)