Oracle锁表确认及解除锁表(表级锁,行级锁都可以使用此方法)

由于在PLSQL Developer执行update或某种操作时没有commit,导致oracle将该条记录锁住了。

处理思路:
    (1)通过相关语句查找出占用该表资源的会话sid和serial#,以及process。
    (2)找到相关信息之后,需要杀会话,杀process进程。

解决办法:

        1. 通过v$locked_object、dba_objects、v$session和v$process等视图查找锁住的记录(要确认你的数据库用户有操作的权限,否则会报错“ORA-00942: table or view does not exist”,代表当前用户没有操作这张表的权限)(sql未执行过,没权限,字段与表的对应关系可能需要完善下)。

select object_name,
        machine,
        s.program,
        s.sid,
        s.serial#
        p.spid as os_pid,
        s.sql_address,
        l.locked_mode,
        s.username,
        s.process,
        s.sql_id
    from v$locked_object l,dba_objects o,v$session s,v$process p
    where l.object_id=o.object_id
        and l.session_id=s.sid
        and s.paddr=p.addr
        and object_name='表名' and o.owner='数据库用户名'
    order by 1; 

-- ORDER BY 1 表示 所select 的字段按第一个字段排序,
-- ORDER BY ASC应该没有这样写法,ORDER BY 后面不是字段就是数字,  
-- 可以ORDER BY 1 ASC 或者ORDER BY COL1 ASC,
-- ASC表示按升序排序,DESC表示按降序排序。

        2. 根据SQL_ID查找对应的SQL语句。了解下这个操作是否导致资源繁忙。

SELECT SQL_TEXT FROM V$SQLTEXT WHERE SQL_ID = '7qaxjdqwm4tkf' ORDER BY PIECE;
delete from /*+parallel(t,4)*/ from  ZJDB.T_TABLE t where id=10; 

        3. 杀会话。杀会话也不是那么容易就能杀掉的喔,需要等待一些时间。

alter system KILL session 'sid,serial#'; 

sid,serial#是‘1’中查找出来的值,例如:

alter system kill session '5489,21743';

        4. 查看会话的状态。

select sid,serial#,status from v$session where sid =5489 and serial#=21743;

        5. 查process进程。

$ps -ef|grep 4392874
    0 17:09:20 pts/0 0:00 grep 4202874
    9 10:08:17 - 19:18 oracle RAZJDB1 (LOCAL=NO)    --刷出非本地连接信息

$ps -ef|grep 4392874 |grep LOCAL=NO|awk '{print " -9 "$2}'   --刷出可以直接用于kill的信息
 -9 4392874
$ps -ef|grep 4392874 |grep LOCAL=NO|awk '{print " -9 "$2}'|xargs kill   --杀process
$

        6. 查看会话是否存在。

alter system  kill session '5489,21743';
alter system  kill session '5489,21743'
*
ERROR at line 1:
ORA-00030: User session ID does not exist. 

        7. 收工。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值