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

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

使用 DB2 V9.1 for z/OS 實現(xiàn)應用程序會話鎖定

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

簡介

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

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

問題陳述

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

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

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

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

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

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

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

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

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

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

  解決方案的模式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

清單 2. 在子線程中實現(xiàn) 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; }

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

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

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

 CLOSE C1; ROLLBACK WORK;

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

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

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

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

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

結(jié)束語

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

相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲一卡2卡3卡4卡新区| 国产九一精品| 国产suv精品一区| 卡一精品卡二卡三网站乱码| 国产精品xvideos88| 日本亚洲视频在线| 三级欧美在线一区| 伊人久久亚洲| 日韩精品亚洲aⅴ在线影院| 亚洲啊v在线免费视频| 亚洲精品少妇| 日本国产欧美| 国产精一区二区| 精品欧美日韩精品| 在线天堂中文资源最新版| 国产资源在线观看入口av| 久久97视频| 亚洲精品福利电影| 亚洲欧美网站| 97久久亚洲| 成人午夜网址| 久久高清一区| 老司机精品在线| 精品在线99| 国产精品久久久免费| 香蕉人人精品| 国产日产高清欧美一区二区三区| 久久毛片亚洲| 香蕉久久久久久| 91中文字幕精品永久在线| 国产亚洲永久域名| 欧美黑人巨大videos精品| 色婷婷精品视频| 91精品国产自产精品男人的天堂 | 亚洲激情婷婷| 国产精品分类| 国产亚洲激情| 97精品国产| 日韩影片在线观看| 久久久久美女| 久久中文字幕一区二区| 日本欧美在线看| 欧美三级网址| 久久国产三级| 亚洲欧美日韩国产综合精品二区| 成人午夜网址| 欧美综合社区国产| 91精品亚洲| 国产另类在线| 婷婷五月色综合香五月| 欧美日韩尤物久久| 国产精品videossex久久发布| 亚洲一区二区免费在线观看| 亚洲精品观看| 91av亚洲| 日韩高清一区在线| 神马日本精品| 成人日韩精品| 欧美精品国产白浆久久久久| 最新亚洲激情| 日韩欧美少妇| 国产成人1区| 日本麻豆一区二区三区视频| 亚洲激情欧美| 久久精品中文| 中文字幕色婷婷在线视频 | 一区二区三区四区日韩| 999久久久91| 久久亚洲精精品中文字幕| 日韩毛片一区| 免费国产亚洲视频| 狠狠爱成人网| 久久中文亚洲字幕| 97精品97| 国产盗摄——sm在线视频| 欧美极品中文字幕| 欧美视频久久| 日韩精品视频在线看| 蜜桃视频第一区免费观看| 红桃视频国产一区| 国产综合亚洲精品一区二| 丝袜诱惑一区二区| 精品国产亚洲日本| 精品国产欧美日韩| 久久女人天堂| 精品国产欧美日韩一区二区三区| 国产精品一区二区三区av麻| 日韩不卡手机在线v区| 亚洲精品日韩久久| 亚洲毛片视频| 亚洲精品在线a| 亚洲深夜视频| 精品一区二区男人吃奶| 日韩不卡手机在线v区| 蜜臀av一区二区在线免费观看| 在线日韩电影| 久久电影一区| 好看的亚洲午夜视频在线| 亚洲激情中文| 99国内精品| 亚洲一区二区免费在线观看| 亚洲啊v在线免费视频| 日韩成人午夜精品| 国产精品17p| 日本一区二区免费高清| 国产伦久视频在线观看| 国产一区二区三区探花| 国产一区二区三区视频在线| 三级在线看中文字幕完整版| 亚洲v在线看| 在线精品小视频| 国产亚洲福利| 亚洲精品三级| 国产精品日韩精品中文字幕| 国产精品久久久久久久久久妞妞| 欧美黑人巨大videos精品| 国产一区国产二区国产三区| 天堂中文在线播放| 激情综合网站| 亚洲色图网站| 国产亚洲观看| 麻豆久久久久久久| 久久久久久网| 久久五月天小说| 日韩精品一二三区| 国产精品一线| 成人午夜国产| 三级亚洲高清视频| 欧美黄页在线免费观看 | 水蜜桃久久夜色精品一区的特点| 亚洲区第一页| 欧美a在线观看| 日韩伦理在线一区| 国产一区白浆| 日韩欧美三区| 国内自拍视频一区二区三区| 日本精品不卡| 热久久国产精品| 免费一级欧美片在线观看网站| 日韩毛片在线| 天堂va欧美ⅴa亚洲va一国产| 国产精品2023| 91九色精品国产一区二区| 亚洲精品极品| 成人午夜亚洲| 视频一区免费在线观看| 麻豆视频一区二区| 婷婷综合在线| 日本欧美久久久久免费播放网| 国产在线不卡一区二区三区| 在线日韩中文| 国产亚洲字幕| 91精品国产91久久久久久黑人| 日韩中出av| 成人精品亚洲| 日本欧美大码aⅴ在线播放| 久久久久久婷| 蜜桃av一区二区在线观看| 久久亚洲精精品中文字幕| 野花国产精品入口| 老色鬼精品视频在线观看播放| 亚洲激情中文| 九九九精品视频| 亚洲综合日韩| 国产精品1luya在线播放| 国精品一区二区三区| 国产精品午夜av| 激情婷婷综合| 精品国产乱码久久久| 亚洲自拍另类| 在线天堂中文资源最新版| 日本在线成人| 影视先锋久久| 国产精品一区二区三区av麻| 国产高清一区| 成人精品久久| 日韩精品免费视频人成 | 精品欧美日韩精品| 日韩精品一二三| 久久精品青草| 久久免费精品| 三级久久三级久久久| 五月精品视频| 日本不卡免费高清视频在线| 国产调教精品| 亚洲一区二区三区中文字幕在线观看| 高清一区二区三区| 日韩精品亚洲专区在线观看| 欧美日韩国产在线一区| 国产在视频一区二区三区吞精| 亚洲精品无播放器在线播放| 欧美a级片一区| 免费亚洲婷婷| 欧美日韩网址| 亚洲一区二区日韩| 图片区亚洲欧美小说区| 伊人久久国产| 国产一区2区| 久久激五月天综合精品| 麻豆成人在线|