iT邦幫忙

6

[Software Architecture]談資料鎖定(Data Lock)

gipi 2010-06-12 23:15:445922 瀏覽

原文來自點部落-gipi的學習筆記:http://www.dotblogs.com.tw/jimmyyu/archive/2010/06/12/data-lock.aspx

全文請到以上網址觀看。
我們在開發系統時,資料的鎖定是一件很重要的事情,我舉個例子會比較容易了解,我有一張單據長這樣,只有三個欄位,有兩個按鈕,存檔代表的是針對目前的資料進行修改並存檔,而送出是確認此張採購單,送出後這張採購單的內容將被執行,也就是錢的部分就會正式核准了。

下面的劇情是這樣的,某甲跟某乙同時間開了同一張單據,這時候看到採購金額兩者都還是相同的,這時候某甲修改了金額(5500-->550000),並進行存檔,然而這時候某乙畫面上看到的資料還是5500,他覺得沒有錯誤(但資料庫實際存的是550000),就直接按下『送出』,一般的資料處理都是Update by Key,這時候某乙就在不知不覺中送出了一張比他所認知多了100倍的金額,看來他除了受死之外,大概也沒有其他活路了。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
pojen
iT邦研究生 5 級 ‧ 2010-06-13 12:31:14

好文, 在 Oracle 上我可以用 for update 來達成悲觀鎖定, rowid 來達成樂觀鎖定(其實啥也沒鎖) 請問在 SQL Server 上要如何達成呢?

0
pantc328
iT邦高手 1 級 ‧ 2010-06-13 16:19:04

你這個範例叫資料鎖定!
那貴公司的系統哪一個資料不被鎖定??

就我所知資料在交易中,所涉及到的資料會被鎖定.尤其常交易中鎖定的資料更多,鎖定的時間更長.

而如果有二個交易,一個A交易會使用到B交易所鎖定的資料.而B交易也會使用A交易內有鎖到的資料就會產生死結.

而如果你是這系統裡面的成員.你會怎麼處理哪?

職員甲:這金額是老闆叫我Key的,其他的我不管.
職員乙:我看到的金額是5500,我按存檔也沒錯.
程設師:這是系統流程跟架構的問題,去找架構師吧!
架構師:使用者沒提出此需求.
IT主管:我只是路過的,我只會打嘴砲而已.
老闆:我花7-8萬請個白痴的IT主管和一群每月5-6萬無知的IT工程師幹嗎?
投資員:一家公司每年花好幾千萬的資本去搞出一套爛系統.股票趕快賣一賣吧.
顧客:我就等著看你們的產品標錯價,然後撿便宜吧.

0
pantc328
iT邦高手 1 級 ‧ 2010-06-13 19:38:03

這個問題,一般ERP很常見.
一張訂單很多人在處理,
一張訂單涉及到其他的單據和交易流程...

以前我在做.訂單金額不可能讓他Key這麼大的值.
一般都會去查詢客戶的信用額度,客戶有沒有欠款,客戶以前訂購最大金額..才能確定他可輸入最大的金額.

以前我也做事件通知的功能,一張訂單修改哪些值,這些值影響哪些系統操作?這些操作有哪幾個使用者在使用,然後發事件讓前端的作業程式做資料同步的動作.

使用者按存檔時,不只要用PK將整個資料做更新,你還要將整個新紀錄跟舊記錄做比較,看看寫入前有無被別人修改過..在依企業規則決定如何更新.如依權限更新,長官的資料覆蓋你的資料,或依時間更新,後面寫入的蓋掉前面寫掉的...

0
shunyuan
iT邦研究生 1 級 ‧ 2010-07-16 22:15:02

沒有實戰經驗喔。

我要留言

立即登入留言