我有一个托管多个不同数据库的服务器,它们都具有相同的结构,还有一个SSIS包库,其中一些在客户端数据库中很常见,而另一些则是客户端特定的。
我知道您可以在MSDB中存储包,但这是整个SQL实例的共享存储 - 是否可以将包附加到特定数据库?
答案 0 :(得分:3)
实际上,当您将包存储到msdb中时,它们存储在特定实例的msdb中。在所有实例中运行SELECT * FROM dbo.sysdtspackages90
(2005)或SELECT * FROM dbo.sysssispackages
(2008),您将确定哪个实例正在托管您的软件包。如果您使用文件夹,我可以使用这些queries的更高版本。
我相信你观察的是这些工具的神器。 SQL Server Integration Services Service只有一个实例。此服务不会阻止您在特定实例中存储包,这只会使它更复杂一些。或者正如我所看到的那样,通过放弃GUI(SSMS),您可以摆脱非自动化管理的束缚。
如何将包推送到其他命名实例?您可以按照上面的链接中的描述编辑服务的.ini文件,然后重新连接到SSMS中的Integration Services事物,或使用命令行或查询方法来管理包。我们在之前的商店中使用了SSISDeployManifest,成功处理了部署。有一个与.ssisDeploymentManifest关联的GUI,您可以使用它来处理您的部署,或者欢迎您使用.NET对象模型来处理部署。我对我的PowerShell SSIS deployment and maintenance感到满意,但你的里程却各不相同。
最后,为了给出命令行部署的具体示例,以下内容将位于C的根目录中的名为MyPackage.dtsx的程序包部署到当前计算机上的命名实例,并将它们部署到MSDB的根目录中。
dtutil.exe /file "C:\MyPackage.dtsx" /DestServer .\Dev2008 /COPY SQL;"MyPackage"
dtutil.exe /file "C:\MyPackage.dtsx" /DestServer .\Test2008 /COPY SQL;"MyPackage"
我有generating calls to dtexec的早期版本的PowerShell脚本,而不是直接使用对象库。
如果您有其他问题,请告诉我