Oracle Data Guard is a powerful feature that ensures high availability, data protection, and disaster recovery for enterprise databases. One of the critical configurations in Data Guard is setting up LOG_ARCHIVE_DEST_n parameters, which define how redo logs are transported from the primary database to the standby database.
In this blog, we’ll break down the options used in the following configuration:
LOG_ARCHIVE_DEST_2 =
service="orcl_Dr",
ASYNC NOAFFIRM
delay=0
optional
compression=disable
max_failure=0
reopen=300
db_unique_name="orcldr"
net_timeout=30,
valid_for=(online_logfile,all_roles)
Parameter Breakdown
1. service=”orcl_Dr”
- Specifies the Oracle Net service name used to connect to the standby database.
- In this case,
orcl_Dris the TNS alias pointing to the standby.
2. ASYNC
- Redo transport mode is asynchronous.
- Redo data is sent without waiting for acknowledgment from the standby.
- Benefits: Less impact on primary performance.
- Trade-off: Slight risk of data loss if the primary fails before redo reaches standby.
3. NOAFFIRM
- The standby does not confirm that redo blocks are written to disk before acknowledging receipt.
- Improves performance but reduces durability guarantees.
4. delay=0
- No delay in applying redo logs.
- Redo is applied immediately as it arrives.
- Useful for real-time disaster recovery.
5. optional
- Marks this destination as optional.
- If the standby is unavailable, the primary continues without error.
- Contrast: A mandatory destination would block log archiving if unreachable.
6. compression=disable
- Redo transport compression is disabled.
- Compression can save bandwidth but adds CPU overhead.
- Best choice depends on network vs CPU resources.
7. max_failure=0
- Number of consecutive failures allowed before the destination is considered failed.
0means no tolerance—any failure marks the destination as failed.
8. reopen=300
- If a failure occurs, Oracle retries after 300 seconds (5 minutes).
- Prevents constant retry attempts that could overload the system.
9. db_unique_name=”orcldr”
- Identifies the unique name of the standby database.
- Ensures redo is sent to the correct destination in multi-standby setups.
10. net_timeout=30
- Sets the network timeout to 30 seconds.
- If no response is received within this time, the transport is considered failed.
11. valid_for=(online_logfile,all_roles)
- Defines when this destination is valid:
- online_logfile → redo logs generated online.
- all_roles → applies whether the database is in primary or standby role.
- Ensures flexibility during role transitions (switchover/failover).
Why This Matters
This configuration is designed for:
- Performance: Using
ASYNCandNOAFFIRMreduces overhead on the primary. - Resilience:
optionalensures the primary keeps running even if the standby is down. - Recovery readiness:
valid_for=(online_logfile,all_roles)ensures redo transport works seamlessly during role changes.