我们有一个包含大量数据的 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 进行身份验证并运行您喜欢的任何 T-SQL。您可以通过调用驻留在 MSDB 中的 sproc sp_start_job 按名称或 job_id 启动作业来“触发”SSIS 作业。
一个简单的方法是轮询。如果您在 ssis 数据包的开头添加元素“如果 csv 文件存在,则导入 csv 文件”,您可以安排数据包每一刻钟运行一次。
SSIS 不直接支持基础系统中的此类功能。两个选项是:
在 Windows 端构建一个轮询器,寻找一些表明 unix 作业已完成的迹象,然后运行 SSIS 包。如果文件需要一些时间来生成,您应该将作业包装在完成时更新另一个文件的时间戳的内容中。另一种选择是让轮询器扫描目录并查找每次运行时创建的新控制文件。如果轮询器在午夜和凌晨 4 点之间每 5 分钟运行一次(比如说),它将以最小的延迟接手工作。如果它没有在合理的窗口中拾取文件,您可以假设在生成文件时出现问题并导致任务失败。
购买像 Control-M 这样的跨平台调度工具。这种类型的系统旨在跨多个平台协调这些工作。但是,企业调度程序非常昂贵,并且对于单个作业来说可能是多余的。如果您遇到很多此类问题,您可能会考虑使用这种类型的系统,但对于单个任务,它真的是用大锤敲碎核桃。
SSIS 包使用 dtexec 运行。因此,如果您已经通过任何方式从 AIX 触发 Windows 端的进程,则可以使用相同的技术在 SQL Server 上启动 SSIS 包。