如何在 SSIS 目录中查看包定义?

How do i see a package definition in SSIS Catalog?

在我的 SQL 服务器实例中,我们使用 SSIS 目录来存储项目和包。我的团队在过去几天遇到了 SQL 代理作业因引用 /SSISDB/Jobs/ProjectName/Package.dtsx 包而失败的问题。那么现在那个包不存在。它可能已被重命名或删除,但它是一个字面上名为 Package.dtsx 的旧包,所以我们不确定它到底做了什么。

我正在加载此事件之前的 msdb、master 和 SSISDB 数据库的备份,看看我是否可以提取实际的包定义、二进制代码或其他东西来告诉我它在做什么。所以我的最终问题是存储在 SSIS 目录中的包,有没有办法从某个地方提取 .dtsx 文件,以便我可以重新创建它(并更好地命名)或者如果它不再重要我可以确认我们不不需要它。

值得庆幸的是,项目目录存储在网络驱动器上,该驱动器有 2 个每日存档副本,存储了几周。我能够进入 Path\ProjectFolder\obj\Developement\ 中的项目文件夹的存档副本,在那里我找到了带有修改日期的 Package.dtsx 文件,证明它是我正在寻找的包。

我遇到的真正问题是试图恢复丢失的包裹,解决方案在上面(目录的存档副本)。但 Ferdipux 回答了如何提取 SSIS 目录项目中提出的问题。

您可以使用 Visual Studio 集成项目导入向导 项目类型从 SSIS 目录中导出整个项目和感兴趣的包。您需要对 SSISDB 具有管理员访问权限才能执行此操作。只需指定要导出的服务器和项目。
如果您想在没有 Visual Studio 的情况下以纯 SQL 进行操作,我的 HO 最简单的方法如下:

  1. 在一些 SQL 数据库上设置 FileTables。

  2. 执行以下 t-SQL 语句:

    DECLARE @t table
    (
    v varbinary(max)
    )
    
    INSERT @t
    EXEC SSISDB.catalog.get_project '<Project Path>','<Project Name>'
    INSERT [dbo].[MyFileTable] (name,file_stream)
    SELECT 'ExportedProject.ispac',v
    FROM @t  
    

这将在 FileTable 文件夹中生成一个 ExportedProject.ispac 文件。