如何設定 sybase 的 lock time out
最近處理的案子有點複雜,當中遇到一個狀況,在思考了很多解決方案後,最後決定把timeout機制放在資料庫上。
簡單的說,當啟動transaction後,為了避免transaction內的table因lock,導致程式無法正常反應。所以需要一個timeout機制。
基於MS SQL的經驗,記憶中可以設定lock time out時間。不過,此次配合的資料庫為Sybase,於是查了一下官方的文件…看到有三種作法
應用方式如下…(指令不全,僅供參考)
實際測試結果…當我刻意讓 mydb..mytable 發生lock後,去執行上述SQL statement。當time out發生,程式會收到下面的錯誤,並結束運作。
以這案例,在不同平台下,其實會有不同的解決方案(方法真的很多種…)。對我的案例來說,這可能是比較好的解決方案…
簡單的說,當啟動transaction後,為了避免transaction內的table因lock,導致程式無法正常反應。所以需要一個timeout機制。
基於MS SQL的經驗,記憶中可以設定lock time out時間。不過,此次配合的資料庫為Sybase,於是查了一下官方的文件…看到有三種作法
- wait/nowaitoption of the lock tablecommand
- session-level lock-wait limit
- server-wide lock-wait limit
- set lock {wait no_of_seconds | nowait}
- set lock wait 5
- begin transaction
- update mydb..mytable set f1=1 where key=1
- --以下省略…
- Could not acquire a lock within the specified wait period. SESSION level wait period=5 seconds, spid=391, lock type=exclusive row, dbid=18, objid=2051597914, pageno=50303191, rowno=2. Aborting the transaction.
留言