在SQL Server Agent中通过文件系统调用SSIS包时可否切换数据源?
SQL Server Agent文件系统调度SSIS包切换数据源方案
完全可以实现切换,无需将包部署到SSIS目录即可操作,常用的三种落地方法如下:
方案1:使用SSIS包配置功能
这是文件存储类SSIS包原生支持的参数化能力,开发阶段在包中开启包配置,将数据库连接管理器的连接字符串设为可配置项,支持存储到XML配置文件、SQL Server表或系统环境变量中。
调度时只需要针对生产、UAT两套环境分别准备对应配置,在SQL Server Agent作业步骤的dtexec调用命令中通过/ConfigFile参数指定对应配置文件即可,示例命令如下:
生产环境作业只需替换为生产对应的配置文件路径即可。dtexec /File "C:\SSIS_Packages\业务同步包.dtsx" /ConfigFile "C:\SSIS_Config\UAT数据库配置.dtsConfig"方案2:运行时直接覆盖连接管理器属性
不需要提前修改SSIS包,直接在dtexec调用时通过/Set参数动态覆盖连接字符串,只需提前确认包内目标连接管理器的名称即可。
示例命令(假设包内数据库连接管理器命名为业务库):
生产环境作业直接替换上述命令中连接字符串的实例名、库名等参数即可。dtexec /File "C:\SSIS_Packages\业务同步包.dtsx" /Set \Package.Connections[业务库].Properties[ConnectionString];"Data Source=UAT数据库实例名;Initial Catalog=UAT业务库;Provider=SQLNCLI11.1;Integrated Security=SSPI;"方案3:通过项目/包参数传入连接值
如果你使用项目部署模型开发SSIS包,仅是最终存储为文件形式,可将连接字符串封装为项目参数或包参数,运行时通过/Par参数传入对应环境的参数值即可,示例命令:dtexec /File "C:\SSIS_Packages\业务同步包.dtsx" /Par $Project::业务库连接串;"你的UAT库连接字符串"
注意事项
- 你也可以不用手动写命令行,直接在SQL Server Agent作业步骤的SSIS配置界面「设置」标签页中手动添加属性覆盖配置,操作更直观不易出错。
- 需提前给SQL Agent服务账号或作业指定的运行账号开放两个数据库的对应访问权限,避免切换后连接失败。
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

