簡體   English   中英

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

[英]Find SSIS Package last modified/deployed date - SQL Server

我想通過執行SQL Query找到SSIS包的最后修改日期。 例如,下面的查詢以desc順序返回過程的最后修改日期。 我期待SSIS包的同類查詢。 可以從DB獲取這些信息嗎?

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

我不允許對最后一個答案發表評論,但在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

那么你總是得不到正確的答案,因為你正在查看項目的部署日期。

對SSIS包的版本控制的跟蹤似乎是在2016年的項目級別,而不是在包級別,所以我不知道是否有辦法找到特定包的部署的確切日期。

有關此問題的一些有用信息,請參閱https://www.timmitchell.net/post/2016/11/11/ssis-catalog-project-versioning/

根據這個答案,有幾種方法: 我可以在Integration Services上告知SSIS包的最后修改日期。也可以在社區維基上找到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。

否則,我認為您最好的選擇是確保生產服務器上的安全性足夠,以便只有那些應該部署軟件包的人,然后在您的開發環境中跟蹤您的發布日期(源代碼管理,無論如何)。 盡管如此......在確定生產沒有改變的情況下,確實沒有做太多的事情。

如果您使用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'

在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

如何查詢代碼庫是您的下一個挑戰。

在包的代碼視圖中,在前20行中,您將找到如下內容:

DTS:VersionBuild="62"

如果您只需要知道最新部署的版本是什么,無論它是否實際執行,您都可以查詢:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM