DB2数据库与Oracle并发控制(锁)的大比拼

数据库
本文主要向大家讲述的是DB2数据库和Oracle的并发控制(锁)的比较,以及对其在实际操作中所要涉及到的相关操作细节的描述。

以下的文章主要向大家描述的是DB2数据库和Oracle的并发控制(锁)的比较,以下就是对DB2数据库和Oracle的并发控制(锁)的比较的描述,望会对你有所帮助,以下就是文章的主要内容讲述。

1 引言

 

在关系数据库(DB2,Oracle,Sybase,Informix和SQL Server)最小的恢复和交易单位为一个事务(Transactions),事务具有ACID(原子性,一致性,隔离性和***性)特征。关系数据库为了确保并发用户在存取同一数据库对象时的正确性(即无丢失更新、可重复读、不读"脏"数据,无"幻像"读),DB2数据库中引入了并发(锁)机制。基本的锁类型有两种:排它锁(Exclusive locks记为X锁)和共享锁(Share locks记为S锁)。

排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。

共享锁:若事务T对数据D加S锁,则其它事务只能对D加S锁,而不能加X锁,直至T释放D上的S锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁。

2 DB2 多粒度封锁机制介绍

2.1 锁的对象

DB2支持对表空间、表、行和索引加锁(大型机上的DB2数据库还可以支持对数据页加锁)来保证数据库的并发完整性。不过在考虑用户应用程序的并发性的问题上,通常并不检查用于表空间和索引的锁。该类问题分析的焦点在于表锁和行锁。

2.2 锁的策略

DB2可以只对表进行加锁,也可以对表和表中的行进行加锁。如果只对表进行加锁,则表中所有的行都受到同等程度的影响。如果加锁的范围针对于表及下属的行,则在对表加锁后,相应的数据行上还要加锁。究竟应用程序是对表加行锁还是同时加表锁和行锁,是由应用程序执行的命令和系统的隔离级别确定。

2.2.1 DB2表锁的模式

DB2在表一级加锁可以使用以下加锁方式:

表一:DB2数据库表锁的模式

下面对几种表锁的模式进一步加以阐述:

IS、IX、SIX方式用于表一级并需要行锁配合,他们可以阻止其他应用程序对该表加上排它锁。

如果一个应用程序获得某表的IS锁,该应用程序可获得某一行上的S锁,用于只读操作,同时其他应用程序也可以读取该行,或是对表中的其他行进行更改。

如果一个应用程序获得某表的IX锁,该应用程序可获得某一行上的X锁,用于更改操作,同时其他应用程序可以读取或更改表中的其他行。

如果一个应用程序获得某表的SIX锁,该应用程序可以获得某一行上的X锁,用于更改操作,同时其他应用程序只能对表中其他行进行只读操作。

S、U、X和Z方式用于表一级,但并不需要行锁配合,是比较严格的表加锁策略。

如果一个应用程序得到某表的S锁。该应用程序可以读表中的任何数据。同时它允许其他应用程序获得该表上的只读请求锁。如果有应用程序需要更改读该表上的数据,必须等S锁被释放。

如果一个应用程序得到某表的U锁,该应用程序可以读表中的任何数据,并最终可以通过获得表上的X锁来得到对表中任何数据的修改权。其他应用程序只能读取该表中的数据。U锁与S锁的区别主要在于更改的意图上。U锁的设计主要是为了避免两个应用程序在拥有S锁的情况下同时申请X锁而造成死锁的。

如果一个应用程序得到某表上的X锁,该应用程序可以读或修改表中的任何数据。其他应用程序不能对该表进行读或者更改操作。

如果一个应用程序得到某表上的Z锁,该应用程序可以读或修改表中的任何数据。其他应用程序,包括未提交读程序都不能对该表进行读或者更改操作。

IN锁用于表上以允许未提交读这一概念。

2.2.2 DB2行锁的模式

除了表锁之外,DB2还支持以下几种方式的行锁。以上的相关内容就是对DB2数据库和Oracle的并发控制(锁)的比较的介绍,望你能有所收获。

【编辑推荐】

  1. DB2 LOAD命令所提供的选项及注册表变量大全
  2. DB2快照函数全解析经典版
  3. DB2:信息管理 尽在掌握
  4. DB2 9 XML 性能优势
  5. DB2 V7存储过程构建环境设置的正确操作步骤描述
责任编辑:佚名 来源: 中国IDC圈
相关推荐

2009-11-16 09:05:47

PostgreSQLInnoDB多版本并发控制

2023-11-14 09:00:00

向量数据库ChromaMilvus

2023-05-26 15:53:48

MidjourneyAI图像

2010-09-07 09:31:03

DB2数据库锁表

2009-10-13 14:46:00

思科认证

2010-04-21 12:54:46

Unix内核

2019-08-27 09:00:00

敏捷开发开发方法项目

2019-07-13 15:00:17

结构化SQLNOSQL数据库

2019-10-23 15:06:23

HadoopMongoDB数据库

2010-03-18 14:54:46

主流无线技术

2020-08-04 17:06:40

Merging Rebasing Git

2011-01-19 11:10:30

2010-08-04 13:30:49

2010-08-16 14:45:15

DB2数据库

2009-07-06 17:34:26

远程复制DB2

2024-07-19 08:33:56

2018-11-15 10:23:18

路由器类别作用

2010-08-04 11:18:09

2010-08-10 10:07:29

DB2 数据库

2009-07-02 18:50:43

点赞
收藏

51CTO技术栈公众号