oracle锁表原因和如何解锁分享
最近项⽬项⽬开始忙起来了,就不哔哔了,直接给你们看东西好了。
查锁表
select a.OS_USER_NAME, c.owner, c.object_name, b.sid, b.serial#, logon_time
from v$locked_object a, v$session b, dba_objects c
where a.session_id = b.sid
and a.object_id = c.object_id
order by b.logon_time;
解锁
ALTER SYSTEM KILL SESSION '129,77';
查什么系统导致上的锁
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=129
查看什么语句导致锁表的
select l.session_id sid,
s.serial#,
l.locked_mode,
s.user#,
l.os_user_name,
s.machine,
a.sql_text,
a.action
from v$sqlarea a, v$session s, v$locked_object l
where l.session_id = s.sid
and s.prev_sql_addr = a.address
order by sid, s.serial#;
查看有⼏个表被锁
session怎么记忆select count(*) from v$locked_object;
查表SPID
129是通过查锁表查出来的SID
select spid, oSUSEr, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=129
当Kill不能解锁时,Ctrl+R CMD 输⼊下⾯这句,结束线程。22860是Oracle锁表线程IP,你⾃⼰要替换⼀下你⾃⼰的,怎么查,上⾯分享了
orakill orcl 22860
锁表可能原因
1、锁表的原理:数据库使⽤独占式封锁机制,当执⾏上⾯的语句时,对表进⾏锁住,直到发⽣commite 或者回滚或者退出数据库⽤户
2、主要的锁表原因有:
(1) A程序执⾏了对 tableA 的 insert ,并还未 commite时,B程序也对tableA 进⾏insert 则此时会发⽣资源正忙的异常就是锁表(2)锁表常发⽣于并发⽽不是并⾏(并⾏时,⼀个线程操作数据库时,另⼀个线程是不能操作数据库的,cpu 和i/o 分配原则)
3、减少锁表的概率⽅法:
(1)减少insert 、update 、delete 语句执⾏到 commite 之间的时间。具体点批量执⾏改为单个执⾏、优化sql⾃⾝的⾮执⾏速度(2)如果异常对事物进⾏回滚
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论