明確(悲觀)鎖定模型可防止非預期的資料更新項目遺失,並控制多個使用者進行同時更新時的工作流程。
樂觀鎖定模型容許多個使用者同時檢視及試圖修改記錄,但阻止第一位使用者以外的其他所有使用者確定其變更。 使用者並不知道其他人也試圖更新該記錄。
當記錄確定時會驗證記錄變更。 如果另一個使用者已成功更新記錄,則其他同時更新的項目會接獲通知,表示當其他使用者試圖提交其並行更新項目時會發生衝突。
依預設,當記錄顯示在 ClearQuest 用戶端應用程式時不會鎖定記錄。因此,任何使用單一站台或抄寫環境的綱目設計應將此列入考量。
當使用者按一下套用按鈕時,可檢查另一個使用者是否已更新記錄以及在進行變更過程中確定其變更,藉此確保資料完整性。 如果是,使用者的更新項目將無法確定至資料庫,因為這樣會導致另一位使用者的部分變更不見。 當另一個使用者更新記錄之後,若使用者嘗試確定其變更,則會接收到錯誤訊息,表示其變更未確定至資料庫。
在涉及多個相關記錄的協調更新之複雜實務中,必須謹慎小心,以確保此行為不會造成問題。 由於樂觀鎖定是個別對每一筆記錄有效,因此應用程式必須確保記錄依正確順序更新,且萬一另一位使用者在您的動作開始之後及確定變更之前更新了子層記錄,則還要處理更新子層記錄的失敗。 綱目設計可重試作業,或確認失敗並回復母項記錄的更新,或即使子層記錄更新失敗亦確定母項記錄更新。
悲觀鎖定提供一種機制來防止多個使用者同時編輯一筆記錄的狀況。 悲觀鎖定模型施行循序修改記錄及防止同時更新記錄。 當一位使用者開始更新記錄之後,此模型會對記錄加上鎖定。 任何試圖開始更新此記錄的其他使用者都會收到通知:有另一個使用者已進行更新,因此該記錄已遭到鎖定而無法修改。 想要同步更新該記錄的使用者必須等到第一位使用者確定該記錄之後,另一位使用者才會獲授權使用該鎖定,並可在前一位使用者變更之後進行變更。 此模型可防止衝突發生,來避免衝突解決的問題。 更新資料會序列化,且每一個後續的更新是從含有先前使用者變更的已更新記錄開始。
若要使用悲觀記錄鎖定,必須將連結鉤程式碼新增至想要使用它的記錄類型。 對於每一個記錄類型,連結鉤程式碼必須新增為新的 BASE 類型動作。 利用連結鉤程式碼可完成手動移除鎖定,此程式碼是以記錄 Script 別名來實作。 您可以使用 ClearQuest 查詢,藉由搜尋其 locked_by 欄位等於非空值的記錄,來尋找已鎖定的記錄。 locked_by 使用者資料庫直欄是整數直欄,當記錄已鎖定,它會記錄使用者的登入 ID。
當不需要同時更新,且後續的更新可以延遲到前一個更新完成時,悲觀鎖定是很有用的模型。 這通常表示更新發生在極短時間間隔內。長時間保留鎖定的更新可防止其他使用者更新該記錄。