`

介绍Oracle数据库锁的种类及研究

阅读更多

本文通过对Oracle数据库锁机制的研究,首先介绍了Oracle数据库锁的种类,并描述了实际应用中遇到的与锁相关的异常情况,特别对经常遇到的由于等待锁而使事务被挂起的问题进行了定位及解决,并对死锁这一比较严重的现象,提出了相应的解决方法和具体的分析过程。

数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。

在实际应用中经常会遇到的与锁相关的异常情况,如由于等待锁事务被挂起、死锁等现象,如果不能及时地解决,将严重影响应用的正常执行,而目前对于该类问题的解决缺乏系统化研究和指导,本文在总结实际经验的基础上,提出了相应的解决方法和具体的分析过程。

Oracle数据库的锁类型

根据保护的对象不同,Oracle数据库锁可以分为以下几大类:DML锁(data locks,数据锁),用于保护数据的完整性;DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义;内部锁和闩(internal locks and latches),保护数据库的内部结构。

DML锁的目的在于保证并发情况下的数据完整性,本文主要讨论DML锁。在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。

当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。如表1所示。

在数据行上只有X锁(排他锁)。在 Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。

当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等。

TX锁等待的分析

在介绍了有关地Oracle数据库锁的种类后,下面讨论如何有效地监控和解决锁等待现象,及在产生死锁时如何定位死锁的原因。

监控锁的相关视图 数据字典是Oracle数据库的重要组成部分,用户可以通过查询数据字典视图来获得数据库的信息。和锁相关的数据字典视图如表2所示。

TX锁等待的监控和解决在日常工作中,如果发现在执行某条SQL时数据库长时间没有响应,很可能是产生了TX锁等待的现象。为解决这个问题,首先应该找出持锁的事务,然后再进行相关的处理,如提交事务或强行中断事务。

死锁的监控和解决在数据库中,当两个或多个会话请求同一个资源时会产生死锁的现象。死锁的常见类型是行级锁死锁和页级锁死锁,Oracle数据库中一般使用行级锁。下面主要讨论行级锁的死锁现象。

当Oracle检测到死锁产生时,中断并回滚死锁相关语句的执行,报ORA-00060的错误并记录在数据库的日志文件alertSID.log中。同时在user_dump_dest下产生了一个跟踪文件,详细描述死锁的相关信息。

在日常工作中,如果发现在日志文件中记录了ora-00060的错误信息,则表明产生了死锁。这时需要找到对应的跟踪文件,根据跟踪文件的信息定位产生的原因。

如果查询结果表明,死锁是由于bitmap索引引起的,将IND_T_PRODUCT_HIS_STATE索引改为normal索引后,即可解决死锁的问题。

表1 Oracle的TM锁类型
锁模式 锁描述 解释 SQL操作
0 none    
1 NULL Select
2 SS(Row-S) 行级共享锁,其他对象只能查询这些数据行

Select for update、Lock for update、Lock row share

3 SX(Row-X) 行级排它锁,在提交前不允许做DML操作

Insert、Update、Delete、Lock row share

4 S(Share) 共享锁 Create index、Lock share
5 SSX(S/Row-X) 共享行级排它锁 Lock share row exclusive
6 X(Exclusive) 排它锁

Alter table、Drop able、Drop index、Truncate table 、Lock exclusive

 

表2 数据字典视图说明
视图名 描述 主要字段说明
v$session 查询会话的信息和锁的信息。

sid,serial#:表示会话信息。

program:表示会话的应用程序信息。

row_wait_obj#:表示等待的对象。

和dba_objects中的object_id相对应。

v$session_wait 查询等待的会话信息。

sid:表示持有锁的会话信息。

Seconds_in_wait:表示等待持续的时间信息

Event:表示会话等待的事件。

v$lock 列出系统中的所有的锁。

Sid:表示持有锁的会话信息。

Type:表示锁的类型。值包括TM和TX等。

ID1:表示锁的对象标识。

lmode,request:表示会话等待的锁模式的信

息。用数字0-6表示,和表1相对应。

dba_locks 对v$lock的格式化视图。

Session_id:和v$lock中的Sid对应。

Lock_type:和v$lock中的type对应。

Lock_ID1: 和v$lock中的ID1对应。

Mode_held,mode_requested:和v$lock中

的lmode,request相对应。

v$locked_object 只包含DML的锁信息,包括回滚段和会话信息。

Xidusn,xidslot,xidsqn:表示回滚段信息。和

v$transaction相关联。

Object_id:表示被锁对象标识。

Session_id:表示持有锁的会话信息。

Locked_mode:表示会话等待的锁模式的信

息,和v$lock中的lmode一致。

分享到:
评论

相关推荐

    Oracle数据库锁的研究.pdf

    根据不同的分类标准,Oracle数据库中的锁可以分为多种类型: 1. 按照操作分类,主要分为DML锁和DDL锁: - DML锁(Data Manipulation Language Locks):用于数据操作,包括行级锁(TX锁)和表级锁(TM锁)。行级锁...

    关于Oracle数据库中的锁机制深入研究

    本文深入探讨了Oracle数据库的锁机制,主要关注锁的种类、异常情况以及解决策略。 Oracle数据库中的锁主要分为两大类型:排它锁(X锁)和共享锁(S锁)。X锁不允许其他事务读取或修改被锁定的数据,而S锁允许其他...

    ORACLE数据库系统加锁问题的研究 (1).pdf

    Oracle数据库提供了多种类型的锁以适应不同的封锁对象和封锁方式,这些锁的分类在表1中体现。这些锁包括但不限于行级锁、表级锁等,它们分别针对不同级别的数据进行保护,确保在并发操作中数据的正确性。例如,行锁...

    ORACLE数据库系统加锁问题的研究.pdf

    Oracle数据库中有多种类型的锁,这些锁根据封锁对象和方式的不同进行分类。例如,有行级锁(Row Locks)用于锁定单个数据行,表级锁(Table Locks)锁定整个表,以及更高级别的锁定机制如分区锁(Partition Locks)...

    oracle 锁

    Oracle数据库是世界上最广泛使用的数据库系统之一,其在处理并发事务和数据安全性方面有着出色的表现。在Oracle中,锁是实现并发控制和数据一致性的关键机制。这篇博客文章将深入探讨Oracle锁的相关知识点。 首先,...

    Oracle Wait Interface.chm

    1. **等待事件的分类**:介绍Oracle数据库中常见的等待事件类别,如用户I/O、系统I/O、网络、内存、并行操作、调度等,以及它们对系统性能的影响。 2. **监控和收集等待事件**:讲解如何使用工具如`v$session_wait`...

    数据库知识点(常见的)

    其本意是,在阿里巴巴的IT架构中,去掉IBM的小型机、Oracle数据库、EMC存储设备,取而代之使用自己在开源软件基础上开发的系统。传统上,一个高端大气的数据中心,IBM小型机、Oracle数据库、EMC存储设备,可以说...

    ORACLE,sql server笔试题目,答案

    通过深入研究这些题目和答案,学习者可以全面地了解Oracle和SQL Server数据库的各个方面,提升自己的专业技能,并在实际工作中更好地应对各种挑战。同时,这也是一种有效的自我评估方式,帮助确定自己在数据库领域的...

    四川大学期末复习数据库ppt

    数据库系统概论是计算机科学中的一个核心课程,主要研究如何高效、安全地存储、管理和检索数据。这份“四川大学期末复习数据库ppt”应当包含了数据库的基本概念、设计原理、查询语言以及实际应用等内容,旨在帮助...

    热-数据库课程设计学习与实践

    1. **数据库基础知识**:首先,你需要了解什么是数据库,它的作用以及种类,如关系型数据库(如MySQL、Oracle)、非关系型数据库(如MongoDB、Redis)等。同时,理解数据模型(如实体-关系模型、概念模型、逻辑模型...

    所有参数,latch,等待时间

    其次,"latch"(锁)是Oracle数据库中的一个重要概念,它用于保护共享资源,确保多用户环境下的数据一致性。Latches分为不同种类,如Block Latch用于保护数据块,Buffer Cache Latch用于管理缓冲区缓存,Library ...

    数据库管理

    数据库管理是信息系统中的核心组成部分,它涉及到数据的...这些知识点只是数据库管理领域的冰山一角,深入研究这份论文资料,你将能够更全面地了解数据库系统的设计、实施和维护,为实际工作中的数据管理打下坚实基础。

    Oracle-ERP(NEW)笔记

    #### 四、Oracle数据库核心技能 ##### 4.1 SQL与函数 - **常用函数详解**:如substr、Lpad/Rpad、日期函数等,掌握数据处理的关键工具。 - **随机取样**:学习如何随机选取数据库中的记录,适用于大数据分析场景。 ...

    精通SQL--结构化查询语言详解

    2.3.1 oracle数据库软件组成 29 2.3.2 oracle数据库体系结构 29 2.3.3 oracle数据库系统结构 30 2.3.4 使用sql*plus执行sql语句 31 2.4 pl/sql简介 32 2.4.1 pl/sql的特点 32 2.4.2 pl/sql程序结构 33 第3章 ...

    MYSQL-DBA的课程大纲

    - 介绍MySQL的历史、发展和未来趋势,与其他数据库系统如Oracle、SQL Server和DB2的对比。 - 学习MySQL的安装方法,包括二进制安装、RPM包安装、源码编译安装,以及安装优化技巧。 - 了解MySQL的基本目录结构、...

    myBank.rar_ MyBank_mybank_银行管理系统

    1. **数据库管理**:银行系统通常需要存储大量的客户信息、账户数据和交易记录,因此会涉及到关系型数据库的设计,如MySQL或Oracle,以及SQL语言的使用。 2. **用户界面设计**:包括登录注册、账户查询、存款取款、...

    社区论坛程序

    2. **JDBC**:Java数据库连接,用于操作数据库,如MySQL、Oracle等。 3. **MVC**(Model-View-Controller)架构:将模型、视图和控制器分离,提高代码可读性和可维护性。 4. **JSTL**(JavaServer Pages Standard ...

    java论坛管理系统设计(源代码+LW).rar

    2. **数据库设计**:数据库是存储论坛数据的核心,通常会选择关系型数据库管理系统(RDBMS),如MySQL或Oracle。系统设计中应包含用户信息、帖子、回复、分类、标签等表,并通过ER图(实体关系图)来规划它们之间的...

Global site tag (gtag.js) - Google Analytics