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.