SSIS包存储与MSDB

时间:2015-03-17 01:28:29

标签: sql-server ssis

设置SQL代理作业时,可以选择“SQL Server”或“SSIS包存储”等选项。如果我选择“SSIS包存储”并浏览到MSDB而不是文件系统,我可以选择存储在sysssispackages中的SSIS包。

但是,SSMS在选择SSIS包存储时自动选择的/ DTS开关的文档似乎仅适用于存储在文件系统中的包。

我还注意到,如果执行作业的用户没有文件系统权限,则在选择SSIS包存储时作业将失败 - > MSDB - >包含“访问被拒绝”错误或“〜对象不存在”的包。由于文件系统上不存在包,为什么选择SQL Server时执行工作并且在使用SSIS包存储时失败?即使选择了MSDB,dtexec是否真的在文件系统上寻找dtsx文件?我有可能是错误的,了解SQL Server和SSIS包存储 - >引用运行代理的服务器时,MSDB是相同的。

我做了一些研究,从MSDB文件夹中选择时,我无法清楚地区分使用SQL Server和SSIS Package Store之间的差异(如果有的话)。

任何人都可以对这些差异有所了解吗?

1 个答案:

答案 0 :(得分:9)

存储SSIS包有2个位置:文件系统或SQL Server。其余的是语义。

文件系统

您可以使用SSIS包存储,它只是安装位置中众所周知的位置。

%Program Files%\Microsoft SQL Server\{Version}\DTS\Packages

或者您可以选择您喜欢的文件系统中的任何位置。如果您使用此路由,则需要确保SQL代理帐户或凭证代理,或者,如果您从xp_cmdshell运行包,则SQL Server服务帐户可以访问该位置。

如果您想要使用Package Store(即我提到的文件夹)的唯一优势是您可以使用SSMS中存在的Integration Services管理工具(通过连接到Integration Services而不是数据库引擎) )。

enter image description here

然而,这有很多陷阱,例如无法处理多个实例,软件包只能以64位模式运行,无法访问代理帐户等。无论如何,您都不应该从SSMS运行软件包。

SQL Server

如果记忆正确

  • 2005 - 存储在msdb.dbo.sysdtspackages90
  • 2008 - 存储在msdb.dbo.sysssispackages中(我似乎记得2008 RTM使用不同的表,或者重用了90表,但是已经修补了)
  • 2008 R2 - 存储在msdb.dbo.sysssispackages
  • 2012(包部署模型) - 存储在msdb.dbo.sysssispackages
  • 2012(项目部署模型) - 存储在SSISDB.catalog.packages *
  • 2014(包部署模型) - 存储在msdb.dbo.sysssispackages
  • 2014(项目部署模型) - 存储在SSISDB.catalog.packages *

* 使用项目部署模型,包被编译" (用清单压缩)到.ispac中,存储在SSISDB.internals。* tables的内容中。

结束语

最终,存储包的位置不会影响您运行它们的能力。您可以使用DTEXEC,SQL Agent或自定义.NET代码运行包。存储包的选择主要取决于您的管理风格。

参考