2010-06-25 62 views
3

有没有办法在不使用链接服务器的情况下从远程服务器上的另一个作业触发作业?从远程服务器上的另一个作业调用SQL代理作业?

其原因是被触发的作业在2008年执行了SSIS包。调用作业驻留在2005服务器上,因此无法直接执行作业。

服务器没有链接,我希望有一种方法可以从另一个中调用。

+0

你能解释一下情况吗?如果您尝试通过链接服务器执行它,或者出于某种原因不想创建一个服务器,它会不工作吗? – 2010-06-25 12:42:08

+0

我相信这些服务器没有链接,因为一个数据库服务器仅用于通过非标准端口与DMZ中的Web服务器进行通信。另一个是内部数据库服务器。我不知道链接服务器是否会影响到这一点,但这不会是我的问题,如果可能的话,我想尽快解决。 – Feckmore 2010-06-25 12:56:36

回答

3

在SQL代理中使用类型“cmdexec(操作系统)”,然后使用dtexec \ f“.....”命令行用于执行SSIS 2008程序包。这个短暂的工作!

将dtsx文件导出到2005服务器框,并使用dtexec实用程序从命令行调用dtsx。

+0

2008 SSIS包不能在SQL Server 2005中执行。听起来好像这就是你的建议。我只是误解了吗? – Feckmore 2010-06-25 13:31:26

+0

只有当您有一个SQL Server绑定的包时,才能这样做。您可以从文件系统执行软件包。我建议使用它配置文件导出dtsx文件,然后就像使用命令行执行dtexec utitlity在具有类型操作系统(cmdexec)的代理作业步骤中执行它一样。这个短暂的工作! – Baaju 2010-06-25 13:52:21

1

的folllowing代码应该工作,假设你有权限执行xp_cmdshell一个http终点。只需要替换@job_name和@server_name的文本即可。

USE master 
GO 
-- To allow advanced options to be changed. 
EXEC sp_configure 'show advanced options', 1 
GO 
-- To update the currently configured value for advanced options. 
RECONFIGURE WITH OVERRIDE 
GO 
-- To disable the feature. 
EXEC sp_configure 'xp_cmdshell', 1 
GO 
-- To update the currently configured value for this feature. 
RECONFIGURE WITH OVERRIDE 
GO 


declare @retcode int 
declare @job_name varchar(300) 
declare @server_name varchar(200) 
declare @query varchar(8000) 
declare @cmd varchar(8000) 

set @job_name = 'hodes - grant user permissions' ------------------Job name goes here. 
set @server_name = 'msc-dbs04' ------------------Server name goes here. 

set @query = 'exec msdb.dbo.sp_start_job @job_name = ''' + @job_name + '''' 
set @cmd = 'osql -E -S ' + @server_name + ' -Q "' + @query + '"' 

print ' @job_name = ' +isnull(@job_name,'NULL @job_name') 
print ' @server_name = ' +isnull(@server_name,'NULL @server_name') 
print ' @query = ' +isnull(@query,'NULL @query') 
print ' @cmd = ' +isnull(@cmd,'NULL @cmd') 

exec @retcode = xp_cmdshell @cmd 

if @retcode <> 0 or @retcode is null 
begin 
print 'xp_cmdshell @retcode = '+isnull(convert(varchar(20),@retcode),'NULL @retcode') 
end 

USE MASTER 
GO 
-- To update the currently configured value for advanced options. 
RECONFIGURE WITH OVERRIDE 
GO 
-- To disable the feature. 
EXEC sp_configure 'xp_cmdshell', 0 
GO 
-- To update the currently configured value for this feature. 
RECONFIGURE WITH OVERRIDE 
GO 
-- To do not allow advanced options to be changed. 
EXEC sp_configure 'show advanced options', 0 
GO 
-- To update the currently configured value for advanced options. 
RECONFIGURE WITH OVERRIDE 
GO