oracle处理阻塞与死锁
1. 死锁处理
1.1. 建立触发器
登录oracle的dba权限用户,然后执行以下SQL:
1 | create or replace trigger login_on_record_ip |
1.2. 查询锁死
1 | select username,lockwait,status,machine,program,logon_time,CLIENT_INFO from v$session |
Username:死锁语句所用的数据库用户
Lockwait:死锁的状态
Status: 状态,active表示被死锁
Machine: 死锁语句所在的机器
Program: 产生死锁的语句主要来自哪个应用程序
logon_time:登录时间
CLIENT_INFO:客户端登录IP
1.3. 查看死锁的语句
1 | select sql_text from v$sql where hash_value in |
1.4. 查找死锁的进程
1 | SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#, |
1.5. 杀死死锁的进程
1 | alter system kill session 'sid,serial#'; |
2. 阻塞处理
2.1. 查询阻塞
以下语句可以查询执行超过15分钟的SQL:
1 | SELECT S.SQL_TEXT, |
2.2. 查询阻塞的进程
1 | select sid,serial# from v$session where sql_id='sql_id' |
sql_id为上文查出来的S.SQL_ID。
2.3. 杀死阻塞的进程
1 | alter system kill session 'sid,serial#'; |