我们有一个包含大量数据的AIX服务器,每天晚上我们将这些数据转储到CSV,以便导入到MS SQL Server中以报告原因。
目前,进程中的每个步骤都是未链接的,并且只是定时触发 – 例如,AIX系统上的CSV转储进程在凌晨3点开始,花费$ x时间完成,然后MS SQL Server集成服务工作从早上6点开始。
因此,在这个过程中,有很多“死亡时间”,这是很好的消除。
那么,有没有办法从Unix系统触发SQL Server Integration Services作业?
你可以使用freeTDS (或jTDS,如果你使用那个叫做java的东西)让你从Unix / AIX访问你的sql服务器。
从FreeTDS您可以对SQL Server进行身份validation并运行您喜欢的任何T-SQL。 您可以通过调用驻留在MSDB中的sproc_start_job来“触发”SSIS作业,以按名称或job_id启动作业。
一个简单的方法是轮询。 如果您添加一个elemnt“如果csv文件存在,导入csv文件”到您的ssis数据包的开头,您可以安排数据包运行每季度一小时。
SSIS不直接支持基本系统中的这种types的function。 两个选项是:
在Windows端创build一个轮询器,查找unix作业已经完成的一些信号,然后运行SSIS包。 如果文件需要一些时间来生成,则应该将作业封装到某个文件中,以便在完成时更新另一个文件上的时间戳。 另一个select是让轮询器扫描目录并查找每次运行时创build的新控制文件。 如果轮询者在午夜和凌晨4点之间每隔5分钟运行一次(比如说),它将以最小的延迟时间来完成工作。 如果它没有在合理的窗口中提取文件,则可以假设在生成任务时发生了错误,并使任务失败。
购买像Control-M这样的跨平台调度工具。 这种types的系统旨在跨多个平台协调这些工作。 然而,企业调度程序相当昂贵,可能是一个单一的工作矫枉过正。 你可能会考虑这种types的系统,如果你有很多这样的问题正在进行,但对于一个单一的任务,它真的用大锤开核桃。
SSIS包使用dtexec运行。 因此,如果您有任何方式已经从AIX触发了Windows端的进程,则可以使用相同的技术在SQL Server上启动SSIS包。