• oracle 查询锁住的对象,kill会话


    在执行ddl时有时会报出ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired的错误,那是因为有会话锁住了ddl操作的表。

    表被锁有可能是忘记关掉某个会话,或者某个会话因打开的sercureCRT窗口超时,无法正常关闭。

    查询被锁对象与会话信息。

    SQL> select l.session_id,o.owner,o.object_name,process from v$locked_object l,dba_objects o where l.object_id=o.object_id;

    SESSION_ID OWNER OBJECT_NAME PROCESS
    ---------- ------------------------------ -------------------- ----------
    17   SCOTT       T       5389

    session_id为会话id,process为操作系统进程id

    可以通过视图v$session, 查询会话信息

    select sid,serial#,sql_id,process from v$session where sid=17;

    SID      SERIAL#    SQL_ID    PROCESS
    ---------- ---------- ------------- ----------
    17        897     7cfz5wy9caaf4       5389

    当然也可以直接关联查询会话

    SQL> select s.sid,s.serial#,s.sql_id,paddr from v$locked_object l,v$session s where l.session_id=s.sid;

    SID SERIAL# SQL_ID PADDR
    ---------- ---------- ------------- ----------------
    17 897 7cfz5wy9caaf4 00000000BF4E2020

    sid 会话id,serial#为会话序列号

    杀掉会话,可以通过sql命令 alter system kill session 'sid,serail#';  

    alter system kill session '17,897';

    如果有ora-00031错误,则在后面加immediate;

    查询对应的操作系统进程id, v$session视图的paddr对应v$process视图addr,进程对象的地址。

    SQL> select spid from v$process where addr='00000000BF4E2020';

    SPID
    ------------------------
    5498

    也可以通过操作系统命令 kill -9 '刚才查到的spid' 来杀掉对应的操作系统进程。

    kill -9 5498 

     查询当前会话id

    select sid from v$mystat where rownum=1;

  • 相关阅读:
    产生6位的随机码
    用户输入注册的小程序
    进度条的小程序
    文件的相关操作---读写与修改
    字符串分割(C++) 转载
    C++ Stream与编码转换
    wxWidgets界面设计工具DialogBlocks(转载)
    WIN32窗口模板
    WTL对话框应用程序响应键盘消息
    常用网站
  • 原文地址:https://www.cnblogs.com/JennyYu/p/16075781.html
Copyright © 2020-2023  润新知