Tuesday, July 22, 2014

Transactions waiting to be replicated to Subscription Database (Transactional Replication)

While troubleshooting Replication issues it’s always a question till what point transaction has been replicated to subscription and from which point transaction are in distribution database waiting to be replicated to subscription database.
Replication Architecture

Let’s say distributor agent failed to replicate transaction from distributor to subscriber due to some reason and now after restarting the distributor agent it’s still not replicating the transactions.
There could be n number of reason due to which distributor agent may fail.
In this post we will focus on how to get last transaction replicated to subscriber database and what all transaction are waiting in the distributor database to be replicated.
Every time distributor agent replicates the transaction from distributor to subscriber, it does an entry in a system table dbo.MSreplication_subscriptions which exists in subscriber database.
The MSreplication_subscriptions table contains one row of replication information for each Distribution Agent.
Code: SELECT publisher,publisher_db,publication,transaction_timestamp 
FROM dbo.MSreplication_subscriptions

Transaction_timestamp value is same as xact_seqno and till this sequence number all the transaction are replicated to subscription database.
In case u does not have access to the subscription database and to find out the last replicated xact_seqno to subscriber database from distributor database
sp_MSget_last_transaction Publicationid,Publication_database
sp_MSget_last_transaction 2,TestDB
Connect to the Distributor
Code: select * from MSrepl_commands Where xact_seqno>Transaction_timestamp value
This will give you those records which are in distributor and not been replicated to subscriber database after the last replicated xact_seqno 
in subscriber database (dbo.MSreplication_subscriptions)
sp_browsereplcmds : @xact_seqno_start, @xact_seqno_end
The stored procedure will use to view pending commands in the distributor database.|
It will display the commands in the readable format.


Replication monitor will also give the xact_seqno at which distributor agent failed


You can also check the error on browsing MSrepl_errors table in distribution database.
select
*
From MSrepl_errors

In this case error is :”The row was not found at the Subscriber when applying the replicated command:
To resolve the same I have xact_seqno and command id , I simple deleted the record from the MSrepl_commands at the distributor.Once done distributor agent will start replicating pending transaction to subscriber.
DELETE from MSrepl_commands where command_id=1295 and xact_seqno=0x000260AD000000100021

No comments:

Post a Comment