Sql-Server

SSIS - sp 在調試模式下記錄計數器,但不是來自代理作業

  • July 19, 2018

在 SSIS 項目中,我執行了許多 usp 來儲存行計數器,例如在 ETL 過程中提取的行數、插入的行數等。

我的 SSIS 項目設置為通過代理作業執行。包執行正常,沒有任何錯誤,但我的所有行數都記錄為 0。當我在調試模式下執行項目時,一切正常,並且計數器正確。因此,我認為這是代理作業的權限問題,但一切正常,計數器日誌正在寫入,只是沒有更新。

我對代理作業執行進行了跟踪(原諒我,它更快),可以看到 sp 呼叫正在執行,並且傳入了 0。所以代理作業、sp 和 ssis 項目正在執行他們所要求的.

需要說明的兩個關鍵點:

  1. 我的行數變數通過腳本任務冒泡到父包,父包執行 sp 以記錄行數。但由於這在調試模式下工作,我認為這部分沒問題。
  2. 我已將屬性 ProtectionLevel 設置為 EncryptSensitiveWithPassword。這是我第一次使用這個屬性值,我認為當從代理作業執行項目時,它可能會阻止腳本任務中的程式碼執行。

有人可以就此提供一些建議嗎?為什麼代理作業執行不會記錄行數,但調試模式會?如果此屬性設置阻止腳本任務執行,我該如何啟用它?

提前感謝您提供的任何幫助。

編輯:

我不知道這是否有任何相關性,但這個項目是在開發伺服器上建構的,並部署到 SSISDB 所在的實時伺服器和代理作業執行的地方。

這似乎歸結為項目的 TargetServerVersion 屬性。我沒有意識到的是,在 SSDT 升級的地方,TargetServerVersion 預設為“SQL Server 2017”,而我的目標實例是 2016。

我最初嘗試在原始項目中“降級”目標伺服器版本,但仍然遇到同樣的問題。我還收到了一些關於子包中腳本任務的資訊消息,說“降級”時某些事情沒有按計劃進行。我最終重新創建了整個項目,從一開始就將 TargetServerVersion 設置為 2016。這已經成功了,因為一切都在正常工作。

我唯一改變的另一件事是我使用 SQL Server 2016 部署嚮導部署項目,而不是像以前那樣使用 2017。但是,我不太確定這會是問題所在。

故事的道德,總是檢查你的 TargetServerVersion。

我已經提供了這個作為答案,以防其他人遇到這樣的問題。如果將來有任何證據表明上述不是問題的原因,我很樂意改變答案。

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