2016-02-27 139 views
2

我有一個長時間運行的存儲過程,它從舊系統中導入大量記錄並需要數小時才能執行。執行時,可能IIS進程需要回收或Web服務器需要重新啓動或導致IIS進程結束並因此中止存儲過程的執行的其他內容。長時間運行的存儲過程不在IIS進程中

我已經決定在斷開連接的環境中運行存儲過程而不是w3wp.exe進程。

解決方案:

  • Service Broker的激活:我讀this但它是複雜的,下一個Windows服務diagnosting service queue is difficult
  • 運行:
  • 定義的SQL Server作業:它需要SQLAgentReaderRole角色權限,我需要將參數傳遞給存儲過程

是否有任何其他解決方案?

+0

你從網絡應用程序調用的控制檯應用程序怎麼樣?這是一個非常簡單的解決方案,您可以傳遞參數並且可以運行數小時 –

+0

Windows服務比控制檯應用程序更好,但它們都不會在重新啓動服務器時自動運行。服務代理解決方案支持這一點。 – Mohammadreza

回答

0

我個人比較喜歡Windows服務路線。最近我使用了self-hosted WebApi,它允許我從MVC開始一個長時間運行的工作(使用HttpClient或System.Net.HttpWebRequest等)。

+0

如果重新啓動Web服務器並註冊Windows服務,它也需要重新調用sp。我認爲最佳實踐是第一個解決方案,Sql Service Broker – Mohammadreza

+0

而且Windows服務也消耗資源,即使它什麼都不做。 – Mohammadreza

+0

這些都是有效的分數。我不會爲這一個單一的目的使用服務,只要它也在做其他事情,那麼資源消耗就是合理的。但是一個服務可以輕鬆處理重啓時的執行。 – JimG

0

CLR組裝。

改變你的代碼作爲類庫和類庫作爲SSMS的彙編函數的輸入DLL結果,本守則

CREATE ASSEMBLY myAssembly from 'E:\Projects\CL.dll' 

現在你可以把它叫做沒有IIS停止任何擔心。

+0

如果重新啓動Web服務器,它也需要再次調用sp。我認爲最佳做法是第一個解決方案,Sql Service Broker – Mohammadreza

+0

我詢問了有關存儲過程的問題,而不是.net代碼。另外我更喜歡使用純SQL服務器功能和能力來代替CLR程序集,因爲它更易於維護,而且我不確定CLR程序集的性能 – Mohammadreza

相關問題