2016-12-20 84 views
0

是否有任何方法让SQL Server代理每分钟运行一个包(这将是一个包装器),即使它已经从先前的执行中运行。如果SQL Server代理已经运行,它似乎不会启动。有没有办法来覆盖这种行为?SSIS SQL Server代理启动作业已经运行

我想做一些诸如

Wrapper.dtsx 
    --> read from table of packages to run, and select next in line 
    --> execute package task with the package dynamically set from previously 
     selection 
    --> exit 

表有以下软件包(假设一些排名最终会存在)

a.dtsx (say runs for 5 mins) 
    b.dtsx (say runs for 4 mins) 
    c.dtsc (say runs for 6 mins) 

    12:01 am a.dtsx is executed 
    12:02 am b.dtsx is executed 
    12:03 am c.dtsx is executed 

在现阶段,我只能拿以下发生

12:01 am a.dtsx is executed 
    12:06 am b.dtsx is executed 
    12:10 am c.dtsx is executed 

回答

0

嗯,这个SQL Jobs的行为是MS SQL Server的标准,不能改变。对于您的情况,如果您使用SQL 2012及更高版本,则可以使用新的SSIS目录与异步执行。通过使用这个工作,你的工作将开始执行包并退出;因此您可以在一分钟内自由开始。缺点 - 工作状况只会显示包是否已启动,结果是什么;你必须执行自己的执行监控。
切换到异步包执行需要SSIS 2012+,建立SSIS目录数据库,将包切换到Project部署模型。毕竟,创建SQL作业启动包,指定所有需要的连接和参数,保存它。然后在上下文菜单中选择脚本作业 - >删除并创建到 - >新查询编辑器窗口。在查询文本 - 找到子串

/Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True 

并切换到

/Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";False 

然后运行脚本来更新你的工作。
这个奇怪的脚本操作是需要的,因为默认情况下SQL Job会同步执行包并且不会在用户界面中公开异步选项。

相关问题