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

您的位置:首頁技術文章
文章詳情頁

使用 DB2 V9.1 for z/OS 實現應用程序會話鎖定

瀏覽:49日期:2023-11-11 14:40:32

簡介

對于獲得最佳的應用程序性能,以及確保數據完整性和一致的應用程序行為來說,數據庫鎖定策略是非常重要的。

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

問題陳述

在許多場景中,應用程序級別上的并發性控制是必要的,例如:

確保在一組不可共享的資源上工作的應用程序互斥。一個真實的示例是,一個存儲過程使 DB2 外部的全文索引與 DB2 中存儲的數據同步。在這里,受控制的資源是全文索引。它由索引名稱標識,索引名稱是存儲過程的一個參數。只有在索引名稱參數不同的情況下,才答應并行調用這個存儲過程。

控制同時對一個資源集進行操作的應用程序的最大數量。

對于消極會話鎖定,按照慣例,應用程序需要兩個函數 lock(resource) 和 unlock()。

下面是對解決方案的一些需求,這些需求使解決方案在應用程序級別難以實現:

解決方案必須為在應用程序之間可見的每個資源提供一個概念性的會話鎖。

即使持有會話鎖的應用程序非正常終止,解決方案也必須保證會話鎖被釋放。

鎖定或解鎖機制必須獨立于應用程序中的 DB2 事務(也就是說,中途事務提交不能產生釋放會話鎖的副作用)。

解決方案必須避免會話鎖超時和長時間等待鎖。lock() 函數必須立即進行檢查并返回(非阻塞方式)。

基于 DB2 事務鎖的任何會話鎖定實現必須解決鎖沖突問題。事務鎖沖突可以導致事務回滾(sqlcode -911),或者導致不確定地等待鎖。假如沒有 SKIP LOCKED DATA 這樣的數據庫概念,這個問題是很難解決的。

  解決方案的模式

作為一個解決方案,建議定義一個 DB2 表,其中包含資源標識符的列表,并在所有應用程序對資源的訪問中使用鎖定和解鎖協議。lock() 函數的實現在一個 SQL fetch 語句中使用 DB2 新功能 skipping locked data。這是該解決方案的要害。

為資源鎖定創建一個 DB2 表

創建一個 DB2 表(在下文中稱為 鎖表(lock table)),它定義與會話鎖定相關的資源。假設邏輯會話鎖的范圍是某種資源標識符。在上面的全文索引示例中,這個標識符是索引名稱。對于每個資源,在這個表中插入一行。

清單 1. 創建鎖表的 SQL 示例

 CREATE TABLE LockTable(ResourceId CHAR(10)); INSERT INTO LockTable VALUES('INDEX 1'); INSERT INTO LockTable VALUES('INDEX 2');

上面的示例演示如何在鎖表中填充兩個全文索引資源。每個索引不能由一個以上的應用程序使用。這意味著,應用程序 1 可能使用索引 1,同時應用程序 2 使用索引 2,但是不答應兩個應用程序中同時使用索引 1 。

使用鎖定/解鎖協議訪問資源

引入一個由兩個函數 lock(ResourceId) 和 unlock() 組成的協議,所有應用程序都需要遵守這個協議。具體的接口依靠于實現語言,在這里無關緊要。要害的一點是,所有應用程序在訪問會話鎖控制的資源 之前,必須調用 lock(resourceId)。當不再需要這個資源時,它們應該調用 unlock()。

實現 lock() 函數

lock() 函數的實現必須確保調用者能夠立即得到請求的結果(授予鎖還是不授予鎖)。另外,授予的鎖必須不受應用程序中 DB2 事務的影響。因此,lock() 的實現必須在一個單獨的線程中打開額外的 DB2 連接。所以,lock() 函數的實現由以下步驟組成:

啟動一個對鎖請求進行處理的子線程。

等待子線程發出表示鎖請求處理完成的信號,這時結果已經可用了。

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

調用 unlock() 或者應用程序終止。

lock() 函數主線程從子線程獲得結果。假如授予了鎖,那么 lock() 函數返回調用者。否則子線程被終止。

清單 2. 在子線程中實現 lock() 的 SQL 代碼  DECLARE C1 CURSOR FORSELECT ResourceId FROM LockTable WHERE ResourceId=:resourceIdFOR UPDATE WITH CS SKIP LOCKED DATA; OPEN C1; FETCH C1; if (sqlca.sqlcode==NO_DATA_FOUND) {result=indexAlreadyLocked; } else {result=lockGranted; }

實現 unlock() 函數

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

清單 3. 在子線程中實現 unlock() 的 SQL 代碼

 CLOSE C1; ROLLBACK WORK;

控制同時訪問一個資源的應用程序數量

對以上方式做一項簡單的修改,就可以控制同時訪問一個資源集的應用程序數量:

假如鎖表中有重復的行,就可以對資源進行并發使用。鎖表中一個資源的行數決定了可以同時訪問這個資源的最大應用程序數量。

清單 4. 填充鎖表來控制同時訪問的最大應用程序數量的 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');

按照這段代碼,最多有兩個應用程序可以同時訪問 ‘INDEX 1’,最多有三個應用程序可以同時訪問 ‘INDEX 2’。

結束語

有一種簡單可靠的解決方案模式可用于在應用程序級別實現會話鎖。它依靠于 DB2 Version 9.1 for z/OS 中的新特性 SKIP LOCKED DATA,且已成功應用于一個 DB2 開發項目。

標簽: DB2 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩欧美网址| 国产精品中文字幕制服诱惑| 欧美成人综合| 欧美精品91| 另类av一区二区| 91精品一区二区三区综合在线爱| 超碰在线99| 久久久久观看| 日韩精选在线| 免费福利视频一区二区三区| 久久国产欧美日韩精品| 国产一区福利| 国产精品激情电影| 日韩国产91| 日韩一区二区三区免费视频| 99国产精品视频免费观看一公开 | 91成人精品在线| 一区二区亚洲精品| 国产91精品对白在线播放| 欧美a级一区二区| 日本不卡一二三区黄网| 亚洲精品第一| 成人av二区| 久久在线电影| 免费不卡中文字幕在线| av一区二区高清| 欧美日韩国产一区精品一区| 99久久激情| 99精品美女| 成人在线网站| 日韩免费看片| 红杏一区二区三区| 美女av在线免费看| 成人在线丰满少妇av| 免费在线播放第一区高清av| 欧美91在线|欧美| 国产探花在线精品一区二区| 国产亚洲第一伦理第一区| 日韩在线麻豆| 日本亚洲最大的色成网站www| 亚洲国产一区二区三区在线播放| 亚洲人成在线网站| 伊人久久在线| 成人看片网站| 久久婷婷久久| 99久久精品费精品国产| 成人片免费看| 蜜臀av一区二区在线免费观看| 久久都是精品| 蜜臀久久99精品久久久久宅男 | 久久精品99久久无色码中文字幕| 丰满少妇一区| 亚洲爱爱视频| 在线亚洲观看| 亚洲91在线| 国产欧美二区| 精品欧美视频| 99视频精品全部免费在线视频| 成人羞羞视频播放网站| 久久国内精品自在自线400部| 国产色99精品9i| 久久精品二区亚洲w码| 精品国产免费人成网站| 欧美亚洲国产激情| 中文不卡在线| 久久视频国产| 免费观看在线综合| 日韩精品成人在线观看| 老鸭窝一区二区久久精品| 麻豆视频在线看| 欧美久久精品一级c片| 99在线精品免费视频九九视| 欧美一区91| 国产成人精选| 成人午夜亚洲| 精品91久久久久| 欧美一级二级三级视频| 成人国产精品一区二区网站| 日韩一级不卡| 人人爱人人干婷婷丁香亚洲| 精品免费在线| 麻豆成全视频免费观看在线看| 蜜臀av免费一区二区三区| 亚洲精一区二区三区| 国产欧美另类| 韩日一区二区三区| 日本v片在线高清不卡在线观看| 欧美国产视频| 久久字幕精品一区| 波多视频一区| 日韩一级网站| 久久99性xxx老妇胖精品| 久久精品电影| 日本在线视频一区二区| 精品免费av一区二区三区| 亚洲综合电影一区二区三区| 日韩av中文字幕一区二区 | 水蜜桃精品av一区二区| 免播放器亚洲| 日韩国产一二三区| 极品日韩av| 久久尤物视频| 欧美91视频| 欧美久久精品| 偷拍欧美精品| 国产精品99久久免费观看| 色爱综合网欧美| 免费在线观看视频一区| 日韩啪啪电影网| 国产欧美91| 视频一区中文字幕| 极品av在线| 国产欧美在线| 国产免费成人| 日韩久久精品网| 免费国产亚洲视频| 蜜桃精品在线| 国产另类在线| 99tv成人| 国产精品男女| 日韩一区网站| 中文国产一区| 亚洲免费高清| 99精品综合| 神马日本精品| 黑人精品一区| 国产传媒在线观看| 国产一区二区三区免费在线 | 在线中文字幕播放| 精品久久久网| 中文无码日韩欧| 麻豆精品网站| 激情欧美国产欧美| 久久久久免费av| 欧美亚洲日本精品| 国产精品黑丝在线播放| 国产精品久久久网站| 国产日韩欧美高清免费| 水野朝阳av一区二区三区| 亚洲一区二区动漫| 国产在线欧美| 好吊视频一区二区三区四区| 婷婷激情一区| av亚洲一区二区三区| 国精品产品一区| 国产亚洲字幕| 日本成人中文字幕在线视频| 最新国产精品视频| 免播放器亚洲| 日韩欧美2区| 免费成人性网站| 人人爱人人干婷婷丁香亚洲| 亚洲另类视频| 欧美日韩伊人| 国产另类在线| 精品国产aⅴ| 国产精品久久久一区二区| 欧美91在线| 久久免费精品| 日韩中文字幕高清在线观看| 免费视频一区二区三区在线观看| 免费在线观看一区| 国产精品久久久久久模特 | 亚洲免费播放| 亚洲精品少妇| 久久av一区| 日韩中文av| 青草国产精品久久久久久| 国产精品入口久久| 免费一级欧美片在线观看网站| 91亚洲国产| 久久美女性网| 久色成人在线| 青草国产精品久久久久久| 久久狠狠久久| 动漫av一区| 红桃视频亚洲| 综合激情在线| 国产精品久久久久久久免费软件| 精品理论电影在线| 亚洲精品国产嫩草在线观看| 亚洲欧美日韩在线观看a三区 | 久久影院一区| 亚洲免费福利一区| 国产精品一级在线观看| 日韩国产一区二区三区| 久久精品国产亚洲夜色av网站| 久久久久99| 蜜桃av一区二区| 麻豆91精品视频| 正在播放日韩精品| 综合激情五月婷婷| 婷婷亚洲精品| 久久香蕉精品香蕉| 国产精品毛片久久久| 久久精品国产网站| 视频一区二区欧美| 国产精品自拍区| 91精品1区| 日本精品另类|