Environment

-> I worked on a disaster recovery drill. As part of the DR, I failed over all database servers from Primary Datacentre to Secondary Datacentre.
-> We had an environment which is same as above environment. Remote distributor, Publisher and subscriber servers were configured in Always ON availability group.
-> After the failover, distribution agent failed with below error,

Error messages:
Agent 'JBPUB-PRIMARY-JBREPL-TranProducts-JBREPLSUB-1' is retrying after an error. 8 retries attempted. See agent job history in the Jobs folder for more details.
-> I then checked the distribution agent job in SQL Server Agent and found below error,

Date 9/4/2020 11:41:07 AM
Log Job History (JBPUB-PRIMARY-JBREPL-TranProducts-JBREPLSUB-1)
Step ID 2
Server JBDIST-DR
Job Name JBPUB-PRIMARY-JBREPL-TranProducts-JBREPLSUB-1
Step Name Run agent.
Duration 00:11:51
Sql Severity 0
Sql Message ID 0
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
Message
2020-09-04 11:52:54.399 Copyright (c) 2016 Microsoft Corporation
2020-09-04 11:52:54.399 Microsoft SQL Server Replication Agent: distrib
2020-09-04 11:52:54.399
2020-09-04 11:52:54.399 The timestamps prepended to the output lines are expressed in terms of UTC time.
2020-09-04 11:52:54.399 User-specified agent parameter values:
-Subscriber JBREPLSUB
-SubscriberDB JBREPL_SUB
-Publisher JBPUB-PRIMARY
-Distributor JBDistributor
-DistributorSecurityMode 1
-Publication TranProducts
-PublisherDB JBREPL
-Continuous
-XJOBID 0x3B3FD20E052A694491BD0660C526FA21
-XJOBNAME JBPUB-PRIMARY-JBREPL-TranProducts-JBREPLSUB-1
-XSTEPID 2
-XSUBSYSTEM Distribution
-XSERVER JBDIST-DR
-XCMDLINE 0
-XCancelEventHandle 0000000000001BA8
-XParentProcessHandle 0000000000000358
2020-09-04 11:52:54.399 Startup Delay: 4172 (msecs)
2020-09-04 11:52:58.581 Connecting to Distributor 'JBDistributor'
2020-09-04 11:52:58.612 Parameter values obtained from agent profile:
-bcpbatchsize 2147473647
-commitbatchsize 100
-commitbatchthreshold 1000
-historyverboselevel 1
-keepalivemessageinterval 300
-logintimeout 15
-maxbcpthreads 1
-maxdeliveredtransactions 0
-pollinginterval 5000
-querytimeout 1800
-skiperrors
-transactionsperhistory 100
2020-09-04 11:52:58.612 Connecting to Subscriber 'JBREPLSUB'
2020-09-04 11:52:58.659 Initializing
2020-09-04 11:52:58.706 Agent message code 21021. The subscription does not exist.
-> From the replication monitor, Right Click Distribution agent and click on “Agent Profiles”,


-> It seems like there is a custom distribution agent profile created and used in Database Server in Primary Datacentre (JBDIST-PRIMARY) that is not available in Database Server at Secondary Datacentre (JBDIST-DR).
-> Now that we failed over from Primary Datacentre to Secondary Datacentre, this missing “Agent Profile” is causing issue.
-> Execute below query on distribution database in Database Server JBDIST-PRIMARY which is currently a secondary replica after the failover and check what agent profile was used by the distribution agent previously,
select a.id, a.name, a.publisher_database_id,a.publisher_db, a.subscriber_db,
b.profile_id , b.profile_name from MSdistribution_agents a
INNER JOIN msdb..MSagent_profiles b on a.profile_id = b.profile_id

-> In my case the the “Agent profile” missing is JBS-Load.
-> Now I will create this missing distribution agent profile in replication monitor. Right click Distribution agent and click on “Agent profile” and Click “New”.


-> I could find what were the parameters used as part of Agent profile “JBS-Load” and I created it as below,


-> Stop and start the distribution agent and it should work fine.
-> You can select “Default agent profile” if you are not aware of the custom profile created. But please understand it may not have the setting same as custom profile, which means there are possibilities of issues.
-> It is always a best practice to compare the agent profiles in replication monitor as part of DR planning if you dont want to run into issues like this.
Thank You,
Vivek Janakiraman
Disclaimer:
The views expressed on this blog are mine alone and do not reflect the views of my company or anyone else. All postings on this blog are provided “AS IS” with no warranties, and confers no rights.