Forzar una sincronización de todos los suscriptores de replicación de SQL Server de un editor

StackOverflow https://stackoverflow.com/questions/19824762

  •  05-07-2022
  •  | 
  •  

Pregunta

Tengo un servidor SQL, que tiene una replicación fusionada configurada en alrededor de 100 bases de datos de suscriptores.

Me gustaría poder forzar una sincronización ad hoc a todos los suscriptores del editor utilizando TSQL.

He encontrado algún código en Technet que llama a un ejecutable, pero esperaba evitarlo por razones de seguridad, etc.

¿Alguna forma de hacerlo sin?

REM -- Declare the variables.
SET Publisher=%instancename%
SET Subscriber=%instancename%
SET PublicationDB=AdventureWorks2008R2
SET SubscriptionDB=AdventureWorks2008R2Replica 
SET Publication=AdvWorksProductsTran

REM -- Start the Distribution Agent with four subscription streams.
REM -- The following command must be supplied without line breaks.
"C:\Program Files\Microsoft SQL Server\100\COM\DISTRIB.EXE" -Subscriber %Subscriber% 
-SubscriberDB %SubscriptionDB% -SubscriberSecurityMode 1 -Publication %Publication% 
-Publisher %Publisher% -PublisherDB %PublicationDB% -Distributor %Publisher% 
-DistributorSecurityMode 1 -Continuous -SubscriptionType 0 -SubscriptionStreams 4

De aquí:http://technet.microsoft.com/en-us/library/ms147377(v=sql.105).aspx

¿Fue útil?

Solución

Descubre la respuesta usando ejecutar msdb.dbo.sp_start_job ....

Vea a continuación un cursor que se ejecuta a través de todas las bases de datos en una lista suministrada.

DECLARE @DatabaseName varchar(50)
DECLARE @Job_Name NVARCHAR(100)

DECLARE @SQL NVARCHAR(max)

DECLARE dc CURSOR FAST_FORWARD READ_ONLY FOR
SELECT UniqueName
FROM mylistofdatabases

OPEN dc
FETCH NEXT FROM dc INTO @DatabaseName

WHILE @@FETCH_STATUS = 0
BEGIN

    --Use MSDB systables to find the new SQL Agent Job ID.
    SELECT TOP 1 @Job_Name =J.name 
    FROM msdb.dbo.sysjobs AS J
    INNER JOIN msdb.dbo.sysjobsteps AS S
    ON S.job_id = J.job_id
    WHERE S.command LIKE '%' + @DatabaseName + '%'
    AND J.name LIKE '%mainjob%'
    ORDER BY J.date_created DESC

    --Kick off the job
    SET @SQL = 'EXECUTE msdb.dbo.sp_start_job N''' + CAST(@Job_Name AS VARCHAR(100)) + ''''
    EXEC(@SQL)

    FETCH NEXT FROM dc INTO @DatabaseName

END

CLOSE dc
DEALLOCATE dc
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top