[英]SSIS package wrote 0 rows
是的,我閱讀了有關同一主題的其他問題,但它們不涵蓋我的問題。
我們運行兩個環境; DEV和Prod。 上周對這兩者進行了同步,這意味着它們應該包含相同的數據,運行相同的SSIS程序包,並提供相同的源數據。
但是,今天我們在PROD上有了一個打包程序,它需要執行其通常的步驟(將3個表截斷,然后將它們從OLEDB源裝載到OLEDB目標,一個接一個)。 程序包完成后沒有引發錯誤,並且前2個表包含數據,而最后一個不包含數據。
在DEV上,一切看起來都很好。
我仔細查看了軟件包的歷史記錄,它實際上表明它寫了0行:
但是,昨天它按預期工作:
當我手動運行程序包時,它寫入了數據。 當我單擊“預覽”時,它顯示數據。 當我手動運行源查詢時,它每次都會始終返回相同數量的行數據。 SSIS目錄尚未更新(昨天至今天之間未對PROD部署任何更改)。
源查詢不使用表變量,但使用CTE。 我已經看到建議添加SET NOCOUNT ON
,並且願意接受這可能是一個解釋。 但是,這些答案似乎表明該程序包從未寫入任何數據,而該程序包以前曾經成功運行過,並且可以在DEV上成功運行。
是否有人對我如何向客戶解釋我不知道為何1個軟件包突然選擇不寫入任何數據以及如何確保不會再次發生此軟件包或任何軟件包的任何線索有任何解釋?其他包裝?
這可能很棘手。 請嘗試以下操作:
Integration Service Catalogs -> SSISDB -> project -> (right click)Reports -> Standard Reports -> All executions
。 在此處檢查ETL作業是否與倉庫失去聯系。 2.如果啟用了日志記錄,請嘗試查看您的程序包從哪個task_name開始返回0:
select
data_stats_id,
execution_id,
package_name,
task_name,
source_component_name,
destination_component_name,
rows_sent
from
ssisdb.catalog.execution_data_statistics
事實證明,問題是由疏忽引起的。
因為我們在同一台服務器上運行DEV和PROD(我們知道並且已建議客戶至少考慮使用不同的實例),所以我們使用的變量指向正確的環境(在環境變量中設置)。
提供給該特定程序包的查詢已更新,並且顯然不是使用變量來切換數據庫,而是對其進行了硬編碼(可能是測試的結果,然后忘記了更新變量)。 DEV和PROD的加載是同時運行的,並且我們懷疑在PROD准備就緒時,DEV仍在處理源表,因此返回了0行。
我們今天才發現這個問題,因為直到今天早上,負載仍然可以正常運行。 我來不及使用Profiler來捕獲它,但是因為它只是這個包,所以我檢查了一下,發現了對_DEV的硬編碼引用。
謝謝大家的參與。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.