电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:5日期: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 數據庫
相關文章:
主站蜘蛛池模板: 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 不锈钢监控杆_监控立杆厂家-廊坊耀星光电科技有限公司 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 防火板_饰面耐火板价格、厂家_品牌认准格林雅 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 广州展览设计公司_展台设计搭建_展位设计装修公司-众派展览装饰 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 湖南自考_湖南自学考试 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 收录网| 网站建设-临朐爱采购-抖音运营-山东兆通网络科技 | 磁力抛光研磨机_超声波清洗机厂家_去毛刺设备-中锐达数控 | 罐体电伴热工程-消防管道电伴热带厂家-山东沃安电气 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | 紫外荧光硫分析仪-硫含量分析仪-红外光度测定仪-泰州美旭仪器 | 购买舔盐、舔砖、矿物质盐压块机,鱼饵、鱼饲料压块机--请到杜甫机械 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 模具硅橡胶,人体硅胶,移印硅胶浆厂家-宏图硅胶科技 | 手术室净化厂家-成都做医院净化工程的公司-四川华锐-15年特殊科室建设经验 | 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 青岛成人高考_山东成考报名网 | 数显恒温培养摇床-卧式/台式恒温培养摇床|朗越仪器 | 电梯乘运质量测试仪_电梯安全评估测试仪-武汉懿之刻 | 棕刚玉-白刚玉厂家价格_巩义市东翔净水材料厂 | 食药成分检测_调料配方还原_洗涤剂化学成分分析_饲料_百检信息科技有限公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | ZHZ8耐压测试仪-上海胜绪电气有限公司 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 立刷【微电签pos机】-嘉联支付立刷运营中心 | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 无线遥控更衣吊篮_IC卡更衣吊篮_电动更衣吊篮配件_煤矿更衣吊篮-力得电子 |