SSIS包存储与MSDB

ejl*_*oud 6 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包存储之间的差异(如果有的话).

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

bil*_*nkc 10

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

文件系统

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

%Program Files%\Microsoft SQL Server\{Version}\DTS\Packages
Run Code Online (Sandbox Code Playgroud)

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

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

在此输入图像描述

然而,这有很多陷阱,例如无法处理多个实例,软件包只能以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.*表的内容中.

包起来

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

参考

  • 谢谢比尔.如果我将我的包放在MSDB节点下的集成服务中并使用SQL Agent调用该包,我可以从列表中选择SSIS包存储或SQL Server.当我使用SSIS包存储时,包的路径是MSDB/blah但是当我使用SQL Server时它是/ blah.我还注意到Package Store使用/ DTS开关和其他/ SQL.我很惊讶我可以在同一个地方找到相同的包,无论我选择SSIS包存储还是SQL Server.知道这里的差异是什么吗?它们对我来说似乎差不多. (2认同)