Chinaunix首页 | 论坛 | 博客
  • 博客访问: 724219
  • 博文数量: 225
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2722
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-03 17:32
文章分类

全部博文(225)

文章存档

2019年(7)

2018年(16)

2017年(1)

2016年(26)

2015年(41)

2014年(15)

2013年(119)

我的朋友

分类: 服务器与存储

2015-11-26 22:24:16

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


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

  1. SQL> conn /as sysdba  
  2. 已连接。  
  3. SQL> select * from v$locked_object;  
  4.   
  5. 未选定行  

现在来锁住hr用户的一张表。
  1. SQL> conn hr/hr  
  2. 已连接。  
  3. SQL> select * from jobs for update;  
  4.   
  5. JOB_ID     JOB_TITLE                           MIN_SALARY MAX_SALARY  
  6. ---------- ----------------------------------- ---------- ----------  
  7. AD_PRES    President                                20000      40000  
  8. ... ...  
  9. ... ...  
  10.   
  11. 已选择19行。  


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

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


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

  1. SQL> show user  
  2. USER 为 "SYS"  
  3. SQL> select * from v$locked_object;  
  4.   
  5.     XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID ORACLE_USERNAME                OS_USER_NAME                   PROCESS      LOCKED_MODE  
  6. ---------- ---------- ---------- ---------- ---------- ------------------------------ ------------------------------ ------------ -----------  
  7.          6         10        320      51566        150 SCOTT                          oracle                         3027                   3  
  8.          3         34        313      52279        158 HR                             oracle                         3000                   3  


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

  1. SQL> show user  
  2. USER 为 "SYS"  
  3. SQL> select s.sid,s.serial#,s.username,to_char(s.logon_time,'yyyy-mm-dd hh24:mi:ss'),l.process,l.locked_mode   
  4.   2  from v$locked_object l,v$session s where s.sid = l.session_id;  
  5.   
  6.        SID    SERIAL# USERNAME                       TO_CHAR(S.LOGON_TIM PROCESS      LOCKED_MODE  
  7. ---------- ---------- ------------------------------ ------------------- ------------ -----------  
  8.        158         38 HR                             2011-10-24 23:14:35 3000                   3  
  9.        150         28 SCOTT                          2011-10-24 23:22:45 3027                   3  
使用如下语句杀死会话:Kill --alter system kill session 'sid,serial#';
  1. SQL> alter system kill session '158,38';  
  2.   
  3. 系统已更改。  
  4.   
  5. SQL> alter system kill session '150,28';  
  6.   
  7. 系统已更改。  
  8.   
  9. SQL> select * from v$locked_object;  
  10.   
  11. 未选定行  
  12.   
  13. SQL> select s.sid,s.serial#,s.username,to_char(s.logon_time,'yyyy-mm-dd hh24:mi:ss'),l.process,l.locked_mode   
  14.   2  from v$locked_object l,v$session s where s.sid = l.session_id;  
  15.   
  16. 未选定行 
阅读(1074) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~