[英]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.