By Franck Pachot

.
In a previous post https://www.dbi-services.com/blog/dataguard-wait-events-have-changed-in-12c/ I mentioned the new processes NSA for ASYNC transport and NSS for SYNC transport. I’m answering a bit late to a comment about the number of processes: yes there is one NSSn process per LOG_ARCHIVE_DEST_n destination in SYNC and the numbers match.

Here is my configuration with two physical standby:

DGMGRL> show configuration
 
Configuration - orcl
 
  Protection Mode: MaxPerformance
  Members:
  orcla - Primary database
    orclb - Physical standby database
    orclc - Physical standby database
 
Fast-Start Failover: DISABLED
 
Configuration Status:
SUCCESS   (status updated 56 seconds ago)

Both are in SYNC:

DGMGRL> show database orclb logxptmode;
  LogXptMode = 'sync'
DGMGRL> show database orclc logxptmode;
  LogXptMode = 'sync'

I can see two NSS processes:

DGMGRL> host ps -edf | grep --color=auto ora_nss[0-9]
Executing operating system command(s):" ps -edf | grep --color=auto ora_nss[0-9]"
oracle    4952     1  0 16:05 ?        00:00:00 ora_nss3_ORCLA
oracle    5322     1  0 16:17 ?        00:00:00 ora_nss2_ORCLA

Here are the two log archive dest:

SQL> select name,value from v$parameter where regexp_like(name,'^log_archive_dest_[23]$');
NAME                VALUE                                                                                                                                                                     
----                -----
log_archive_dest_2  service="ORCLB", SYNC AFFIRM delay=0 optional compression=disable max_failure=0 max_connections=1 reopen=300 db_unique_name="orclb" net_timeout=30, valid_for=(online_logfile,all_roles)
log_archive_dest_3  service="ORCLC", SYNC AFFIRM delay=0 optional compression=disable max_failure=0 max_connections=1 reopen=300 db_unique_name="orclc" net_timeout=30, valid_for=(online_logfile,all_roles)

I set the 3rd one in ASYNC:

DGMGRL> edit database orclc set property logxptmode=ASYNC;
Property "logxptmode" updated

The NSS3 has stopped:

DGMGRL> host ps -edf | grep --color=auto ora_nss[0-9]
Executing operating system command(s):" ps -edf | grep --color=auto ora_nss[0-9]"
oracle    5322     1  0 16:17 ?        00:00:00 ora_nss2_ORCLA

I set the 2nd destination to ASYNC:

DGMGRL> edit database orclb set property logxptmode=ASYNC;
Property "logxptmode" updated

The NSS2 has stopped:

DGMGRL> host ps -edf | grep --color=auto ora_nss[0-9]
Executing operating system command(s):" ps -edf | grep --color=auto ora_nss[0-9]"

Now starting the 3rd destination first:

DGMGRL> edit database orclc set property logxptmode=SYNC;
Property "logxptmode" updated

I can see that nss3 has started as it is the log_archive_dest_3 which is in SYNC now:

DGMGRL> host ps -edf | grep --color=auto ora_nss[0-9]
Executing operating system command(s):" ps -edf | grep --color=auto ora_nss[0-9]"
oracle    5368     1  0 16:20 ?        00:00:00 ora_nss3_ORCLA

Then starting the second one:

DGMGRL> edit database orclb set property logxptmode=SYNC;
Property "logxptmode" updated

Here are the two processes:


DGMGRL> host ps -edf | grep --color=auto ora_nss[0-9]
Executing operating system command(s):" ps -edf | grep --color=auto ora_nss[0-9]"
oracle    5368     1  0 16:20 ?        00:00:00 ora_nss3_ORCLA
oracle    5393     1  0 16:20 ?        00:00:00 ora_nss2_ORCLA

So if you see some SYNC Remote Write events in ASH, look at the program name to know which destination it is.