流程一直處於Running狀態,應該怎麼中止?

流程一直處於Running狀態,應該怎麼中止?

概述

咱們有遇到這種狀況:可能因爲某些緣由,流程發起後一直處於Running狀態,而後咱們想Stop掉這些出問題的流程,這個時候你在Workspace裏面進行操做,這個操做是不可能完成的,Workspace也會一直處於Loading狀態。數據庫

這種狀況下,您惟一的選擇就是經過更新K2 Database來中止這些流程。安全

在執行這些操做以前,應該嘗試經過Workspace中止流程實例,只有在Workspace處理不了的時候,纔去更新K2 Database服務器

在執行操做以前,請熟悉每一個狀態的含義,這些狀態能夠在[ServerLog].[Status]表找到,它的結構以下:測試

0 - Error
1 - Running
2 - Active
3 - Completed
4 - Stopped
5 - Deletedspa

Running狀態的流程實例一般意味着K2服務器仍然在嘗試處理有關WF已構建的操做,此狀態不須要用戶輸入,K2正在嘗試處理待辦生成前的數據。code

經過更新 K2 數據庫來中止進程的步驟

在執行如下步驟以前, 請確保 K2 數據庫已經備份,安全第一!進程

一般有兩種狀況下, 您將中止進程實例:資源

  1. 只是須要中止某些實例, 但它不會讓用戶經過Workspace(將狀態設置爲中止4 - Stopped)
  2. 經過調查, 您發現運行的實例會致使 K2 產品的不良行爲。(將狀態設置爲暫停11 - Paused)

方案1

  1. 標識須要中止的運行實例
SELECT * FROM [K2].[Server].[ProcInst]
WHERE Status = 1
  1. 肯定是否須要中止全部這些進程實例, 或僅對其中的某個子集進行中止。
/**爲某一流程運行實例。能夠從[Server].[ProcSet]表中抓取進程 ID**/
SELECT * FROM [K2].[Server].[ProcInst]
WHERE ProcID = 3
  1. 運行查詢, 將所需的流程實例更新爲中止狀態, 例如:
/**更新正在運行狀態中的全部流程實例爲中止狀態 4 - Stopped**/
UPDATE [K2].[Server].[ProcInst]
SET Status = 4, ServerID = 0
WHERE Status = 1
  1. 如今應該能在過Workspace看到這些流程實例已經中止,也能夠單獨啓動一個測試或刪除它們。

若是您試圖更新數據庫中的狀態而不將Server ID設爲0,則狀態將自動更新爲1(運行)。ServID=1指示K2服務仍在這個進程上運行。設置ServID=0將告訴K2服務再也不使用此服務。產品

方案2

  1. 首先計算出若是沒有完成的話,有多少個運行實例:
SELECT * FROM [K2].[Server].[ProcInst]
WHERE Status = 1
  1. 肯定是否須要中止全部這些過程實例,或者僅僅是其中的一個子集。
/**爲某一流程運行實例。能夠從[Server].[ProcSet]表中抓取進程 ID**/
SELECT * FROM [K2].[Server].[ProcInst]
WHERE ProcID = 3
  1. 一旦您創建了 ProcInst 表中的哪些條目須要更新, 咱們須要構建更新查詢腳本:
/**更新正在運行狀態中的全部流程實例爲中止狀態 11 - Paused**/
UPDATE [K2].[Server].[ProcInst]
SET Status = 11, ServerID = 0
WHERE Status = 1
  1. 如今啓動SQL Management Studio, 在SQL Management Studio上運行上面構建的更新查詢腳本。
  2. 運行更新查詢並確認狀態列(Status)更新爲 11。

在方案2中,咱們將狀態列更新爲11,而不是中止4。提供11的ID提供多種好處:io

  1. 由於它是K2不指望的狀態(11),K2服務會把它忽略掉,不會當作流程實例,甚至不會注意到它存在;所以,沒有任何操做(action takes)發生在它上面;11不是特別須要的,你能夠提供任何不被用做狀態的數字,它也會作一樣的事情(例如,你能夠把它更新爲666,若是你以爲有意義的話;我把它保持爲11,由於這意味着它之前是1 - Running
  2. 將進程置於Paused狀態後,將不會使用K2資源;若是您須要再次啓動流程實例,能夠將其更新爲1,而且它將很快從上次更新到11的中斷位置被拾起;請記住,已完成(completed)的實例沒法再次啓動。
  3. 若是您有一個可疑的進程,將狀態設置爲11將在未來幫助您,由於您能夠得到在K2服務處於更好狀態以後須要檢查的ProcInst ID列表。而後你就能夠弄明白他們爲何會跑;請記住,由於它們是狀態11,客戶將沒法經過K2 Management/K2 Workspace(Legacy)看到它們,此過程僅在您檢查支持時才保留選項。
相關文章
相關標籤/搜索