Data Guard

Why Thread Specification is Mandatory for Standby Redo Logs

By November 30, 2025No Comments3 min read

In this blog post, we will learn what are the conseuqences if you don’t mention the thread number when you create standby redo logs in Data Guard environment. In my test case i have primary and ADG, then ADG is sending redo to the downstream capture database.

I have the standby redo logs created on the downstream capture database but ADG is complaining as there are no standby redo logs for thread 1. When i check in Downstream capture database and i can see the standby redo logs but surprisingly the thread is not 1 but its 0.

Below is the alert log info from the ADG database:

2025-11-27T12:38:41.281138+05:30
MRP0 (PID:3310): Media Recovery Waiting for T-1.S-45
2025-11-27T12:38:41.408066+05:30
 rfs (PID:3381): Primary database is in MAXIMUM PERFORMANCE mode
 rfs (PID:3381): Re-archiving LNO:6 T-1.S-44
 rfs (PID:3381): No SRLs available for T-1
2025-11-27T12:38:41.423645+05:30
 rfs (PID:3381): Opened log for T-1.S-45 dbid 255168521 branch 1129029195
2025-11-27T12:38:42.340024+05:30
 rfs (PID:3381): Archived Log entry 26 added for B-1129029195.T-1.S-45 ID 0xf353f09 LAD:2
 rfs (PID:3381): No SRLs available for T-1
2025-11-27T12:38:42.355586+05:30
 rfs (PID:3381): Opened log for T-1.S-46 dbid 255168521 branch 1129029195

The thread i’ve from the ADG database is 1.

SQL> select distinct thread# from v$log;

   THREAD#
----------
	 1

SQL> 

Now from Downstream capture database below is the standby redo log groups:

SQL> select distinct thread# from v$standby_log;

   THREAD#
----------
	 0

SQL> SELECT group#, thread#, sequence#, status
FROM   v$standby_log
ORDER  BY group#;
SQL>   2    3  
    GROUP#    THREAD#  SEQUENCE# STATUS
---------- ---------- ---------- ----------
	 3	    0	       0 UNASSIGNED
	 4	    0	       0 UNASSIGNED
         5	    0	       0 UNASSIGNED

Why this behaviour? When you add standby redo log groups without thread number and it is by default assigned under thread 0.

In this case you must drop the thread 0 standby redo logs and again add the SRL with thread number as below.

SQL> alter database drop standby logfile group 3;

Database altered.

SQL> c/3/4
  1* alter database drop standby logfile group 4
SQL> /

Database altered.

SQL> c/4/5
  1* alter database drop standby logfile group 5
SQL> /

Database altered.

SQL> alter database add standby logfile thread 1 size 200m;

Database altered.

SQL> /
/

Database altered.

SQL> 
Database altered.

Now, Let’s verify the standby redo logs:

SQL> SELECT group#, thread#, sequence#, status
FROM   v$standby_log
ORDER  BY group#;
  2    3  
    GROUP#    THREAD#  SEQUENCE# STATUS
---------- ---------- ---------- ----------
	 3	    1	       0 UNASSIGNED
	 4	    1	       0 UNASSIGNED
	 5	    1	       0 UNASSIGNED

SQL>  

This is very common mistake we do when adding redo logs, but impact is high – You cannot make it real time apply.

Leave a Reply