Hello Experts,
We have scripts to stop and start replication process. one of the script to stop replication is as mentioned below.Running it doesn’t stop replication – it’s not getting into the part of the code where the LogReader is being stopped. Despite number of futile efforts I am not able to find the root cause. Please help.
--------------------------
@echo off
setlocal enabledelayedexpansion
set OUTPUT_FILE=D:\Stop_Replication_ACS_CA.txt
set TEMP_FILE=D:\Temp_ACS_CA.txt
set P1_SERVER=
set P1_USER=""
set P1_PWD=""
set P1_DIST_DB=Distribution
set P1_DB=ACS
set P1_LR_AGENT_ID=DE43E98A-59D8-4C06-ADB6-AE9B963FE392
set P1_DIST_AGENT_ID=0B9140AC-4894-46C1-BF00-3EEB1F327847
set P2_SERVER=
set P2_USER=""
set P2_PWD="!"
set P2_DIST_DB=Distribution
set P2_DB=ACS_CA
set P2_LR_AGENT_ID=F991C76A-DECC-45C9-AA99-591014C06BF8
set P2_DIST_AGENT_ID=48F4F537-FA13-49A5-8E8F-065B37EB2FB0
>nul copy nul %OUTPUT_FILE%
echo Connecting to %P2_SERVER% to find the last transaction id....
for /f "tokens=*" %%a in ('sqlcmd -S %P2_SERVER% -U %P2_USER% -P %P2_PWD% -Q "SET NOCOUNT ON; SELECT convert(varbinary, transaction_timestamp) FROM %P2_DB%.dbo.MSreplication_subscriptions" ^|findstr /B /C:"0x" ') do (
set LAST_TXN_AT_SUB=%%a
echo !LAST_TXN_AT_SUB!
echo Connecting to %P1_SERVER% to find count of unreplicated transactions....
for /f "tokens=*" %%b in ('sqlcmd -S %P1_SERVER% -U %P1_USER% -P %P1_PWD% -Q "SET NOCOUNT ON; select count(distinct (xact_seqno)) from %P1_DIST_DB%..MSrepl_commands Where xact_seqno ^> '!LAST_TXN_AT_SUB!'" ^|findstr /R "[0-9]" ') do (
set TXN_COUNT=%%b
echo !TXN_COUNT!
echo -------------------------------------------------------
:while1
if !TXN_COUNT! GTR 0 (
echo Waiting for Transactions to be replicated....
TIMEOUT 10 >nul
echo Connecting to %P2_SERVER% to find the last transaction id....
for /f "tokens=*" %%c in ('sqlcmd -S %P2_SERVER% -U %P2_USER% -P %P2_PWD% -Q "SET NOCOUNT ON; SELECT convert(varbinary, transaction_timestamp) FROM %P2_DB%.dbo.MSreplication_subscriptions" ^|findstr
/B /C:"0x" ') do (
set LAST_TXN_AT_SUB=%%c
echo !LAST_TXN_AT_SUB!
echo Connecting to %P1_SERVER% to find count of unreplicated transactions....
for /f "tokens=*" %%d in ('sqlcmd -S %P1_SERVER% -U %P1_USER% -P %P1_PWD% -Q "SET NOCOUNT ON; select count(distinct (xact_seqno)) from %P1_DIST_DB%..MSrepl_commands Where xact_seqno ^> '!LAST_TXN_AT_SUB!'" ^|findstr /R "[0-9]" ') do (
set TXN_COUNT=%%d
echo !TXN_COUNT!
echo -------------------------------------------------------
)
)
GOTO :while1
)
echo Stopping Logreader agent on %P1_SERVER% : %P1_DB%
sqlcmd -S %P1_SERVER% -U %P1_USER% -P %P1_PWD% -Q "SET NOCOUNT ON; EXEC msdb..sp_stop_job @job_id = '%P1_LR_AGENT_ID%' " > %TEMP_FILE% 2>&1
type %TEMP_FILE% >>%OUTPUT_FILE%
type %TEMP_FILE%
del %TEMP_FILE%
echo -------------------------------------------------------
echo Stopping Distribution agent on %P1_SERVER% : %P1_DB%
sqlcmd -S %P1_SERVER% -U %P1_USER% -P %P1_PWD% -Q "SET NOCOUNT ON; EXEC msdb..sp_stop_job @job_id = '%P1_DIST_AGENT_ID%' " > %TEMP_FILE% 2>&1
type %TEMP_FILE% >>%OUTPUT_FILE%
type %TEMP_FILE%
del %TEMP_FILE%
echo -------------------------------------------------------
)
)
echo -------------------------------------------------------
echo Connecting to %P1_SERVER% to find the last transaction id....
for /f "tokens=*" %%a in ('sqlcmd -S %P1_SERVER% -U %P1_USER% -P %P1_PWD% -Q "SET NOCOUNT ON; SELECT convert(varbinary, transaction_timestamp) FROM %P1_DB%.dbo.MSreplication_subscriptions" ^|findstr /B /C:"0x" ') do (
set LAST_TXN_AT_SUB=%%a
echo !LAST_TXN_AT_SUB!
echo Connecting to %P2_SERVER% to find count of unreplicated transactions....
for /f "tokens=*" %%b in ('sqlcmd -S %P2_SERVER% -U %P2_USER% -P %P2_PWD% -Q "SET NOCOUNT ON; select count(distinct (xact_seqno)) from %P2_DIST_DB%..MSrepl_commands Where xact_seqno ^> '!LAST_TXN_AT_SUB!'" ^|findstr /R "[0-9]" ') do (
set TXN_COUNT=%%b
echo !TXN_COUNT!
echo -------------------------------------------------------
:while2
if !TXN_COUNT! GTR 0 (
echo Waiting for Transactions to be replicated....
TIMEOUT 10 >nul
echo Connecting to %P1_SERVER% to find the last transaction id....
for /f "tokens=*" %%c in ('sqlcmd -S %P1_SERVER% -U %P1_USER% -P %P1_PWD% -Q "SET NOCOUNT ON; SELECT convert(varbinary, transaction_timestamp) FROM %P1_DB%.dbo.MSreplication_subscriptions" ^|findstr
/B /C:"0x" ') do (
set LAST_TXN_AT_SUB=%%c
echo !LAST_TXN_AT_SUB!
echo Connecting to %P2_SERVER% to find count of unreplicated transactions....
for /f "tokens=*" %%d in ('sqlcmd -S %P2_SERVER% -U %P2_USER% -P %P2_PWD% -Q "SET NOCOUNT ON; select count(distinct (xact_seqno)) from %P2_DIST_DB%..MSrepl_commands Where xact_seqno ^> '!LAST_TXN_AT_SUB!'" ^|findstr /R "[0-9]" ') do (
set TXN_COUNT=%%d
echo !TXN_COUNT!
echo -------------------------------------------------------
)
)
GOTO :while2
)
echo Stopping Logreader agent on %P2_SERVER% : %P2_DB%
sqlcmd -S %P2_SERVER% -U %P2_USER% -P %P2_PWD% -Q "SET NOCOUNT ON; EXEC msdb..sp_stop_job @job_id = '%P2_LR_AGENT_ID%' " > %TEMP_FILE% 2>&1
type %TEMP_FILE% >>%OUTPUT_FILE%
type %TEMP_FILE%
del %TEMP_FILE%
echo -------------------------------------------------------
echo Stopping Distribution agent on %P2_SERVER% : %P2_DB%
sqlcmd -S %P2_SERVER% -U %P2_USER% -P %P2_PWD% -Q "SET NOCOUNT ON; EXEC msdb..sp_stop_job @job_id = '%P2_DIST_AGENT_ID%' " > %TEMP_FILE% 2>&1
type %TEMP_FILE% >>%OUTPUT_FILE%
type %TEMP_FILE%
del %TEMP_FILE%
echo -------------------------------------------------------
)
)
echo -------------------------------------------------------
echo For more details are logged in %OUTPUT_FILE%
echo Press any key to exit
pause >nul
-----------------------------------
Best Regards,
Kapil Relan