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

来源:互联网 发布:淘宝进店提醒 编辑:程序博客网 时间:2024/04/30 21:15

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


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

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 userUSER 为 "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 userUSER 为 "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;未选定行

原创粉丝点击