oracle 锁同隔离机制

oracle 锁从不同功能可分为表结构锁同行级锁以及表锁也可分为共享锁,共享更新锁,独占锁

DML锁有如下三种封锁方式:
   (1)、共享封锁方式(SHARE)
   (2)、独占封锁方式(EXCLUSIVE)
   (3)、共享更新封锁(SHARE UPDATE)
   其中SHARE,EXCLUSIVE用于表封锁,SHARE UPDATE用于行封锁。

   1、共享方式的表封锁
   共享方式的表封锁是对表中的所有数据进行封锁,该锁用于保护查询数据的一致性,防止其它用户对已封锁的表进行更更新。其它用户只能对该表再施加共享方式的锁,而不能再对该表施加独占方式的封锁,共享更新锁可以再施加,但不允许持有共享更新封锁的进程做更新。共享该表的所有用户只能查询表中的数据,但不能更新。共享方式的表封锁只能由用户用SQL语句来设置,基语句格式如下:
   [quote:04b72348bd]LOCK TABLE <表名>[,<表名>]...
   IN SHARE MODE [NOWAIT]
   [/quote:04b72348bd]
   执行该语句,对一个或多个表施加共享方式的表封锁。当指定了选择项NOWAIT,若该封锁暂时不能施加成功,则返回并由用户决定是进行等待,还是先去执行别的语句。
持有共享锁的事务,在出现如下之一的条件时,便释放其共享锁:
   A、执行COMMIT或ROLLBACK语句。
   B、退出数据库(LOG OFF)。
   C、程序停止运行。
   共享方式表封锁常用于一致性查询过程,即在查询数据期间表中的数据不发生改变。

   2、独占方式表封锁
   独占方式表封锁是用于封锁表中的所有数据,拥有该独占方式表封锁的用户,即可以查询该表,又可以更新该表,其它的用户不能再对该表施加任何封锁(包括共享、独占或共享更新封锁)。其它用户虽然不能更新该表,但可以查询该表。
   独占方式的表封锁可通过如下的SQL语句来显示地获得:
   LOCK TABLE <表名>[,<表名>]....
   IN EXCLUSIVE MODE [NOWAIT]
   独占方式的表封锁也可以在用户执行DML语句INSERT、UPDATE、DELETE时隐含获得。
   拥有独占方式表封锁的事务,在出现如下条件之一时,便释放该封锁: <BR>(1)、执行   COMMIT或ROLLBACK语句。
   (2)、退出数据库(LOG OFF)
   (3)、程序停止运行。
   独占方式封锁通常用于更新数据,当某个更新事务涉及多个表时,可减少发生死锁。

   3、共享更新封锁方式
   共享更新封锁是对一个表的一行或多行进行封锁,因而也称作行级封锁。表级封锁虽然保证了数据的一致性,但却减弱了操作数据的并行性。行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。
   可通过如下的两种方式来获得行级封锁:
   (1)、执行如下的SQL封锁语句,以显示的方式获得:
   LOCK TABLE <表名>[,<表名>]....
   IN SHARE UPDATE MODE [NOWAIT]
   (2)、用如下的SELECT ...FOR UPDATE语句获得:
   SELECT <列名>[,<列名>]...
   FROM <表名>
   WHERE <条件>
   FOR UPDATE OF <列名>[,<列名>].....[NOWAIT]
   一旦用户对某个行施加了行级封锁,则该用户可以查询也可以更新被封锁的数据行,其它用户只能查询但不能更新被封锁的数据行.如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁.即使多个用户对一个表均使用了共享更新,但也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式封锁表,一直到提交或复原该事务为止。行锁永远是独占方式锁。
   当出现如下之一的条件,便释放共享更新锁:
   (1)、执行提交(COMMIT)语句;
   (2)、退出数据库(LOG OFF)
   (3)、程序停止运行。
   执行ROLLBACK操作不能释放行锁。

一般来说不会进行锁全表操作UPDATE INSERT DELETE 大部分是进行行级锁也是独占锁如这个语句:update table_name set column_name='123'  where id="1256".  如果进行表结构更改如加列删列会进行表结构锁

 

l          设置一个事务的隔离级别
l         SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
l         SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
l         SET TRANSACTION READ ONLY;
l         设置增个会话的隔离级别
l         ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;
l         ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED;
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值