我讀到Oracle維護行版本來處理併發。我想在非常大的實時數據庫上運行更新查詢,但此更新作業必須更改該行的最新版本。有沒有辦法通過SQL更新最新版本的行?
這可能通過PL/SQL或簡單的SQL?
編輯下面**
讓我清楚的情況下,我們面臨着一個非常大的數據庫在現實生活中的問題。我們的客戶是一家知名的手機服務提供商。
我們的數據庫有一個表格,用於管理客戶手機帳戶上剩餘的當前餘額記錄。在表格的其他列中,一列存儲完成的再充值量,另一列存儲剩餘的當前有效餘額。
我們有兩個獨立的PL/SQL腳本。客戶爲手機充值並更新餘額時,會自動觸發一個腳本。
第二個腳本是關於從客戶帳戶中扣除某些費用。這是一項批量工作,因爲它適用於所有客戶。該腳本計劃在一天的特定時間間隔內運行。當此腳本運行時,它會在內存中加載50,000條記錄,更新某些列並執行批量更新回到表格。
問題發生的事情是這樣的:
一位顧客,他的ID是101,聯繫他在當地商店買東西,他的手機充電。他支付金額。但直到他的手機即將充電時,第二個腳本的預定時間纔開始了第二個腳本。第二個腳本在內存中加載了50,000個客戶的記錄。在這個內存記錄中,也是這個客戶的記錄之一。
直到第二個腳本的批量更新完成時,第一個腳本成功爲客戶的帳戶充值。
現在發生了什麼是實際的表,列:「CurrentAccountBalance」被更新爲150,但其第二腳本工作過客戶的舊的平衡,即在內存中的記錄,100
第二個腳本必須從列中扣除10:「CurrentAccountBalance」。根據實際工作,當客戶的「CurrentAccountBalance」應爲140時,此問題使他的餘額爲90.
現在該如何處理這個問題。
你說的是閃回,Oracle的臨時訪問? – 2010-11-01 18:13:25
編號純SQL更新語句。 – RKh 2010-11-01 18:17:13
您正試圖查看來自其他會話的未提交數據?然後在提交之前更新它!? – 2010-11-01 18:25:35