Oracle数据完整性和锁机制简析


当前第2页 返回上一页

锁的类型

1.数据锁(DML锁)。

用来保证并行访问数据的完整性。能够防止同步冲突的DML和DDL操作的破坏性 交互。是Oracle中主要的锁,又包括表级锁(TM锁)和行级锁(TX锁、也称为事务锁)。

(1).TM锁

1.数据锁(DML锁) 。

(2).TX锁及DML锁工作机制

TX锁是Transaction eXclusive Lock行级排它锁,对一条记录加上TX锁后,其他用户不能修改、删除该记录。

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

1.数据锁(DML锁)

(2).TX锁及DML锁工作机制

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

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

2.字典锁(DDL锁)

DDL命令发出时,Oracle会自动在被处理的对象上添加DDL锁定,从而防止对象被其他用户所修改。当DDL命令结束以后,则释放DDL锁定。DDL锁定不能显式的被请求,只有当对象结构被修改或者被引用时,才会在对象上添加DDL锁定。比如创建或者编译 存储过程时会对引用的对象添加DDL锁定。在创建视图时,也会对引用的表添加DDL锁定等。

在执行DDL命令之前,Oracle会自动添加一个隐式提交命令,然后执行具体的DDL命令,在DDL命令执行结束之后,还会自动添加一个隐式提交命令。实际上,Oracle在执行DDL命令时,都会将其转换为对数据字典表的DML操作。比如我们发出创建表的DDL命令时,Oracle会

2.字典锁(DDL锁)

将表的名称插入数据字典表tab$里,同 时将表里的列名以及列的类型插入col$表里等。因此,在DDL命令中需要添加隐式的提交命令,从而提交那些对数据字典表的DML操作。即使DDL命令失 败,它也会发出提交命令。DDL锁包括三种类型:

•排他的DDL锁定(Exclusive DDL Lock)
大部分的DDL操作都会在被操作的对象上添加排他的DDL锁定,从而防止在DDL命令执行期间,对象被其他用户所修改。当对象上添加了排他的DDL锁定以后,该对象上不能再添加任何其他的DDL锁定。如果是对表进行DDL命令,则其他进程也不能修改表里的数据。

2.字典锁(DDL锁)

•共享的DDL锁定(Shared DDL Lock )
用来保护被DDL的对象不被其他用户进程所更新,但是允许其他进程在对象上添加共享的DDL锁定。如果是对表进行DDL命令,则其他进程可以同时修改表里 的数据。比如我们发出create view命令创建视图时,在视图的所引用的表(这种表也叫基表)上添加的就是共享的DDL命令。也就是说,在创建视图时,其他用户不能修改 基表的结构,但 是可以更新基表里的数据。

3.内部锁

内部锁保护内部数据库结构,如数据文件,对用户是不可见的。

2.字典锁(DDL锁)

•可打破的解析锁定(Breakable Parsed Lock)

在shared pool里缓存的SQL游标或者PL/SQL程序代码都会获得引用对象上的解析锁定。如果我们发出DDL命令修改了某个对象的结构时,该对象相关的、位于 shared pool里的解析锁定就被打破,从而导致引用了该对象的SQL游标或者PL/SQL程序代码全都失效。下次再次执行相同的SQL语句时,需要重新解析,这 也就是所谓的SQL语句的reload了。可打破的解析锁定不会阻止其他的DDL锁定,如果发生与解析锁定相冲突的DDL锁定,则解析锁定也会被打破

死锁的解决

1.查找锁

3.Kill 操作系统进程

Orakill 实例名 操作系统进程ID

Orakill oralearn 2444

其中oralearn是数据库sid,244是第二步查出spid

数据完整性

常用的数据完整性约束规则包括:

1.NOT NULL

2.唯一关键字

3.主关键字

4.外键

5.检查项Check

由于本部分内容再前面的章节中已经穿插讲解,本处不再赘述

要点及习题

习题

1.什么是事务,请解释什么是显式事务和隐式事务。

2.事务具有哪四个特性?并行性 事务主要使用的情况是什么,请举出四种情况。

3.事务级读一致性包括那三种类型,并列表说明其相同点和不同点。

4.什么是数据库锁,包括那两种大的类型?TM锁又包括那些类型?

5.将表级锁和行级锁结合起来,举例解释数据锁的工作机制。

6.什么是死锁?死锁解决的步骤是什么?

7.为什么数据库设计不推荐大量使用外键来确保数据完整性?


标签:Oracle

返回前面的内容

相关阅读 >>

oracle 10g 安装教程[图文]

[oracle] cpupsu补丁安装详细教程

如何查看oracle字符集?

oracle数据与文本导入导出源码示例

mysql怎么导入oracle

linux下php连接oracle数据库

oracle 正则表达式实例详解

入侵oracle数据库的一些技巧

oracle 配置连接远程数据库的教程

oracle通过正则表达式分割字符串 regexp_substr的代码详解

更多相关阅读请进入《oracle》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...