
Oracle 19c Data Guard Recovery
1. Objective
Restore synchronization between DATAVERA primary and DATAVERADR physical standby while minimizing RPO impact using the least disruptive method first.
2. Environment Scope
| Role | Environment |
|---|---|
| Primary DB | DATAVERA — Oracle 19c Production |
| Standby DB | DATAVERADR — Physical Standby DR |
| Sync Target | Zero transport lag / Zero apply lag |
3. Initial Gap Validation
Check Lag
-- Run on DATAVERADR
SELECT name, value
FROM v$dataguard_stats
WHERE name IN ('transport lag','apply lag');
Check Archive Gap
-- Run on DATAVERADR SELECT thread#, low_sequence#, high_sequence# FROM v$archive_gap;
Check Recovery State
-- Run on DATAVERADR SELECT process, status, thread#, sequence# FROM v$managed_standby;
Expected: MRP0 | WAIT_FOR_GAP
4. Recovery Method Hierarchy
| Method | When to Use | Priority | Risk |
|---|---|---|---|
| Archive Log Manual Transfer | Logs exist in FRA | 1st | Low |
| Service-Based Recovery | Logs unavailable, network healthy | 2nd | Medium |
| SCN Incremental | Large unresolved gap | 3rd | High |
5. Option 1 — Archive Log Manual Transfer
-- Run on DATAVERADR ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- Run on DATAVERA-- you need to update the example sequence to actual sequence SELECT sequence#, name FROM v$archived_log WHERE sequence# BETWEEN 10577 AND 10676 ORDER BY sequence#;
-- Run on DATAVERA OS scp /fra/DATAVERA/arch_10577*.arc oracle@dataveradr:/fra/DATAVERADR/ scp /fra/DATAVERA/arch_10578*.arc oracle@dataveradr:/fra/DATAVERADR/ -- Continue sequence transfer until gap closes
-- Run on DATAVERADR ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Preferred when archive logs still exist because no RMAN recovery is needed.
6. Option 2 — Recovery From Service
-- Run on DATAVERADR ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- Run on DATAVERADR OS rman target / RMAN> RECOVER STANDBY DATABASE FROM SERVICE DATAVERA; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Best when FRA logs are unavailable but network path to primary is stable.
7. Option 3 — SCN Incremental Recovery
-- Run on DATAVERADR SELECT CURRENT_SCN FROM v$database;
-- Run on DATAVERA RMAN BACKUP INCREMENTAL FROM SCN 4823901 DATABASE FORMAT '/backup/inc_%U';
---Transfer the backups from the Primary to DR Server. scp /backup/inc_*.bkp oracle@dataveradr:/backup/
-- Run on DATAVERADR CATALOG START WITH '/backup/'; RECOVER DATABASE NOREDO; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
8. Validation After Recovery
-- Run on DATAVERADR
SELECT name, value
FROM v$dataguard_stats
WHERE name IN ('transport lag','apply lag','apply finish time');
SELECT process, status
FROM v$managed_standby
WHERE process LIKE 'MRP%';
SELECT * FROM v$archive_gap;
Expected: zero lag, MRP0 APPLYING_LOG, archive gap returns no rows.
9. Operational Guidance
| Step | Method | Impact |
|---|---|---|
| 1 | Archive Transfer | No production load |
| 2 | Service Recovery | Minimal primary read I/O |
| 3 | SCN Incremental | Backup + transfer overhead |
Caution
The information provided in this document is intended for educational and internal reference purposes only. Although the procedure has been tested internally, no guarantee is given that it will behave identically in all environments. Use this guide at your own risk, and always validate the complete process in a test environment before applying it to production systems.
The information provided in this document is intended for educational and internal reference purposes only. Although the procedure has been tested internally, no guarantee is given that it will behave identically in all environments. Use this guide at your own risk, and always validate the complete process in a test environment before applying it to production systems.