程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 V9.7新特性之“當前提交”功能解析

DB2 V9.7新特性之“當前提交”功能解析

編輯:DB2教程


在 DB2 9.7 使用光標穩定性隔離級別之前,一個寫操作(UPDATE)將阻止同一行的讀操作 (SELECT)。其中的邏輯是,寫操作正在修改行,讀操作應該等到更新完成後看到最終提交的值。 在DB2 9.7 中,有一個新數據庫的游標穩定性隔離級別的默認行為。實施這一新的行為時,將使用當 前提交CC(currently committed)的語義。有CC 之後寫操作不會阻止訪問同一行中的讀操作。如 果您使用了隔離級別未提交的讀操作(UR),這種情況過去是可能發生的。但現在的差別是,UR 讀 操作讀到的是未提交的值, CC 讀操作讀到的是提交的值。當前提交值是致力於寫操作的開始前的 值。例如,表T1 具有以下內容:   FIRSTNAME LASTNAME Raul Chong Jin Xie   現在,您的應用程序AppA 執行這個語句,但不提交: update T1 set lastname = 'Smith' where firstname = 'Raul'   接下來,應用程序AppB 執行此提交: select lastname from T1 where firstname = 'Raul' with CS   在 DB2 9.7 之前,這條語句將掛起,因為它正在等待由AppA(寫操作)更新語句的排他鎖被釋放。 在DB2 9.7 當前提交(新數據庫默認)能讓語句返回當前提交的值,即Chong。請注意,即使CS 是默認值,為清楚起見我們還是把”with CS”包括在提交語句中。我們將在後一章節討論這個子句。  www.2cto.com     如果AppB 嘗試這個語句: select lastname from T1 where firstname = 'Raul' with UR   由於UR 的隔離使用,其結果將是未提交的值Smith 。這個例子說明, CC 程序具有更好的並發功 能使讀操作能夠讀到一個正在更新的行。另一個在DB2 9.7 之前會引起爭議的情況是讀操作阻止寫操 作訪問行。這就是為什麼即使是讀操作也建議使用一個提交的原因之一,因為這將確保共享(S)鎖 被釋放。有了CC 之後這不再是一個問題,讀操作不會阻塞寫操作。對於那些沒有提交的INSERT 操 作,讀操作將默認地跳過他們,結果就是不顯示這些行。對於DELETE 命令,讀操作應該也可以跳 過(忽略)受影響的行,但行為取決於DB2 注冊表的變量值DB2_SKIPDELETED。其他注冊表變量 和BIND 和PREPARE 命令屬性可以改變CC 的默認行為。記住:當前提交意味著它只會顯示當前提 交的信息,因此未提交的INSERT 或DELETE 操作將被忽略。如前所述,在新數據庫CC 是默認 的。如果您想將其關閉,或把一個早期版本創建的數據庫升級到DB2 9.7,您可以更新數據庫配置   CUR_COMMIT 的值。例如,將SAMPLE 數據庫的CC 關閉可以寫成:   db2 update db cfg for sample using CUR_COMMIT off db2stop db2start  
    作者 TOMSYAN

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved