1. 程式人生 > >oracle儲存過程編譯死掉的原因及解決(轉)

oracle儲存過程編譯死掉的原因及解決(轉)

一次解決session無法完全刪除問題的全過程Linux


            作者:資料庫 文章來源:資料庫技術 點選數:7 更新時間:2006-4-8


            
            開發環境:win2000server+oracle9i+delphi
            開發人員報告:在程式中殺了JOB,但是被操作的表還是鎖表狀態,
            其中有一張日誌表還在不斷插入記錄,直到執行完所有插入操作(一個漫長的等待過程)才能解鎖
            現場描述:oem中被殺job起的SESSION狀態為killed,其中有3張表被鎖點選右鍵--》中斷會話
            提示: 標記要刪去的會話

            ===================================================================================================
            處理方法一 :

            1.SELECT saddr,sid,serial#,paddr,username,status FROM v$session
            WHERE username IS NOT NULL
            example:saddr,sid,serial#,paddr,username,status FROM v$session WHERE
            username = 'XNJW0419' ;
            SADDR SID SERIAL# PADDR USERNAME STATUS
            -------- ---------- ---------- --------
            ------------------------------ --------
            542E0E6C 11 314 542B70E8 EYGLE INACTIVE 542E5044 18 662 542B6D38 SYS
            ACTIVE

            2.ALTER SYSTEM KILL SESSION 'sid, serial#';
            example:ALTER SYSTEM KILL SESSION '11,314';(注:在sqlplus中執行 )

            結果: 提示標記要刪去的會話 無法釋放會話,未成功解鎖

            ====================================================================================================
            處理方法二 :

            a、 找到你要殺掉的那個SESSION, 並記下paddr

            SELECT sid, username, paddr, status FROM v$session WHERE username =
            '使用者名稱' ;
            example:SELECT sid, username, paddr, status FROM v$session WHERE
            username = 'XNJW0419' ;
            SID USERNAMEPADDRSTATUS
            ---------- ------------------------------ -------- --------
            10 XNJW04192B5E2E2C KILLED

            b、 找到這個SESSION所對應的spid

            SELECT * FROM v$process WHERE addr = '上面查尋的paddr';
            example:SELECT ADDR,PID,SPID,USERNAME,SERIAL#,TERMINAL FROM
            v$process WHERE addr = '2B5E2E2C';
            ADDRPID SPIDUSERNAMESERIAL# TERMINAL
            -------- ---------- ------------ --------------- ----------
            ----------------
            2B5E2E2C44 1204SYSTEM-99 JWC

            c、 殺掉spid所標識的那個程序

            D:/>orakill sid  spid (注:cmd命令視窗中執行 只有oracle伺服器端才有orakill命令)
            example: D:/>orakill oemrep 1204

            提示:KILL OF THREAD id 1204 IN INSTANCE oemrep successfully signalled.

            結果:成功刪除該SESSION,表也解鎖