设置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之间的差异(如果有的话)。
任何人都可以对这些差异有所了解吗?
答案 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而不是数据库引擎) )。
然而,这有很多陷阱,例如无法处理多个实例,软件包只能以64位模式运行,无法访问代理帐户等。无论如何,您都不应该从SSMS运行软件包。
如果记忆正确
* 使用项目部署模型,包被编译" (用清单压缩)到.ispac中,存储在SSISDB.internals。* tables的内容中。
最终,存储包的位置不会影响您运行它们的能力。您可以使用DTEXEC,SQL Agent或自定义.NET代码运行包。存储包的选择主要取决于您的管理风格。