ORACLE锁

来源:互联网 发布:吉林省中小学网络研修 编辑:程序博客网 时间:2024/05/18 09:19

一、ORACLE加锁的原因:

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

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

二、数据库两种基本类型的锁

       在数据库中有两种基本的锁类型: 排它锁(Exclusive Locks, 即X锁)和共享锁(Share Locks, 即S锁)。

       排它锁: 当数据对象被加上排它锁时, 其他的事物不能对它读取和修改

       共享锁: 加了共享锁的数据对象可以被其他事务读取, 但不能修改。

       数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。

三、ORACLE数据库的锁类型

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

      3.1 DML锁

           在ORACLE数据库中, DML锁的目的在于保证并发情况下的数据完整性, DML锁主要包括TM锁TX锁,其中TM锁称为表级锁, TX锁称为事务锁或行级锁DML锁能够保证当某个用户正在更新表里的一行数据时, 其他用户不能同时更新相同的数据行(加了TX锁), 而且不能删除或修改被更新的表。

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

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

           当ORACLE数据库发生TX锁等待时, 如果不及时处理常常会引起ORACLE数据库挂起, 或导致死锁的发生, 产生ORA-60错误。如果长时间未响应, 会造成大量事务失败等。

           五种模式的表级锁

     3.2 DDL锁

           参见ORACLE DDL 锁。

     3.3内部锁和闩

          参见ORACLE闩锁(Latch)。

    

 

           
0 0
原创粉丝点击