Oracle锁机制

增删改查中查询不需要锁,即使数据被锁定也能在还原信息中查询出锁定之前的值。其余三项均会使用行级锁,直到用户commit或rollbak。

锁是在指定语句的最低可能级别自动获取的 。增删改获取行级锁而不是块级或表级。修改对象(如移动表)会获取对象级锁,而不是方案锁或数据库锁。最大程度提供事务的并发性。

如多个事务需锁定同一资源,则先到的事务获得锁,之后的事务会自动进入排队等待。获得锁的会话可以申请转换锁而不必排到队尾,这样的会话在队列的优先级始终高于一般会话。

可进行手动锁定:

SQL>LOCK TABLE 表名 IN EXCLUSIVE MODE NOWAIT;

NOWAIT选项可无视其他用户的锁将控制权交给你。

DML(增删改)锁:每个DML语句将获得以下两个锁
1.一个或多个正在更改的行的行级锁。
2.一个ROW EXCLUSIVE模式的表锁,此模式锁允许对表进行并发操作,同时保证其他事务不会锁定整个表,并且可以保证DDL语句不会在DML语句修改数据过程中更改数据字典的元数据信息。

锁冲突解决方案:
1.在EM的“Performance(性能)”页上选择“Blocking Sessions (阻塞会话)”查看阻塞的会话ID、SQL语句等信息,找到用户使其发出commit、rollback命令或选中会话点击kill session终止会话。
2.使用SQL
(1)找出阻塞会话的SID、SERIAL#

SQL> select SID, SERIAL#, USERNAME 
from V$SESSION 
where SID in 
    (select BLOCKING_SESSION 
    from V$SESSION);

(2)杀掉阻塞的会话

SQL>ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;

被杀掉的会话会进行rollback并断开连接。

Oracle会自动检测死锁并终止一个语句。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值