当并发遇到隔离时候.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
当并发遇到隔离的时候 周光辉 E-mail:symbol@21 2003 年9 月 摘要:在多用户数据库环境中,一个数据库中的多个事务可以并发地执行,同时地存取同一数据,如果不加以控制, 则每个事务都有可能与其它正在运行的事务发生冲突,进而出现一些特殊的“现象”(Phenomena),破坏数据库的完 整性。本文首先简单介绍一下与并发控制相关的一些基本概念,接着通过举例说明并发事务可能出现的特殊“现象”, 而后介绍与避免这些 “现象”出现有关的SQL-92 隔离级别,最后再阐述DB2 UDB 对SQL-92 隔离级别的具体实现及 其锁机制。本文主要面向关系数据库,且假设你已经熟悉数据库事务概念,熟悉使用基本SQL DML (SELECT、INSERT、 UPDATE、DELETE)。 关键词:并发性/并发控制;隔离级别;锁;一致性/完整性 基础概念 并发性:维护数据库一致性和数据完整性,但又允许多个应用程序同时访问同一数据,这样的特性称为并发性。 锁:是一种用来将数据资源(行、表、表空间等)与单个事务关联起来的机制,其用途是当某个资源与拥有它 的事务关联在一起时,控制其它事务如何与该资源交互。基本的锁类型有两种:共享锁(Share locks 简记为S 锁) 和互斥锁(Exclusive locks 简记为X 锁)。 粒度:锁定对象的大小称为锁定的粒度(granularity)。在关系数据库中,可以是这样一些逻辑单元(粒度从 小到大):行、表、表空间等。 短期锁:对某数据资源加锁后,对该数据资源的读、写操作结束后立即释放。 长期锁:对某数据资源加锁后一直保留到事务提交才释放。 锁兼容性:如果某一数据资源在被一事务加A 类型锁后,仍然允许另外的事务同时对其加B 类型锁,则认为这 A、B 两种锁是兼容的,否则则认为这两种锁不兼容。 并发事务会出现什么“现象”? 实验环境:Win2000 Server、IBM® DB2® Universal Database™ for Windows® V7.1+补丁包9 。 以下操作如无特殊说明均在DB2CLP (DB2 命令行处理器)中执行命令。 我们先举例子说明数据库的并发事务访问同一数据资源时会出现什么特殊“现象”。在这里,我们假设一个银行 系统数据库DB_BANK 中有以下两个表: ACCOUNTS:帐号表,主要存放各帐号余额,主要信息有 (支行编号、帐号、余额等) BRANCH_TOTALS:支行余额汇总表,主要存放个支行的总余额,主要信息有(支行编号、总余额等) 正常情况下,表ACCOUNTS 中属于某一支行的帐号余额总和会等于表BRANCH_TOTALS 中对应支行的总余额 CREATE DB DB_BANK CONNECT TO DB_BANK CREATE TABLE ACCOUNTS (BRANCH_ID VARCHAR(9),ACCT_ID VARCHAR(9) NOT NULL,BALANCE DECIMAL(9,2),PRIMARY KEY(ACCT_ID)) CREATE TABLE BRANCH_TOTALS (BRANCH_ID VARCHAR(9) NOT NULL,TOTAL_BALANCE DECIMAL(9,2),PRIMARY KEY(BRANCH_ID)) INSERT INTO ACCOUNTS VALUES(支行1, 帐号1,100) INSERT INTO ACCOUNTS VALUES(支行1, 帐号2,200) INSERT INTO ACCOUNTS VALUES(支行2, 帐号3,300) INSERT INTO BRANCH_TOTALS(BRANCH_ID,TOTAL_BALANCE) (SELECT BRANCH_ID,SUM(BALANCE) FROM ACCOUNTS GROUP 1 BY BRANCH_ID) 现在我们开始举例说明并发事务可能出现的特殊“现象”。在开始之前,有必要强调一下,下来要描述的3 种“现 象”并不能称之为错误,而仅是“现象”,在有些应用中,这些“现象”是允许存在的。好,现在让我们开始,以下 红色部分代表事务1,蓝色部分代表事务2: 1)脏读(Dirty Read) 打开一个DB2CLP1,将表ACCOUNTS 中帐号1的余额加10 UPDATE COMMAND OPTIONS USING

您可能关注的文档

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档