2010-10-08 73 views
4

我有一個SSIS包,其中包含一個任務,用於加載進程外應用程序以將數據批量插入到一個表中。問題是多個進程外應用程序會在多個文件同時到達時運行。這將導致插入失敗。同時將SSIS批量插入到一個表中

SQL Server Broker Service可以排隊插入數據嗎? SQL Server或SSIS是否有任何機制來處理並行可靠插入?

我使用SSIS」執行進程任務來執行大容量插入LINQ到SQL控制檯應用程序

感謝。

+0

什麼是你看到的「插入失敗」。默認情況下,SQL Server將通過使用鎖來處理同時插入的進程。 – bobs 2010-10-08 21:07:08

+0

鮑勃斯,謝謝!我得到的錯誤是「超時過期,操作完成之前超時或服務器沒有響應。」我使用SSIS的執行進程任務執行批量插入LINQ to SQL控制檯應用程序。 SSIS任務的超時設置爲0.它意味着無限期的時間。轉儲多個文件會導致多個錯誤。沒有一個文件可以插入。當表被進程鎖定時,SQL服務器似乎沒有排隊其餘的插入嘗試?它實際上一起失敗。 – Don 2010-10-09 03:18:24

+0

我想我現在明白了。順便說一句,如果你用'@'作爲堆棧溢出名稱的前綴,用戶會收到關於評論的通知。 – bobs 2010-10-09 16:46:42

回答

2

聽起來好像你正在得到超時問題,因爲SSIS包的第一次運行是鎖定表並且包的所有其他運行副本正在等待鎖被釋放。

有幾件事你可以做,以確認這一點。首先,在SQL Server Management Studio(SSMS)中,打開一個查詢窗口,當情況發生時執行命令EXEC sp_who2。你會在結果中看到BlkBy列。該列包含阻止選定進程的SPID值。您可能會看到您的軟件包的一個實例阻止了所有其他軟件包。

在SSIS設計器的數據流任務中,編輯目標組件。有一個表鎖定複選框。它可能被檢查,它告訴進程鎖定表,直到數據加載完成。

你有幾個選擇來解決這個問題。首先,一個SSIS包必須在另一個SSIS包啓動之前完成加載數據是非常重要的?如果答案爲否,則可以取消選中目標組件中的表鎖定選項。這將允許SQL Server管理同時的數據加載。

如果您必須在其他軟件包可以運行之前完成一個軟件包,那麼您可能需要創建一個SSIS任務來檢查該表是否可用於加載。如果表正在加載,則停止SSIS包並稍後重新檢查。你甚至可以在你的控制檯應用中處理這個。

SQL Server沒有任何內置的方法來執行此操作,Broker Service聽起來像是比您需要的更多的工作。

+0

謝謝!我已經檢查過了。你是對的。 – Don 2010-10-10 00:34:47