WEB开发网
开发学院数据库DB2 使用 DB2 V9.1 for z/OS 实现应用程序会话锁定 阅读

使用 DB2 V9.1 for z/OS 实现应用程序会话锁定

 2007-08-14 16:23:02 来源:WEB开发网   
核心提示: 解决方案的模式作为一个解决方案,建议定义一个 DB2 表,使用 DB2 V9.1 for z/OS 实现应用程序会话锁定(2),其中包含资源标识符的列表,并在所有应用程序对资源的访问中使用锁定和解锁协议,因此,lock() 的实现必须在一个单独的线程中打开额外的 DB2 连接,lock()

解决方案的模式

作为一个解决方案,建议定义一个 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() 函数的实现由以下步骤组成:

Tags:使用 DB for

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接