我們注意到最近有一個問題,重新部署的SSIS包有時似乎沒有包含最新的更改......當我使用記事本搜索dtsx時,我在代碼中看到修改後的腳本,所以更改肯定存在。重新部署SSIS包 - 緩存?
我的假設是,SSIS包的腳本組件最終被編譯到程序中的某個程序集中 - 這很可能是因爲我想如果沒有先編譯它,C#代碼就無法運行。所以在理論上,如果這些程序集最終會被緩存,並且不會立即被覆蓋(出於某種原因),這可以解釋這個問題。
使我認爲我的理論是正確的唯一「證據」是如果我在某個點繼續運行包,它會突然轉向新的代碼。
但是,到目前爲止,我還沒有找到爲什麼以及如何發生這種情況,如果是......任何人都可以幫忙嗎?
UPDATE: MSDN說:「不像早期版本,你可以指出腳本是否被預編譯,所有的腳本在SQL Server 2008集成服務(SSIS)和更高版本預編譯的。」 - 如果按預編譯的,它們表示代替預編譯版本運行的實際程序包(我認爲這是因爲程序包本身似乎沒有編譯,因爲代碼在記事本中是可見的),所以必須有一種方法強制引擎覆蓋預編譯的程序集......但是如何?
UPDATE: 一個SSIS的四個核心部件是SQL ServerIntegration Services服務,這是一個Windows服務。顯然這個服務會緩存組件/任務元數據,以便SSIS運行時引擎可以輪詢緩存以查看安裝的內容,這可能有助於加快程序包加載時間。但是,如果程序包存儲在文件系統中(不在SQL集成服務中)並由代理程序作業執行,代理作業將使用64位版本的DTEXEC來執行程序包。我還沒有找到有證據表明任何緩存都會涉及到,但是在執行的驗證階段檢查一些參數肯定有選項,例如版本號 - 可能是有原因的。
只是說我們今天在這裏有完全相同的問題。重新啓動代理程序或SQLSISS都有幫助。 – 2013-05-31 13:24:28
訣竅是從涉及的表中添加和刪除列。顯然,這不是我們要走的路,我們肯定對這個問題的答案感興趣 – 2013-06-03 06:22:07
另外:我認爲緩存存儲在磁盤的某個位置,因爲它在服務器重啓後仍然存在 – 2013-06-03 06:25:45