MRP Background Process in Oracle Data Guard – Complete Oracle DBA Guide
The MRP (Managed Recovery Process) is one of the most critical background processes in Oracle Data Guard environments. It is responsible for applying archived redo logs received from the primary database to the standby database.
Without a properly functioning MRP process, the standby database cannot remain synchronized with the primary database, which can lead to recovery lag, failover risks, and disaster recovery failures.
In Oracle production environments, DBAs frequently troubleshoot MRP issues related to:
- Archive log apply lag
- Managed recovery failures
- Standby synchronization problems
- Redo apply performance issues
- Gap resolution errors
- Real-time apply failures
In this complete Oracle DBA guide, you will learn:
- What the MRP process is
- How MRP works in Oracle Data Guard
- How redo apply works
- How to start and stop MRP
- How to monitor recovery progress
- How to troubleshoot MRP failures
- Best practices for standby recovery management
What is MRP in Oracle?
MRP stands for Managed Recovery Process.
It is a background process in Oracle Data Guard standby databases responsible for applying archived redo logs and redo data received from the primary database.
The MRP process continuously performs media recovery on the standby database to maintain synchronization with the primary database.
Why MRP is Important
MRP plays a critical role in Oracle disaster recovery architecture.
It ensures that:
- Standby databases remain synchronized
- Redo logs are applied continuously
- Recovery objectives are maintained
- Failover environments remain usable
- Disaster recovery remains operational
If MRP stops or fails, standby lag increases and disaster recovery readiness becomes compromised.
How MRP Works in Oracle Data Guard
The Oracle Data Guard redo transport and recovery process works as follows:
- Primary database generates redo
- Redo logs are archived
- Archived redo logs are transferred to standby
- RFS process receives redo on standby
- MRP applies redo to standby database
This continuous redo apply mechanism keeps the standby database synchronized with the production database.
MRP Process Architecture
Important Data Guard background processes include:
- LGWR – Log Writer
- ARCH – Archiver Process
- RFS – Remote File Server
- MRP – Managed Recovery Process
- LNS – Log Network Server
The MRP process works together with these components to maintain Data Guard recovery consistency.
| Oracle Data Guard Architecture |
Check MRP Process Status
The following query checks whether MRP is running:
SQL> SELECT process, status, thread#, sequence# FROM v$managed_standby;
Typical output:
PROCESS STATUS THREAD# SEQUENCE# MRP0 APPLYING_LOG 1 12345
This indicates that the standby database is actively applying redo logs.
Start MRP Process
To start managed recovery:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
This command starts background redo apply mode.
Enable Real-Time Apply
Real-time apply allows standby recovery directly from standby redo logs.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Real-time apply minimizes standby lag.
Stop MRP Process
To stop managed recovery:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
This stops redo apply safely.
Monitor Archive Log Apply Progress
Check Last Applied Archive
SQL> SELECT thread#, MAX(sequence#) FROM v$archived_log WHERE applied='YES' GROUP BY thread#;
Check Archive Gap
SQL> SELECT * FROM v$archive_gap;
This query identifies missing archive logs.
Check Data Guard Lag
SQL> SELECT name, value FROM v$dataguard_stats;
This shows transport lag and apply lag.
Common MRP Errors
DBAs frequently encounter the following issues:
- ORA-16016
- ORA-10458
- ORA-01153
- ORA-00308
- Archive gaps
- Corrupted archive logs
- Standby redo log issues
Common Causes of MRP Failure
- Missing archive logs
- Network interruptions
- Corrupted redo logs
- Standby filesystem full
- Incorrect Data Guard configuration
- Database role inconsistencies
- Recovery conflicts
Real-World Production Scenario
A production Oracle Data Guard environment experienced increasing standby lag after network instability interrupted redo transport.
The MRP process stopped automatically due to missing archive sequences.
DBAs identified archive gaps using:
SQL> SELECT * FROM v$archive_gap;
After transferring missing archive logs manually and restarting MRP, standby synchronization resumed successfully.
How to Resolve Archive Gaps
Step 1: Identify Missing Logs
SQL> SELECT * FROM v$archive_gap;
Step 2: Copy Missing Archives
Transfer missing archive logs from primary to standby.
Step 3: Register Archive Logs
SQL> ALTER DATABASE REGISTER LOGFILE '/u01/archive/arch_12345.arc';
Step 4: Restart MRP
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Real-Time Apply vs Archive Apply
| Mode | Description |
|---|---|
| Archive Apply | Redo applied after archive log creation |
| Real-Time Apply | Redo applied directly from standby redo logs |
Benefits of Real-Time Apply
- Lower standby lag
- Faster failover readiness
- Improved disaster recovery
- Better synchronization
- Reduced data loss risk
Best Practices for MRP Management
- Monitor standby lag regularly
- Use real-time apply whenever possible
- Monitor archive gap status
- Validate standby redo logs
- Perform regular Data Guard health checks
- Monitor network stability
- Keep standby storage healthy
Common DBA Mistakes
- Ignoring standby lag alerts
- Not configuring standby redo logs
- Failing to monitor archive gaps
- Using incorrect recovery commands
- Ignoring network transport errors
Important Oracle Views for Data Guard Monitoring
Check Managed Standby Processes
SQL> SELECT process, status FROM v$managed_standby;
Check Data Guard Statistics
SQL> SELECT * FROM v$dataguard_stats;
Check Standby Logs
SQL> SELECT * FROM v$standby_log;
Performance Tuning for MRP
MRP performance depends on:
- Network bandwidth
- Redo log sizing
- Storage performance
- Archive generation rate
- Standby I/O performance
Optimizing these components improves standby recovery speed.
Frequently Asked Questions (FAQ)
What is MRP in Oracle?
MRP is the Managed Recovery Process responsible for applying redo logs on standby databases.
How do I start MRP?
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
How do I stop MRP?
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
What causes MRP failure?
MRP failures are commonly caused by archive gaps, missing logs, network interruptions, or corruption.
What is real-time apply?
Real-time apply allows standby databases to apply redo directly from standby redo logs without waiting for archive creation.
Related Posts
- ORA-01194 file 1 needs more recovery
- ORA-01555 snapshot too old error
- ORA-00474 SMON process terminated with error
- ORA-00600 internal error code arguments
👉 Check our complete guide: Oracle Error Codes Guide
Conclusion
The MRP Managed Recovery Process is one of the most important Oracle Data Guard components responsible for standby database synchronization and disaster recovery readiness.
Understanding how MRP works, how to monitor recovery, and how to troubleshoot standby lag issues is essential for Oracle DBAs managing production Data Guard environments.
By following the monitoring queries, troubleshooting techniques, and best practices explained in this guide, DBAs can maintain stable redo apply operations and reliable disaster recovery environments.
Really helpful!!
ReplyDeletefrom where you got the name 'data3/proddata/daw_INV_06.dbf' to recreate the datafile 59
ReplyDeleteHi,
ReplyDeleteActual name of data file# 59 is 'data3/proddata/daw_INV_06.dbf' as on primary server you can check.
After corruption it create the temporary datafile as '/d01/oracle/proddb/10.2.0/dbs/UNNAMED00059'
Thanks
Rana
This really helped. I have real-time apply set and I didn't have to bring the datagaurd instance down to fix it. I just wanted to add how I found out which datafile it was. I'm sure others already know but if not this is what I did: PRIMARY DB
ReplyDeleteSQL>select file#,name from v$datafile where file#=xxx; (number you get from the unnamed sql) this will help when you do the alter database create datafile.