ADS uses the client engine to connect to the destination. A background process is triggered when a new record is put into the replication queue, or when a specific interval has been reached after a previous connection failure, or when you manually trigger the process (adsprocessreplicationqueue). The target only gets SQL commands via the replication, so there’s nothing it can detect that a replication is completely processed.
- Every time a record is added to the replication queue (when it is modified and passes the filter if one exists), it triggers a “process replication queue” request. If, though, the target was offline, then the length of time “depends”. A replication sweep thread periodically checks for items to process. If it succeeds in processing items, it increases the frequency. A failure to process items reduces the frequency. I believe it ranges between 2 minutes and 1 hour. But you can force the replication to “try now”. The system procedure sp_ProcessReplicationQueues will do that. Or you can right click on SUBSCRIPTIONS in ARC and choose “Process Replication Queues” to do the same thing.
- I don’t think there is a simple mechanism for telling the target that replication is finished. One way to do this would be to write a monitoring process that runs at the source database and checks to see if the replication queue has any records in it. It could report to the target (e.g., via a stored procedure) when the queue is empty.