oracle查詢並殺掉鎖表及物件的session及相關係統程式

shilei1發表於2013-02-19

一、處理過程
      1.透過查詢出已被鎖定的資料庫表及相關的sid、serial#及spid:

        select object_name as 物件名稱,s.sid,s.serial#,p.spid as 系統程式號
        from v$locked_object l , dba_objects o , v$session s , v$process p
        where l.object_id=o.object_id and l.session_id=s.sid and s.paddr=p.addr;

        2.在資料庫中滅掉相關session

       alter system kill session 'sid,serial#';

      --sid及serial#為第一步查出來的資料

        3.從系統中滅掉與該session對應的程式:

       kill -9 spid;

      --spid為第一步中查出來的系統程式號

      經過以上操作之後重新對之前鎖定的物件進行操作應該就可以了。

二、使用了相關表的基本介紹

  • V$LOCKED_OBJECT中的列說明:
    XIDUSN:回滾段號
    XIDSLOT:槽號
    XIDSQN:序列號
    OBJECT_ID:被鎖物件ID
    SESSION_ID:持有鎖的sessionID
    ORACLE_USERNAME:持有鎖的Oracle 使用者名稱
    OS_USER_NAME:持有鎖的作業系統 使用者名稱
    PROCESS:作業系統程式號
    LOCKED_MODE:鎖模式
  • dba_objects的列說明(網上找的,懶得翻譯了^_^)
    OWNER
              Username of the owner of the object
        OBJECT_NAME
              Name of the object
        SUBOBJECT_NAME
              Name of the sub-object (for example,partititon)
        OBJECT_ID
              Object number of the object
        DATA_OBJECT_ID
              Object number of the segment which contains the object
        OBJECT_TYPE
              Type of the object
        CREATED
              Timestamp for the creation of the object
        LAST_DDL_TIME
              Timestamp for the last DDL change (including GRANT and REVOKE) to the object
        TIMESTAMP
              Timestamp for the specification of the object
        STATUS
              Status of the object
        TEMPORARY
              Can the current session only see data that it place in this object itself?
        GENERATED
              Was the name of this object system generated?
        SECONDARY
              Is this a secondary object created as part of icreate for domain indexes?
  • v$session的說明
    V$SESSION是基礎資訊檢視,用於找尋使用者SID或SADDR
    常用列:
    SID:SESSION標識
    SERIAL#:如果某個SID又被其它的session使用的話則此數值自增加(當一個SESSION結束,另一個SESSION開始並使用
    了同一個SID)。
    AUDSID:審查session ID唯一性,確認它通常也用於當尋找並行查詢模式
    USERNAME:當前session在oracle中的使用者名稱。
    STATUS:這列用來判斷session狀態是:
        Achtive:正執行SQL
    語句(waiting for/using a resource)
        Inactive:等待操作(即等待需要執行的SQL語句)
        Killed:被標註為刪除
  • v$process檢視
    v$process檢視包含當前系統Oracle
    執行的所有程式資訊。常被用於將Oracle或服務程式的作業系統
    程式ID與資料庫session之間建立聯絡。
    常用列:
    ADDR:程式物件地址
    PID:oracle程式ID
    SPID:作業系統程式ID

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-754298/,如需轉載,請註明出處,否則將追究法律責任。

相關文章