oracle中加锁与解锁

5 篇文章 0 订阅

    oracle中的数据在并发操作时,为了防止错误的发生可以进行记录或者数据库表的加锁操作。当锁操作完成时可以进行解锁操作。

    数据库中加锁有两种方式,独占模式共享模式

    1.独占模式,不允许其他会话以任何方式共享锁定资源,当进行数据库数据修改时可以使用这种模式。

    2.共享模式,允许在数据访问时,并发共同访问,但是当修改数据时上升为独占模式。

    锁分为行级锁和表级锁,行级锁是锁定某些行记录,表级锁是锁定整张表。

    1.行级锁。

    insert update delete (隐式加行锁)

    select...for update(显示加行锁,共享模式)

select * from emp where deptno=30 for update 
update emp set ename='Joke' where empno=7499;
在释放锁之前其他用户只能对进行数据查询,不能对数据进行insert、delete和update。

假如有其他用户要锁定同一资源:可以使用wait 子句对锁的等待时间控制 如: 在另一用户中:select * from emp where deptno=30 for update wait 2 (等待2秒 如2秒钟还未释放资源,系统将会给出提示信息。

    2.表级锁。

    共享模式(in share mode) 
共享更新模式(in share update mode) 排他锁模式 锁定表的通用语法: 
lock table 表名 in <share or share update or exclusive mode>;

 1) 共享模式 
不允许其他用户插入,更新和删除行,多个用户可以同时在同一表上设置共享锁,这样设置锁的多个用户都只能执行查询 lock table emp in share mode; 
2)共享更新模式(in share update mode)
允许多个用户同时锁定表的不同行, 允许其他用户进行DML(insert update delete select)操作 , 除了已锁定的行 
如: lock table emp in share update mode; 
select * from emp where deptno=30 for update //锁定的行 其他用户不能delete ,update 部门30的雇员信息 
其他用户可以查看锁定的行: select * from emp where deptno=30

3)排他锁模式(限制性强) 
不允许其他用户插入,更新和删除行, 允许查看数据,但只有一个用户可以在表中放置排他锁 
lock table emp in exclusive mode; 

    解锁

(1)锁表查询的代码有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(2)查看哪个表被锁
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
(3)查看是哪个session引起的
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time; 
(4)杀掉对应进程
执行命令:alter system kill session'1025,41';
其中1025为sid,41为serial#.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值