程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2數據庫為單個會話鎖定技巧

DB2數據庫為單個會話鎖定技巧

編輯:DB2教程

DB2數據庫經歷了多年的發展進步,已經開發出了很多新的版本,而且這些版本是一個勝過一個,DB2數據庫從版本8.2開始,客戶可以為每一個DB2數據庫會話指定鎖定策略。在以前的版本中,只能通過配置數據庫配置參數LOCKTIMEOUT配置一個應用程序如果不能獲得鎖,等待多長時間將回滾該事務。

單個會話現在可以指定鎖定等待方式策略,該策略在會話需要的鎖定不能立即獲取時使用。該策略指示會話是否將采取如下措施:在不能獲取鎖定時返回 SQLCODE 和 SQLSTATE

無限等待鎖定

等待為鎖定指定的時間

等待鎖定時使用 locktimeout 數據庫配置參數的值

鎖定等待方式策略通過新的 SET CURRENT LOCK TIMEOUT 語句指定,此語句更改 CURRENT LOCK TIMEOUT 專用寄存器的值。CURRENT LOCK TIMEOUT 專用寄存器指定在返回指示不能獲取鎖定的錯誤之前等待鎖定的秒數。

雖然 locktimeout 參數的值適用於所有鎖定,但是此新功能只影響以下鎖定類型:行、表、索引鍵和多維群集(MDC)塊鎖定。

該語句的語法如下:

.-CURRENT-. .-=-.

>>-SET--+---------+--LOCK TIMEOUT--+---+------------>

>--+-WAIT-----------------------+------------><

+-NOT WAIT-------------------+

+-NULL-----------------------+

| .-WAIT-. |

+-+------+-- integer-constant -+

'- host-variable --------------'

關於該命令的詳細說明,請參見:http://publib.boulder.ibm.com/infocenter/db2help/topic

/com.ibm.db2.udb.doc/admin/r0011874.htm?resultof=

%22%73%65%74%22%20%22%63%75%72%72%65%6e%74%22%2

0%22%6c%6f%63%6b%22%20%22%74%69%6d%65%6f%75%74%22%20

下面通過一個例子來講解如何使用這個功能(我們使用SAMPLE數據庫):

1、使用"db2 +c"打開兩個DB2會話。(+c 參數關閉AUTOCOMMIT)

2、在一個會話中執行下面的語句:

connect to sample

create table test(id int,name char(10))

commit

insert into test values(1,'test')

3、在另一個會話中執行下面的語句:

connect to sample

select * from test

由於默認LOCKTIMEOUT參數設置為-1,所以這個會話會一直等著,沒有結果返回。如下圖所示:

4、下面我們在第一歌窗口中重復一樣的操作,只是在第二個窗口中使用如下語句

set current lock timeout not wait

select * from test

我們看到select語句不會等待,而是直接返回錯誤。參見下圖:

您可以自己采取上面的方法測試一下其他的參數設置。

該語句可以在程序中和存儲過程中使用。另外這個功能對於CLI程序來講,還可以方便地通過設置db2cli.ini文件配置關鍵字使用,關鍵字為:

LOCKTIMEOUT = WAIT | NOT WAIT | WAIT seconds | seconds

通過設置這個參數,DB2 CLI會自動根據設置值發送一條“SET CURRENT LOCK TIMEOUT”語句到DB2服務器,該參數值也可以通過在程序中顯示使用

“SET CURRENT LOCK TIMEOUT”重置。

您可以根據您應用程序的需求,靈活運用這條語句設計合適的DB2會話鎖定策略。

關於DB2數據庫為單個會話鎖定技巧就為大家介紹到這裡,相信大家熟練掌握了上文中介紹的技巧對大家日後的工作是非常有幫助,希望大家都能夠從中有所收獲。

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