杀会话之查找锁表的对象及相关操作

主题:杀会话之查找锁表的对象及相关操作
作者:基毛飞上天

场景:今天有个小哥哥跟我说:他们正在truncate一张表,但是却报了错误, 你可以帮我们看下是什么导致资源正在繁忙吗?顺便就帮我们杀掉会话吧!
报错内容如下:

点击(此处)折叠或打开

  1. SQL> truncate table ZJDB.T_TABLE;
  2. truncate table ZJDB.T_TABLE
  3.                        *
  4. ERROR at line 1:
  5. ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
处理思路:
(1)通过相关语句查找出占用该表资源的会话sid和serial#,以及process
(2)找到相关信息之后,需要杀会话,杀process进程

1. 通过 v$locked_object、 dba_objects、 v$session和 v$process等视图找出相关的信息

点击(此处)折叠或打开

  1. select object_name ,machine ,s.program ,
  2. s.sid,s.serial#
  3. p.spid as os_pid ,
  4. s.sql_address,
  5. l.locked_mode,
  6. s.username,
  7. s.process,
  8. s.sql_id
  9. from v$locked_object l,dba_objects o ,v$session s ,v$process p
  10. where l.object_id=o.object_id
  11. and l.session_id=s.sid
  12. and s.paddr=p.addr
  13. and object_name='T_TABLE' and o.owner='ZJDB'
  14. order
  15. by 1
  16. ;
  17. OBJECT_NAME     MACHINE           PROGRAM     sid  serial#      OS_PID   SQL_ADDRESS   LOCKED_MODE USERNAME PROCESS     SQL_ID
    ------------- ------------- ---------------- ----- ------ --------- ------------- ----------- -------- ---------- ------------- 
    T_TABLE         RACZJ-DB01       plsqldev.~~   5489 21743  4202874  071113A2QA1CC0     3       SCOTT   5416:7556  7qaxjdqwm4tkf


2.  根据SQL_ID查找对应的SQL语句
    了解下这个操作是否导致资源繁忙。

点击(此处)折叠或打开

  1. SQL> SELECT SQL_TEXT FROM V$SQLTEXT WHERE SQL_ID = '7qaxjdqwm4tkf' ORDER BY PIECE;
  2. delete from /*+parallel(t,4)*/ from  ZJDB.T_TABLE t where id=10;
3. 杀会话
   杀会话也不是那么容易就能杀掉的喔,需要等待一些时间

点击(此处)折叠或打开

  1. SQL> alter system kill session '5489,21743';
alter system /*AP_HW_20180423_6351799*/ kill session '5389,21743'
*
ERROR at line 1:
ORA-00031: session marked for kill
4. 查看会话的状态

点击(此处)折叠或打开

  1. SQL> select sid,serial#,status from v$session where sid =5489 and serial#=21743;

  2.        SID SERIAL# STATUS
  3. ---------- ---------- --------
  4.       5389 41743 KILLED

5. 查process 进程

点击(此处)折叠或打开

  1. $ps -ef|grep 4392874
  2.  0 17:09:20 pts/0 0:00 grep 4202874
  3.  9 10:08:17 - 19:18 oracle RAZJDB1 (LOCAL=NO)    --刷出非本地连接信息
$ps -ef|grep 4392874 |grep LOCAL=NO|awk '{print " -9 "$2}'   --刷出可以直接用于kill的信息
 -9 4392874
$ps -ef|grep 4392874 |grep LOCAL=NO|awk '{print " -9 "$2}'|xargs kill   --杀process
$
6. 查看会话是否存在

点击(此处)折叠或打开

  1. SQL> alter system  kill session '5489,21743';
  2. alter system  kill session '5489,21743'
  3. *
  4. ERROR at line 1:
  5. ORA-00030: User session ID does not exist.

7.  收工结束

















来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31092650/viewspace-2155160/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31092650/viewspace-2155160/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值