日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

用DB2 V9.1for z/OS實(shí)現(xiàn)應(yīng)用程序會(huì)話鎖定

瀏覽:26日期:2023-11-09 13:05:40
DB2 for z/OS V9.1 的一項(xiàng)新特性 SKIP LOCKED DATA 使用戶能夠?qū)崿F(xiàn)應(yīng)用程序級(jí)別的會(huì)話鎖定,允許在中途進(jìn)行 DB2 提交。通過本文介紹的簡(jiǎn)便設(shè)計(jì)模式,熟悉這個(gè)特性的細(xì)節(jié)。

簡(jiǎn)介

對(duì)于獲得最佳的應(yīng)用程序性能,以及確保數(shù)據(jù)完整性和一致的應(yīng)用程序行為來說,數(shù)據(jù)庫鎖定策略是非常重要的。在 Paul Ilechko 的文章 “Locking strategies for database access”(developerWorks,2006 年 3 月)中,他描述了進(jìn)行數(shù)據(jù)庫鎖定的邏輯會(huì)話鎖定方式。除了事務(wù)鎖定之外,這種方式可以在更高的級(jí)別上控制應(yīng)用程序的并發(fā)性。

很難實(shí)現(xiàn)消極會(huì)話鎖定方式的 bullet-proof 實(shí)現(xiàn)。但是,利用 DB2 Version 9.1 for z/OS 中引入的新特性 SKIP LOCKED DATA(這個(gè)特性最初是為另一個(gè)完全不同的用途設(shè)計(jì)的,即避免鎖定),可以實(shí)現(xiàn)一種簡(jiǎn)單可靠的解決方案。

問題陳述

在許多場(chǎng)景中,應(yīng)用程序級(jí)別上的并發(fā)性控制是必要的,例如:

確保在一組不可共享的資源上工作的應(yīng)用程序互斥。一個(gè)真實(shí)的示例是,一個(gè)存儲(chǔ)過程使 DB2 外部的全文索引與 DB2 中存儲(chǔ)的數(shù)據(jù)同步。在這里,受控制的資源是全文索引。它由索引名稱標(biāo)識(shí),索引名稱是存儲(chǔ)過程的一個(gè)參數(shù)。只有在索引名稱參數(shù)不同的情況下,才允許并行調(diào)用這個(gè)存儲(chǔ)過程。

控制同時(shí)對(duì)一個(gè)資源集進(jìn)行操作的應(yīng)用程序的最大數(shù)量。

對(duì)于消極會(huì)話鎖定,按照慣例,應(yīng)用程序需要兩個(gè)函數(shù) lock(resource) 和 unlock()。

下面是對(duì)解決方案的一些需求,這些需求使解決方案在應(yīng)用程序級(jí)別難以實(shí)現(xiàn):

1.解決方案必須為在應(yīng)用程序之間可見的每個(gè)資源提供一個(gè)概念性的會(huì)話鎖。

2.即使持有會(huì)話鎖的應(yīng)用程序非正常終止,解決方案也必須保證會(huì)話鎖被釋放。

3.鎖定或解鎖機(jī)制必須獨(dú)立于應(yīng)用程序中的 DB2 事務(wù)(也就是說,中途事務(wù)提交不能產(chǎn)生釋放會(huì)話鎖的副作用)。

4.解決方案必須避免會(huì)話鎖超時(shí)和長(zhǎng)時(shí)間等待鎖。lock() 函數(shù)必須立即進(jìn)行檢查并返回(非阻塞方式)。

基于 DB2 事務(wù)鎖的任何會(huì)話鎖定實(shí)現(xiàn)必須解決鎖沖突問題。事務(wù)鎖沖突可以導(dǎo)致事務(wù)回滾(sqlcode -911),或者導(dǎo)致不確定地等待鎖。如果沒有 SKIP LOCKED DATA 這樣的數(shù)據(jù)庫概念,這個(gè)問題是很難解決的。

解決方案的模式

作為一個(gè)解決方案,建議定義一個(gè) DB2 表,其中包含資源標(biāo)識(shí)符的列表,并在所有應(yīng)用程序?qū)Y源的訪問中使用鎖定和解鎖協(xié)議。lock() 函數(shù)的實(shí)現(xiàn)在一個(gè) SQL fetch 語句中使用 DB2 新功能 skipping locked data。這是該解決方案的關(guān)鍵。

為資源鎖定創(chuàng)建一個(gè)DB2表

創(chuàng)建一個(gè) DB2 表(在下文中稱為 鎖表(lock table)),它定義與會(huì)話鎖定相關(guān)的資源。假設(shè)邏輯會(huì)話鎖的范圍是某種資源標(biāo)識(shí)符。在上面的全文索引示例中,這個(gè)標(biāo)識(shí)符是索引名稱。對(duì)于每個(gè)資源,在這個(gè)表中插入一行。

清單1. 創(chuàng)建鎖表的SQL示例

CREATE TABLE LockTable(ResourceId CHAR(10));

INSERT INTO LockTable VALUES('INDEX 1');

INSERT INTO LockTable VALUES('INDEX 2');

上面的示例演示如何在鎖表中填充兩個(gè)全文索引資源。每個(gè)索引不能由一個(gè)以上的應(yīng)用程序使用。這意味著,應(yīng)用程序 1 可能使用索引 1,同時(shí)應(yīng)用程序 2 使用索引 2,但是不允許兩個(gè)應(yīng)用程序中同時(shí)使用索引1。

使用鎖定/解鎖協(xié)議訪問資源

引入一個(gè)由兩個(gè)函數(shù) lock(ResourceId) 和 unlock() 組成的協(xié)議,所有應(yīng)用程序都需要遵守這個(gè)協(xié)議。具體的接口依賴于實(shí)現(xiàn)語言,在這里無關(guān)緊要。關(guān)鍵的一點(diǎn)是,所有應(yīng)用程序在訪問會(huì)話鎖控制的資源 之前,必須調(diào)用 lock(resourceId)。當(dāng)不再需要這個(gè)資源時(shí),它們應(yīng)該調(diào)用 unlock()。

實(shí)現(xiàn) lock() 函數(shù)

lock() 函數(shù)的實(shí)現(xiàn)必須確保調(diào)用者能夠立即得到請(qǐng)求的結(jié)果(授予鎖還是不授予鎖)。另外,授予的鎖必須不受應(yīng)用程序中 DB2 事務(wù)的影響。因此,lock() 的實(shí)現(xiàn)必須在一個(gè)單獨(dú)的線程中打開額外的 DB2 連接。所以,lock() 函數(shù)的實(shí)現(xiàn)由以下步驟組成:

1.啟動(dòng)一個(gè)對(duì)鎖請(qǐng)求進(jìn)行處理的子線程。

2.等待子線程發(fā)出表示鎖請(qǐng)求處理完成的信號(hào),這時(shí)結(jié)果已經(jīng)可用了。

3.在子線程中,打開新的 DB2 連接,在鎖表中獲取具有所請(qǐng)求的資源 ID 的一行。在這里,使用 SKIP LOCKED DATA 特性只獲得未被 DB2 鎖定的行(例如,如果另一個(gè)應(yīng)用程序持有這個(gè)資源上的會(huì)話鎖,就不能獲得這一行)。DB2 并不在獲取操作中等待。見 清單 2 中的示例代碼。現(xiàn)在,請(qǐng)求的結(jié)果必須在主線程中可用。子線程等待主線程的終止信號(hào)。如果授予了會(huì)話鎖,它就持有鎖表中一行上的 DB2 更新鎖,直到發(fā)生以下情況為止:

調(diào)用 unlock() 或者

應(yīng)用程序終止。

4.lock() 函數(shù)主線程從子線程獲得結(jié)果。如果授予了鎖,那么 lock() 函數(shù)返回調(diào)用者。否則子線程被終止。

清單2. 在子線程中實(shí)現(xiàn) lock() 的SQL代碼

DECLARE C1 CURSOR FOR

SELECT ResourceId FROM LockTable WHERE ResourceId=:resourceId

FOR UPDATE WITH CS SKIP LOCKED DATA;

OPEN C1;

FETCH C1;

if (sqlca.sqlcode==NO_DATA_FOUND) {

result=indexAlreadyLocked;

} else {

result=lockGranted;

}

實(shí)現(xiàn) unlock() 函數(shù)

提供一個(gè) unlock() 函數(shù),它將終止仍然持有鎖表中某一行的 DB2 更新鎖的子線程。子線程中的終止代碼關(guān)閉 SQL 游標(biāo),并使事務(wù)回滾,見 清單 3。因此,會(huì)釋放這一行的 DB2 更新鎖,清單 2 中的下一個(gè) SQL select 語句會(huì)看到這一行。

清單3. 在子線程中實(shí)現(xiàn) unlock()的SQL代碼

CLOSE C1;

ROLLBACK WORK;

控制同時(shí)訪問一個(gè)資源的應(yīng)用程序數(shù)量

對(duì)以上方式做一項(xiàng)簡(jiǎn)單的修改,就可以控制同時(shí)訪問一個(gè)資源集的應(yīng)用程序數(shù)量:

如果鎖表中有重復(fù)的行,就可以對(duì)資源進(jìn)行并發(fā)使用。鎖表中一個(gè)資源的行數(shù)決定了可以同時(shí)訪問這個(gè)資源的最大應(yīng)用程序數(shù)量。

清單 4. 填充鎖表來控制同時(shí)訪問的最大應(yīng)用程序數(shù)量的SQL示例

INSERT INTO LockTable VALUES('INDEX 1');

INSERT INTO LockTable VALUES('INDEX 1');

INSERT INTO LockTable VALUES('INDEX 2');

INSERT INTO LockTable VALUES('INDEX 2');

INSERT INTO LockTable VALUES('INDEX 2');

按照這段代碼,最多有兩個(gè)應(yīng)用程序可以同時(shí)訪問 ‘INDEX 1’,最多有三個(gè)應(yīng)用程序可以同時(shí)訪問 ‘INDEX 2’。

結(jié)束語

有一種簡(jiǎn)單可靠的解決方案模式可用于在應(yīng)用程序級(jí)別實(shí)現(xiàn)會(huì)話鎖。它依賴于 DB2 Version 9.1 for z/OS 中的新特性 SKIP LOCKED DATA,且已成功應(yīng)用于一個(gè) DB2 開發(fā)項(xiàng)目。

標(biāo)簽: DB2 數(shù)據(jù)庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本国产亚洲| 日韩电影免费在线观看| 日韩黄色大片网站| 岛国av在线网站| 精品国产亚洲一区二区三区| 亚洲一区二区免费看| 欧美日韩一区二区综合| 久久视频精品| 欧美日韩国产综合网| 欧美69视频| 久久99伊人| 日本成人在线视频网站| 国产精品亚洲片在线播放| 免费在线日韩av| 久久一区国产| 免费黄色成人| 日韩有码av| 久久婷婷国产| 日韩精品免费一区二区三区| 欧美日韩国产高清| 在线观看一区| 久久精品国产久精国产| 99久久久国产精品美女| 在线免费观看亚洲| 免费在线观看一区| 999国产精品视频| 在线视频亚洲欧美中文| 精品美女视频 | 中文一区一区三区免费在线观| 亚洲精品伦理| 国产精品亚洲一区二区三区在线观看| 国产精品视区| 国产一区二区三区四区| 国产精品视区| 黑森林国产精品av| 91九色综合| 国产伊人精品| 老牛国内精品亚洲成av人片| 国产精品婷婷| 久久久噜噜噜| 美女久久久久久 | 国产精品入口久久| 久久国产精品99国产| 亚洲深夜视频| 欧美a级一区二区| 婷婷亚洲成人| 性欧美69xoxoxoxo| 日韩电影二区| 精品国产a一区二区三区v免费| 中文字幕亚洲在线观看| 欧美日韩精品免费观看视频完整| 美女av在线免费看| 国产精品mm| 国产一卡不卡| 亚洲三级av| 亚洲精品动态| 激情婷婷综合| 激情综合自拍| 国精品一区二区| 免费毛片在线不卡| 自拍日韩欧美| 99在线|亚洲一区二区| jiujiure精品视频播放| 九九久久电影| 亚洲视频电影在线| 四虎国产精品免费久久| 一区二区三区国产盗摄| 亚洲香蕉视频| 青草国产精品| 国产日韩一区二区三区在线| 欧美久久精品| 国产日韩欧美中文在线| 国产精品一区二区三区www| 国产日产一区| 国产精品成人a在线观看| 天堂√8在线中文| 久久要要av| 免费在线视频一区| 国产亚洲高清在线观看| 国产一区二区三区亚洲| 亚洲性视频h| 一区二区国产精品| 久久麻豆视频| 1024精品久久久久久久久| 亚洲天堂免费| 免费亚洲一区| 日韩理论视频| 久久香蕉精品| 美女视频网站久久| 亚洲二区三区不卡| 国产精区一区二区| 成人久久久久| 日本不卡高清| 快播电影网址老女人久久| 三级欧美在线一区| 精品国产一区二区三区噜噜噜| 亚洲婷婷免费| 精品视频高潮| 老牛国内精品亚洲成av人片| 亚洲一级影院| 国产精品亚洲二区| 国产成人精品一区二区三区视频 | 免费人成黄页网站在线一区二区| 日本成人在线一区| 久久国产免费| 国产精品久久久亚洲一区| 伊人影院久久| 国产不卡人人| 久久狠狠久久| 蜜臀av一区二区在线免费观看| 久久av资源| 人人爱人人干婷婷丁香亚洲| 国产综合婷婷| 日韩欧美1区| 精品国产99| 免费精品一区| 国产精品一级在线观看| 综合激情五月婷婷| 亚洲一区区二区| 婷婷精品视频| 九九久久婷婷| 亚洲第一区色| 久久久噜噜噜| 久久一区二区中文字幕| 黄在线观看免费网站ktv| 日韩成人午夜精品| 亚洲精品第一| 日韩高清中文字幕一区| 日日夜夜免费精品视频| 亚洲青青久久| 午夜精品福利影院| 亚洲精品国产精品粉嫩| 最新国产精品| 日韩欧美中文字幕电影| 日韩欧美中文字幕在线视频| 亚洲精品极品| 国产乱子精品一区二区在线观看| 免费久久99精品国产| 超碰在线99| 亚洲欧美一区在线| 中文字幕色婷婷在线视频| av综合电影网站| 天堂网在线观看国产精品| 亚洲欧美日韩精品一区二区| 日本欧美在线看| 久久激情综合网| 97精品国产福利一区二区三区| 国产资源在线观看入口av| 女人av一区| 69精品国产久热在线观看| 久久97久久97精品免视看秋霞| 国产精品二区不卡| 亚洲深夜影院| 国产精品美女午夜爽爽| 亚洲成人va| 亚洲免费一区二区| 久久精品伊人| 日韩天堂av| 欧美黑人做爰爽爽爽| 丝袜诱惑一区二区| 亚洲精品系列| 欧美成人a交片免费看| 蜜桃久久精品一区二区| 精品久久视频| 免播放器亚洲| caoporn视频在线| 亚洲精品动态| 激情综合网址| 国产99在线| 欧美一级二级视频| 久久久久.com| 国语精品一区| 青青青国产精品| 视频一区视频二区中文| 日韩毛片视频| 国产精品毛片久久久| 亚洲女人av| 欧美特黄一级| 99精品视频精品精品视频| 国产精品视频一区二区三区| 免费在线观看精品| 精品1区2区3区4区| 91精品一区国产高清在线gif| 国内在线观看一区二区三区| 国产日韩欧美三区| 免费视频一区三区| 欧美aa国产视频| 国产精品极品| 99国产精品| 日韩欧美2区| 999久久久精品国产| 国产精品.xx视频.xxtv| 日本一区二区三区视频在线看| 99视频在线精品国自产拍免费观看| 久久青青视频| 日韩欧美网址| 999国产精品视频| 亚洲高清影视| 影音先锋久久精品| 91国内精品|