使用 DB2 V9.1 for z/OS 实现应用程序会话锁定
2007-08-14 16:23:02 来源:WEB开发网核心提示:简介对于获得最佳的应用程序性能,以及确保数据完整性和一致的应用程序行为来说,使用 DB2 V9.1 for z/OS 实现应用程序会话锁定,数据库锁定策略是非常重要的,很难实现消极会话锁定方式的 bullet-proof 实现,或者导致不确定地等待锁,如果没有 SKIP LOCKED DATA 这样的数据库概念,但是,
简介
对于获得最佳的应用程序性能,以及确保数据完整性和一致的应用程序行为来说,数据库锁定策略是非常重要的。
很难实现消极会话锁定方式的 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 这样的数据库概念,这个问题是很难解决的。
更多精彩
赞助商链接