oracle的會話如何自殺?
問題提出:
pub上有網友提出了一個會話如何自殺,因為一個會話是不能殺死自己的,如果直接執行alter system kill session 來殺死自己,則報錯如下:
SQL> select sid,serial# from v$session where sid in (select sid from v$mystat);
SID SERIAL#
---------- ----------
855 27
SQL> alter system kill session '855,27';
alter system kill session '855,27'
*
ERROR at line 1:
ORA-00027: cannot kill current session
那來看一下如何把kill session的任務扔給job,讓job充當另一個會話來殺掉自己:
CREATE OR REPLACE PROCEDURE PRC_KILLSELF(V_SID VARCHAR2, V_SERIAL VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE 'alter system kill session ''' || V_SID || ',' ||
V_SERIAL || '''';
END PRC_KILLSELF;
上面是自殺的程式。
CREATE OR REPLACE PROCEDURE PRC_COMMITJOB(V_SID NUMBER, V_SERIAL NUMBER) IS
V_RETURN NUMBER;
BEGIN
DBMS_JOB.SUBMIT(JOB => V_RETURN,
WHAT => 'prc_killself(' || V_SID || ',' || V_SERIAL || ');');
COMMIT;
END PRC_COMMITJOB;
上面是把自殺過程提交為job的程式。下面來看看執行的結果:
SQL> select distinct sid from v$mystat;
SID
----------
843
SQL> select sid,serial# from v$session where sid=843;
SID SERIAL#
---------- ----------
843 243
SQL> exec PRC_COMMITJOB(843,243);
PL/SQL procedure successfully completed.
SQL> desc v$session;
ERROR:
ORA-00028: your session has been killed
可以看到自己的session已經被殺掉了,desc命令已經不能執行。
附:此過程是在sys使用者下直接做的測試,如果其他使用者下,kill session需要alter system的許可權(網上搜來的,偶未測試)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25016/viewspace-925655/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 會話(Session)Oracle會話Session
- oracle鎖會話Oracle會話
- oracle如何找出登入會話v$session的IP地址?Oracle會話Session
- oracle中會話的狀態Oracle會話
- ?ORACLE會話超時Oracle會話
- Oracle跟蹤會話Oracle會話
- oracle 會話,連線Oracle會話
- 如何讓shell指令碼自殺指令碼
- 在Oracle中,如何定時清理INACTIVE狀態的會話?Oracle會話
- Oracle阻塞會話查詢Oracle會話
- oracle session(會話) 跟蹤OracleSession會話
- 【會話】Oracle kill session系列會話OracleSession
- oracle遭遇大量SNIPED會話Oracle會話
- ORACLE快速徹底Kill掉的會話Oracle會話
- oracle 定期清理inactive會話Oracle會話
- 一個類如何實現自殺?薦
- Oracle查詢當前會話的sidOracle會話
- SQLServer如何監控阻塞會話SQLServer會話
- oracle實用sql(7)--單個會話或會話間statistics對比OracleSQL會話
- Oracle會話超時退出設定Oracle會話
- oracle 10046當前會話Oracle會話
- Oracle kill會話--sed修改檔案Oracle會話
- oracle會話監控shell指令碼Oracle會話指令碼
- 我的自殺式程式
- 如何充分利用你的會話工具會話
- ORACLE 12c索引分裂引起的會話夯Oracle索引會話
- 用Oracle跟蹤診斷掛起的會話Oracle會話
- 修改oracle當前會話的語言環境Oracle會話
- 如何使用 byobu 複用 SSH 會話會話
- AWS RDS for MySQL如何終止會話MySql會話
- Check_oracle_health 之阻塞會話數Oracle會話
- Oracle 查詢當前會話標識Oracle會話
- 修改oracle會話時間表達方式Oracle會話
- -t【Oracle-故障管理】-Trace跟蹤會話和會話執行慢故障分析Oracle會話
- MySQL:Innodb如何快速殺掉堵塞會話的思考MySql會話
- oracle如何徹底kill掉會話及os作業系統資源Oracle會話作業系統
- ZooKeeper如何模擬會話失效(Session Expired)會話Session
- CommMonitor 如何關閉監控會話?會話