Sql-Server

SSIS 2012 元數據在重新部署時不刷新

  • February 4, 2016

我有三個系統:DEV、UAT、PROD,都執行 SQL 2012 Enterprise。我有現有的包可以在這些系統上命中對象。每次我必須做出影響元數據的更改時,我更新目標系統上的對象,然後更新指向系統的 SSIS 包,然後在系統上重新部署包是不夠的。即使包在重新部署之前已經更新以處理新的元數據,我仍然必須進入每個系統並再次更新包,然後它才能辨識新的元數據。

這種行為對我來說是新的。在 BIDS 2008 中,一個系統上的元數據刷新將持續到它部署到的任何系統。現在,如果我在部署之前更改連接管理器,我必須返回並重新刷新元數據,然後才能發送它。似乎保留了每個連接設置的元數據,並且在更新包時不會更新。

舉個例子,我可以清楚地說明這一點:我在所有三個系統上的目標表中都添加了一個列。我在指向 DEV 時更新包以反映更改,然後部署。到目前為止,一切都很好。然後我更新連接管理器以指向 UAT,並在那裡部署更改的包。在這一點上,我希望不需要刷新元數據,因為 UAT 中目標表的模式與 DEV 中的模式相匹配,包在上次刷新時指向該模式。但是,包的行為就好像它沒有更新一樣,並且需要刷新其元數據,同時明確指向該系統才能工作。

為了解決這個問題,我為連接管理器上的 ServerName 屬性添加了一個表達式,由 System::MachineName 確定,我認為問題是在我正在開發的機器上更改連接管理器會立即觸發檢查那裡的對象,即使打開了延遲驗證。沒有這樣的運氣;它仍然顯示相同的行為。

我在網上找不到太多關於此的資訊,以確定它是 SSDT 2012 的預期行為還是我做錯了什麼或真正的錯誤。

有人對這個問題有任何見解嗎?

老實說,您不應該在部署之前編輯包以指向另一個環境。請查看包配置以了解在不編輯包本身的情況下部署包的方法。

可能您的連接字元串和其他設置應該只是從配置文件中讀取的變數。

由於您使用的是 SQL 2012,因此您可能應該使用環境(感謝@MartinSmith)

我的 SQL Server 2012 企業版生產盒之前也遇到過類似的問題。即使我會確保在部署到生產盒之前在 SSIS 包下刷新所有內容,但當它在生產盒上執行時它只是無法工作,說對像不存在。我也打開了所有驗證,但這沒有幫助。

因此,為了嘗試一下,我從生產環境中刪除了整個項目(我們使用 SVN 進行更改,因此我可以將其恢復到該修訂版)並重新部署該項目。既然我這樣做了,每當 SSIS 更新時,它每次都在工作,並且正在正確查看更改。

我認為 SSISDB 內部可能存在錯誤或某些東西,導致項目本身的此元數據或內部元數據沒有被刷新,但刪除和讀取對我有用,希望它對你有用。

引用自:https://dba.stackexchange.com/questions/81199