查找SSIS包的上次修改/部署日期-SQL Server

Ask*_*_SO 2 sql-server ssis sql-server-2008

我想通过执行SQL查询找到SSIS包的最后修改日期。例如,下面的查询按desc顺序返回过程的最后修改日期。我期望对SSIS包进行相同类型的查询。是否可以从DB获得这些信息?

select 
    name,
    create_date,
    modify_date 
from sys.objects 
where type='P' 
order by modify_date desc
Run Code Online (Sandbox Code Playgroud)

Dor*_*ley 5

我不允许对最后一个答案发表评论,但是在SQL Server 2016中,因为包可以单独部署,也可以作为完整项目部署(如果使用),

USE SSISDB
GO
SELECT MAX(p.last_deployed_time) AS last_deployed_time
FROM   [internal].[projects] p
       INNER JOIN [internal].[packages] pk
Run Code Online (Sandbox Code Playgroud)

这样一来,您将永远无法获得正确的答案,因为您正在查看项目的部署日期。

SSIS软件包的版本跟踪似乎是在2016年在项目级别上,而不是在软件包级别上,所以我不知道是否有办法找到部署特定软件包的确切日期。

请参阅https://www.timmitchell.net/post/2016/11/11/ssis-catalog-project-versioning/了解有关此方面的一些良好信息。


Gil*_*esh 5

在 SSISDB 中,您可以看到在特定时间执行了哪个 VERSION_BUILD。如果您使用代码存储库(TFS?),您可以找到哪个版本的包具有该 version_build,以及该版本何时存储在存储库中。这就是您想知道的修改日期。

您需要的 sql 语句的 SSIS 部分可能是这样的:

use SSISDB

select  top 50 
         xs.execution_path
        ,cast(xs.start_time as datetime2(0)) as start_time
        ,x.project_version_lsn
        ,p.version_build
from    internal.executables x
join    internal.executable_statistics xs on x.executable_id = xs.executable_id
join    internal.packages p 
                on  x.project_id = p.project_id 
                and x.project_version_lsn = p.project_version_lsn
                and x.package_name = p.name

where   x.package_name = 'Package1.dtsx'
and     x.executable_name = 'Package1'

order by start_time desc
Run Code Online (Sandbox Code Playgroud)

如何查询您的代码存储库是您的下一个挑战。

在包的代码视图中,在前 20 行中,您会发现类似以下内容:

DTS:VersionBuild="62"
Run Code Online (Sandbox Code Playgroud)

如果只需要知道最新部署的版本是多少,而不管是否实际执行过,可以查询:

select  max(version_build) as latest_version_build
from    internal.packages
where   name = 'Package1.dtsx'
Run Code Online (Sandbox Code Playgroud)