常常有朋友在说他要往数据库中的某张表插入数据,现在表被别人锁住了,半天不释放。
首先可以看见数据库中没有对象被锁定。
-
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;
-
-
未选定行
阅读(1168) | 评论(0) | 转发(0) |