oracle加锁方式,oracle中加锁与解锁
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle加锁⽅式,oracle中加锁与解锁
oracle中的数据在并发操作时,为了防⽌错误的发⽣可以进⾏记录或者数据库表的加锁操作。
当锁操作完成时可以进⾏解锁操作。
数据库中加锁有两种⽅式,独占模式和共享模式。
1.独占模式,不允许其他会话以任何⽅式共享锁定资源,当进⾏数据库数据修改时可以使⽤这种模式。
2.共享模式,允许在数据访问时,并发共同访问,但是当修改数据时上升为独占模式。
锁分为⾏级锁和表级锁,⾏级锁是锁定某些⾏记录,表级锁是锁定整张表。
1.⾏级锁。
insert update delete (隐式加⾏锁)
select...for update(显⽰加⾏锁,共享模式)
select * from emp where deptno=30 for update
select * from A where id=2 for update skip locked
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 ;
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 ername,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#.。