Oracle 锁和阻塞

    oracle中的并发是由于两个或两个以上的用户对同一个资源进行争夺而引发的一种并发行为,这就导致了我们所说的锁,锁是为了保持数据的一致性

    引起阻塞的一些情况:

    1:表中的唯一性约束会引起阻塞(同时对同一条数据做修改,删除,或者新增),如果事物还没有提交或者事务回滚,那么oracle为了保持数据的一致性,就会把其它进程操作此条数据的任务阻塞在外,如果一直没有提交事务或者回滚,那么锁就会一直存在

    2:select for update会引起阻塞,在修改同一条数据的时候,为了防止其他进程修改次数据,可以选择select for update。。。这样就可以把其他对此条数据操作的进程阻塞在外

    3:从表中外键没有设置索引,在生产上  如果数据量很大,每删除一条主表数据,它就会全表扫面一次从表数据看有没有于此对应的数据,这样的速度是很慢的,如果对外键设置了索引,可以极大的调高效率

 

遇到死锁情况:

1:查找死锁进程:

select s.username,l.object_id,l.session_id,s.serial#,l.oracle_username,l.os_user_name,l.process from v$locked_object l,v$session s where l.session_id=s.sid;

 

USERNAME                        OBJECT_ID SESSION_ID    SERIAL# ORACLE_USERNAME                OS_USER_NAME                   PROCESS
------------------------------ ---------- ---------- ---------- ------------------------------ ------------------------------ ------------
SYS                                             52777             158               89                           SYS                                   XIEHUI\Administrator           3188:3200
SYS                                             52777             150              14                            SYS                                   XIEHUI\Administrator           3840:3844

 

2:kill掉这个死锁的进程

alter systerm kill session  (sid,serial#,);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值