手动释放oracle数据库中死锁的对象锁!

常常有朋友在说他要往数据库中的某张表插入数据,现在表被别人锁住了,半天不释放。


首先可以看见数据库中没有对象被锁定。

SQL> conn /as sysdba
已连接。
SQL> select * from v$locked_object;

未选定行

现在来锁住hr用户的一张表。

SQL> conn hr/hr
已连接。
SQL> select * from jobs for update;

JOB_ID     JOB_TITLE                           MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES    President                                20000      40000
... ...
... ...

已选择19行。


再用scott用户插入一条数据。

SQL> conn scott/tiger
已连接。
SQL> insert into bonus values('1','2',3,4);

已创建 1 行。


可以看见现在有两行记录了。

SQL> show user
USER 为 "SYS"
SQL> select * from v$locked_object;

    XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID ORACLE_USERNAME                OS_USER_NAME                   PROCESS      LOCKED_MODE
---------- ---------- ---------- ---------- ---------- ------------------------------ ------------------------------ ------------ -----------
         6         10        320      51566        150 SCOTT                          oracle                         3027                   3
         3         34        313      52279        158 HR                             oracle                         3000                   3


现在sys用户可以杀死这些会话,让他们释放锁!

SQL> show user
USER 为 "SYS"
SQL> select s.sid,s.serial#,s.username,to_char(s.logon_time,'yyyy-mm-dd hh24:mi:ss'),l.process,l.locked_mode 
  2  from v$locked_object l,v$session s where s.sid = l.session_id;

       SID    SERIAL# USERNAME                       TO_CHAR(S.LOGON_TIM PROCESS      LOCKED_MODE
---------- ---------- ------------------------------ ------------------- ------------ -----------
       158         38 HR                             2011-10-24 23:14:35 3000                   3
       150         28 SCOTT                          2011-10-24 23:22:45 3027                   3
使用如下语句杀死会话:Kill --alter system kill session 'sid,serial#';
SQL> alter system kill session '158,38';

系统已更改。

SQL> alter system kill session '150,28';

系统已更改。

SQL> select * from v$locked_object;

未选定行

SQL> select s.sid,s.serial#,s.username,to_char(s.logon_time,'yyyy-mm-dd hh24:mi:ss'),l.process,l.locked_mode 
  2  from v$locked_object l,v$session s where s.sid = l.session_id;

未选定行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值