我有一个SQL Server,它将合并复制配置为大约100个订阅者数据库。
我希望能够使用TSQL强制对发布者的所有订阅者进行临时同步。
我在TechNet上发现了一些调用可执行文件的代码,但出于安全原因等我希望避免这种情况。
没有办法吗?
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
从这里: http://technet.microsoft.com/en-us/library/ms147377(v=sql.105).aspx
答案 0 :(得分:0)
使用EXECUTE msdb.dbo.sp_start_job ....
找到答案请参阅下文,了解在提供的列表中的所有数据库中运行的游标。
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