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

时间:2017-10-23 08:14:32

标签: sql-server sql-server-2008 ssis

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

select 
    name,
    create_date,
    modify_date 
from sys.objects 
where type='P' 
order by modify_date desc

4 个答案:

答案 0 :(得分:3)

根据这个答案,有几种方法:Can I tell the last modified date on an SSIS package from Integration Services。也可以在社区维基上发布SO

  

如果软件包存储在MSDB中,则为no,唯一的日期/时间戳是创建日期。未跟踪修改日期。您需要在重新部署之前删除软件包,以便跟踪修改日期,这实际上只是强制创建日期为您的重新部署日期。

     

在SQL 2005中,存储在MSDB中的软件包的元数据存储在msdb.dbo.sysdtspackages和msdb.dbo.sysdtspackages90中,因此您可以在其中一个表上运行SELECT以查看软件包。对于SQL 2008及更高版本,表名称为sysssispackages。

     

SELECT * from msdb.dbo.sysdtspackages90 WHERE name ='mypackagename'

     

如果服务器上的软件包位置是文件系统,则可以通过Windows资源管理器(或任何您要使用的文件系统工具)获取软件包文件的修改日期。 SQL 2005的路径是[安装驱动器]:\ Program Files \ Microsoft SQL Server \ 90 \ DTS \ Packages。对于SQL 2008,将90替换为100,对于SQL 2012,替换为110。

     

否则,我认为您最好的选择是确保生产服务器上的安全性足够,以便只有那些应该部署软件包的人,然后在您的开发环境中跟踪您的发布日期(源代码管理,无论如何) 。尽管......确实在没有了解情况下确保生产没有变化的情况下确实做不了多少......

答案 1 :(得分:3)

我不允许对最后一个答案发表评论,但在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

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

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

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

答案 2 :(得分:2)

如果您使用SQL Server 2012(或更高版本)并在SSISDB中部署您的包,那么以下代码应该可以正常工作。

USE SSISDB
GO
SELECT MAX(p.last_deployed_time) AS last_deployed_time
FROM   [internal].[projects] p
       INNER JOIN [internal].[packages] pk
            ON  p.project_id = pk.project_id
WHERE  pk.name = 'Package1.dtsx'

答案 3 :(得分:1)

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

您需要的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

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

在程序包的代码视图的前20行中,您将找到类似以下内容的

DTS:VersionBuild="62"

如果您只需要知道最新部署的版本是什么,无论它是否实际执行,都可以查询:

select  max(version_build) as latest_version_build
from    internal.packages
where   name = 'Package1.dtsx'