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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL:Innodb如何快速殺掉堵塞會話的思考MySql會話
- ?ORACLE會話超時Oracle會話
- 在Oracle中,如何定時清理INACTIVE狀態的會話?Oracle會話
- Oracle阻塞會話查詢Oracle會話
- 查殺oracle的阻塞Oracle
- 殺會話之查詢鎖表的物件及相關操作會話物件
- 如何讓shell指令碼自殺指令碼
- ORACLE 12c索引分裂引起的會話夯Oracle索引會話
- oracle 會話(session)被鎖瞭解決方法Oracle會話Session
- 我的自殺式程式
- 來自 他 的謀殺
- Oracle更改預設日期格式 更改會話日期格式Oracle會話
- ORACLE會話連線程式三者總結Oracle會話線程
- Oracle:select 或 inactive 會話語句產生鎖?Oracle會話
- 在oracle中跟蹤會話執行語句的幾種方法Oracle會話
- SQLServer如何監控阻塞會話SQLServer會話
- 如何充分利用你的會話工具會話
- IO Interactive 與《殺手》系列的未來走向將會如何?
- CommMonitor 如何關閉監控會話?會話
- 如何使用 byobu 複用 SSH 會話會話
- [oracle] 查詢歷史會話、歷史執行計劃Oracle會話
- 如何自學qt(4)——對話方塊QT
- Cassandra的Session會話Session會話
- ZooKeeper如何模擬會話失效(Session Expired)會話Session
- python+pytest介面自動化(10)-session會話保持PythonSession會話
- 自動化橫行的今天,手工測試如何殺出一條血路?
- 非計算機專業如何靠自學殺進 BAT ?計算機BAT
- 會說話的ABAP report
- ZooKeeper 會話的祕密會話
- Oracle 查詢佔用臨時表空間大的歷史會話和SQLOracle會話SQL
- 會話管理會話
- [20211014]如何取消使用者的查詢在另外的會話.txt會話
- Golddata如何採集需要登入/會話的網站資料?Go會話網站
- 談判失敗:Oracle是如何殺死Java EE的?所有企業級Java的巨大損失!OracleJava
- 為什麼sleeping的會話會造成阻塞會話
- 最新的AI會“殺死”程式設計嗎?AI程式設計
- MQTT-會話MQQT會話
- Oracle優化案例-IB網及會話登陸審計引發的效能問題(十七)Oracle優化會話