Welcome to K2 Underground Sign In | Join | Help

大中华用户区

这个区域是让大中华区的用户以中文讨论各项关于K2的议题。
從K2.net 2003或K2 [blackpearl]資料庫中刪除廢棄的流程所殘留下來的流程實例

如同各位可能已經知道的,k2 blackpearl並沒有正式提供一個功能用以刪除已經運行完成的流程實例(process instances)。你只能刪除正在"運行中"的流程實例。 這背後的原因是由於為了要確保企業符合財務審查與會計原則 (例如沙賓法案), 流程的歷史審查是非常重要且不應該輕易可以刪除的 。

然而在一些特殊的狀況當中,我們還是有可能需要從資料庫中移除一個確定未來不會繼續需要的流程(主要是刪除該棄置流程的流程實例)。這樣也可以幫助降低資料庫的大小,為了實現這樣的功能,我撰寫了一個簡單的預儲程序(stored procedure )可以允許開發人員從K2 Log資料庫中,移除所有已經結案的流程實例。這預儲程序的開發是基於K2 即有的刪除正在運行流程的功能。

這個預儲程序做了底下幾件事情:

  1. 依照流程的完整名稱,移除已經完成的流程實例。例如: "Finance\Purchase Request"
  2. 檢查是否還有任何正在運行中的流程實例。如同我先前提過的,這個功能是用來刪除"廢棄不用"的流程所遺留下來的流程實例,所以該流程不應該會有任何運行中的流程實例。

在這篇貼文的最後附上了兩個版本的預儲程序,一個是給 K2.net 2003 ,一個是針對 K2 [blackpearl]。同時這兩個預儲程序也已經針對 K2.net 2003 SP2aK2 [blackpearl] SP1進行測試。這兩個預儲程序應該可以正常的運作在更新的K2版本當中,只要lProcInstRemove沒有任何的修改。(lProcInstRemove是一個K2內建的預儲程序,你可以K2 Log 資料庫中找到)

儘管我已經在我的環境當中進行了完整測試與驗證,但請依舊在對正式環境執行這預儲程序前,先針對資料庫進行適當的備份。

注意: 這些預儲程序並不被K2或我本人正式支援,若不正確的使用或導致任何對系統的危害,我個人與K2均無法提供任何形式的補償。這些預儲程序的使用前提是假設您對SQL 具有相當程度的專業知識,因此倘若發生了任何問題或任何不測,請不要為已經無法挽救的局面後悔難過 :)

 同時我也建議,在執行預儲程序前先將K2伺服器離線,特別是當您的K2Log (K2.net 2003) K2ServerLog (K2 [blackpearl])資料庫中有非常多的記錄時,更需要如此。因為在伺服器運行的階段執行這個預儲程序,特別是在具有大量流程實例記錄的伺服器上時,可能會導致deadlock 或是 timeout

你可能也會需要在執行上述預儲程序後,接著執行DBCC SHRINKDATABASE 命令以取回先前被刪除的無效流程實例所佔用的磁碟未使用空間。

我期待你發現這個域除程序的好用之處。Cheers

Published Wednesday, June 18, 2008 12:38 PM by michaelpeng

Comments

No Comments

Anonymous comments are disabled