Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调度多个相互依赖的SQL Server代理作业的做法是什么?_Sql_Sql Server_Ssis_Scheduled Tasks - Fatal编程技术网

调度多个相互依赖的SQL Server代理作业的做法是什么?

调度多个相互依赖的SQL Server代理作业的做法是什么?,sql,sql-server,ssis,scheduled-tasks,Sql,Sql Server,Ssis,Scheduled Tasks,我的团队目前安排作业的方式是通过SQL Server作业代理。这些作业中的许多都依赖于其他内部服务器,而这些服务器又有自己的SQL Server作业,需要运行这些作业才能使数据保持最新 这在每个SQL Server作业的开始时间和长度上都创建了依赖项。作业A可能取决于作业B的完成情况,因此我们将作业B安排在作业A之前的某个预计时间。所有这些过程都是非常主观的,不可扩展,因为我们添加了更多的作业和服务器,从而产生了更多的依赖性 我很想摆脱主观地安排这些工作,并希望多米诺骨牌按正确的顺序落下。我想知

我的团队目前安排作业的方式是通过SQL Server作业代理。这些作业中的许多都依赖于其他内部服务器,而这些服务器又有自己的SQL Server作业,需要运行这些作业才能使数据保持最新

这在每个SQL Server作业的开始时间和长度上都创建了依赖项。作业A可能取决于作业B的完成情况,因此我们将作业B安排在作业A之前的某个预计时间。所有这些过程都是非常主观的,不可扩展,因为我们添加了更多的作业和服务器,从而产生了更多的依赖性

我很想摆脱主观地安排这些工作,并希望多米诺骨牌按正确的顺序落下。我想知道调度SQL Server作业的公认做法是什么。人们是否使用SSI将工作链接在一起?SQL Server作业代理中是否已经内置了处理此问题的工具


处理相互依赖的多个SQL Server作业调度的公认方法是什么?

我以前使用Control-M在不同环境中调度多个相互依赖的作业。Control-M通常通过使用批处理文件(我记得是批处理文件)来执行SSIS包

我们有一个复杂的环境,并排托管2个数据仓库(1个国际数据仓库和1个美国本地数据仓库)。有些作业依赖于其他作业,有些作业依赖于其他作业,等等,但是通过使用Control-M,我们可以很容易地确定依赖性(它有一个非常好的直观GUI)。我想到的另一个工具是潮汐调度器


作业调度没有固定的标准,但我认为可以肯定地说,作业调度完全取决于组织需要什么。例如,财务工作可能依赖于销售,销售依赖于库存等等。但关键是,如果您需要具有作业相互依赖性,那么使用第三方软件(如Control-M)是一种安全的选择。它可以控制不同环境下的作业,并让您真正感受到公司范围内的作业控制

我不确定这会有多大帮助,但我们最终为日程安排创建了一个电子邮件解决方案

我们构建了一个访问exchange邮箱的电子邮件阅读器。作业完成后,他们会向邮件阅读器发送电子邮件以开始另一项作业。另一个好的方面是,大多数应用程序都内置了电子邮件通知,因此定制编程的方式确实不多

我们实际上只是在第一时间构建它来处理来自许多其他合作伙伴的数据文件。给他们一个电子邮件地址比给他们设置ftp站点等要容易得多


邮件阅读器应用程序现在已经发展到包括基本过滤、一天中的时间安排、使用信号量防止并发作业等。它真的非常有效。

我们也需要管理多个代理作业之间的依赖关系-在查看了各种第三方工具并出于各种原因对它们进行了折扣之后(主要是与使用第三方软件有关的内部限制)我们决定创建自己的解决方案

该解决方案以配置数据库为中心,该数据库保存有关需要运行的进程(作业)以及它们如何分组(批处理)的详细信息,以及进程之间的依赖关系

使用的配置表摘要:

批处理—一组相关进程的高级定义,包括元数据,如最大并发进程和当前批处理实例等。 流程-与流程(作业)相关的元数据,如名称、最大等待时间、最早运行时间、状态(启用/禁用)、批次(流程所属批次)、流程作业名称等。 批次实例-给定批次的活动实例 流程实例-给定批次的流程的活动实例 进程依赖关系-依赖关系矩阵 批次实例状态-查找批次实例状态 流程实例状态-流程实例状态的loolup

每个批处理有2个控制作业-启动批处理和更新批处理。第一个处理启动属于它的所有进程,第二个是在任何给定批处理中最后运行的控制作业,处理更新结果状态

每个进程都有一个与之相关联的代理作业,由启动批处理作业执行-进程有一个上限并发性(在批处理配置中定义),因此每次最多启动x个进程,然后启动批处理将等待空闲插槽可用后再启动下一个进程

process agent作业步骤调用一个模板化的SSIS包,该包处理实际的ETL工作以及关于流程是否需要运行和是否必须等待依赖项等的决策

我们目前正在寻求转向Service Broker解决方案,以实现更大的灵活性和控制


无论如何,这里可能有太多的细节,没有足够的示例,因此VS2010项目可根据要求提供。

您是否使用任何第三方作业调度工具,如Control M?@Rajiv目前没有,请随时回答Control M如何使我们的作业调度更易于管理。