您的位置:首页 > 数据库 > Oracle

Oracle 锁表查询及解锁kill进程

2014-05-19 12:01 288 查看
1. 查看被锁定的表

SELECT OBJECT_NAME, MACHINE, S.SID, S.SERIAL#,l.LOCKED_MODE,l.OS_USER_NAME
FROM GV$LOCKED_OBJECT L, DBA_OBJECTS O, GV$SESSION S
WHERE L.OBJECT_ID  = O.OBJECT_ID
AND L.SESSION_ID = S.SID;

2.解锁kill进程
--alter system kill session 'sid, serial#'; 

--ALTER system kill session '23, 1647'; 

3. 锁定类型:

0:none 

1:null 空 

2:Row-S 行共享(RS):共享表锁 

3:Row-X 行专用(RX):用于行的修改 

4:Share 共享锁(S):阻止其他DML操作 

5:S/Row-X 共享行专用(SRX):阻止其他事务操作 

6:exclusive 专用(X):独立访问使用

数字越大锁级别越高, 影响的操作越多。

如果DML没有提交情况下,另一个session提交针对同一资源的DLL,系统报错。

如果DML没有提交情况下,另一个session提交针对同一资源的DML,第二个session会hang住,等待第一个session。

死锁:

系统会系统自动处理,处理方式提出形成死锁的人,错误是ORA-00060

命令行模式处理行级锁

查看锁:

select sid,lock_id from dba_locks where blocking_others='Blocking';

sid列:占用资源sid

select sid from v$lock where type='TX';

block列>0:占用资源sid

block列=0:等待资源sid

SELECT * FROM V$SESSION WHERE BLOCKING_SESSION IS NOT NULL;

sid列:等待资源sid

blocking_session列:占用资源sid

oracle级处理:

杀掉占用资源的session

1. 查询sid和serial#

select sid, serial#

  from v$session

 where sid = (select blocking_session

                from v$session

               where blocking_session is not null)

2. 杀进程

alter system kill session 'sid, serial#' immediate;

 杀掉等待资源的session

1. 查询sid和serial#

select sid, serial# from v$session where blocking_session is not null;

2. 杀进程

alter system kill session 'sid, serial#' immediate;

系统级处理:

1. 查询系统pid

select s.sid, p.spid

  from v$session s, v$process p

 where s.paddr = p.addr

   and s.sid = 146

2. 杀进程

kill -9 pid
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: