ora-01940处理(杀session解锁)

来源:互联网 发布:盐城大数据产业园详址 编辑:程序博客网 时间:2024/06/06 03:06
 

SQL> select username,sid,serial# from v$session;

USERNAME SID SERIAL#
------------------------------ ---------- ----------
SYS 10141 53
ADRIANO 10234,24

已选择2行。

SQL> alter system kill session'10234,24';

系统已更改。

SQL> drop user ADRIANO cascade;

 

先杀session之后,再删除用户对象


select sess.sid, 
    sess.serial#, 
    lo.oracle_username, 
    lo.os_user_name, 
    ao.object_name, 
    lo.locked_mode 
    from v$locked_object lo, 
    dba_objects ao, 
    v$session sess 
where ao.object_id = lo.object_id and lo.session_id = sess.sid; 

SELECT *
  FROM V$SESSION s, sys.x$kglob o, sys.x$kglpn p
 WHERE upper(o.kglnaobj) LIKE upper('%不能编译的包体%')
   AND p.kglpnhdl = o.kglhdadr
   AND s.SADDR = p.kglpnuse;


select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID; 


alter system kill session  '144,46679'  ; 


SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='TJSPFMS2008_LOGIN' AND LOCKS !='0';


SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID=385


SELECT SPID FROM V$PROCESS WHERE ADDR='0000000269230498'



再一次查询目前锁定的对象,若发现以上方法不能解除锁定的表,则用以下方法:

  3.1 执行下面的语句获得进程(线程)号:
     select spid, osuser, s.program
     from v$session s,v$process p
     where s.paddr=p.addr and s.sid=
524 (524是上面的sid)

 

  3.2 在OS上杀死这个进程(线程):
     unix上,用root身份或是相应的oracle身份执行命令:

     #kill -9 9846(9846 上一步查询出的spid)
     windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
     orakill sid thread
     PS:
        sid:表示要杀死的进程属于的实例名
        thread:是要杀掉的线程号,即第3步查询出的spid。
     exp:

        c:>orakill orcl 9846






原创粉丝点击