1. 程式人生 > >Kill session 和orakill 殺會話及程序總結

Kill session 和orakill 殺會話及程序總結

一個使用者程序偶爾會掛起或佔用過多資源而拒絕其它會話。如果DBA依然能夠訪問資料庫,她通常可以發出以下查詢:
select s.username, s.osuser, s.sid, s.serial#, p.spid  from v$session s,v$process p
where s.paddr = p.addr    and s.username is not null;
select 'alter system kill session ',''''||trim(t2.sid)||','||trim(t2.serial#)||''';'
from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time;
這個查詢將返回資料庫使用者名稱、作業系統使用者名稱、會話 ID,序列號和系統程序 ID(SPID)。然後,DBA 使用者就可以發出以下命令(前面的查詢返回的使用 SID 和SERIAL# 資訊):
ALTER SYSTEM KILL SESSION 'sid,serial#';
ALTER SYSTEM KILL SESSION '9,203';
使用這條語句有兩個問題。
第一:分配給這個程序的任何鎖或資源在會話完全超時之前不會被釋放。
第二:查詢和 kill 命令需要能夠訪問資料庫。如果一個進行失去控制,那麼資料庫訪問可能會出現問題。
在一個 UNIX 資料庫中,下一步是 ps 命令輸出的 UNIX 提示中定位程序(同樣是查詢 OSUSER 和 SPID 等 ID)然後使用 kill -9 spid 結束失控的後臺程序。然而,在 Windows 中,只有一個程序 ORACLE.EXE,而且使用者連線是在 Windows 執行緒中處理的,而不在程序中處理的。如果使用 Windows 工作管理員結束 Oracle 執行緒,就有可能影響所有使用者和後臺執行緒,並導致資料庫崩潰。
出於這些原因,Oracle 在Oracle Home/bin 目錄下提供了一個 orakill.exe 命令,這個命令的引數與ALTER SYSTEM KILL SESSION 相同,但是不要求資料庫連線。要定位一個特定的執行緒,需要尋找一個能夠顯示屬於一個程序的所有執行緒的程式。Windows 工作管理員只能顯示執行緒數和程序。你需要從微軟的資源工具包中尋找一個用於 Windows 2000 和 NT 的工具程式,比如免費的QuickSlice,或者Qslice.exe(該工具是基於 Windows 的),或者PStat(Pstat.exe 是一個命令列工具)。簡單地在 orakill 命令後輸入執行緒 ID(以十進位制表示)和 SID 即可:
orakill <sid> <spid>
orakill ORCL 2760


"Kill of thread id 2760 in instance ORCL successfully signalled[sic]."
應該只有在不能訪問資料庫來執行ALTER SYSTEM KILL SESSION 的情況才使用orakill。如果意外結束了一個必要的後臺程序,比如 PMON,那麼很可能會導致資料庫崩潰。新手永遠不要這樣做。
Orakill的使用方法如下:
              Dos提示符下:>orakill sid thread
              說明: sid Oracle的Sid號
                                  thread  Oracle的執行緒id號
在Sql*plus工具裡面可以查詢到Oracle的執行緒號
sql:>Select p.spid THREADID, s.osuser, s.program
From v$process p, v$session s
Where p.addr = s.paddr
結果如下:
THREADID  OSUSER                                  PROGRAM
--------- ----------------------- -----------------------------
169            SYSTEM                                  ORACLE.EXE
215            SYSTEM                                  ORACLE.EXE
280            SYSTEM                                  ORACLE.EXE
267            SYSTEM                                  ORACLE.EXE
287            SYSTEM                                  ORACLE.EXE
288            SYSTEM                                  ORACLE.EXE
271            SYSTEM                                  ORACLE.EXE 
282            SYSTEM                                  ORACLE.EXE 
239            PROD_NTdjones                  SVRMGRL.EXE
281            SSMITH-PCssmith              SQLPLUSW.EXE


12 rows selected.


需要注意的是,如果你Kill掉的是Oracle的核心後臺執行緒(DBWR, LGWR, SMON or PMON),將導致Oracle例項關閉。檢查Oracle的核心後臺執行緒的方法如下:
sql:>Select vb.name NOME, vp.programe PROCESSNAME, vp.spid THREADID, vs,sid SID
From v$session vs, v$process vp, v$bgprocess vb
Where vb.addr <> ‘00’ and
vb.paddr = vp.addr and
vp.addr = vs.paddr
查詢結果如下:


NOME  PROCESSNAME                                                THREADID  SID
----- ----------------------------------- --------- ------
PMON  ORACLE.EXE                                                  169            1
DBW0  ORACLE.EXE                                                  215            2
LGWR  ORACLE.EXE                                                  280            3
CKPT  ORACLE.EXE                                                  267            4
SMON  ORACLE.EXE                                                  287            5
RECO  ORACLE.EXE                                                  288            6
SNP0  ORACLE.EXE                                                  271            7
SNP1  ORACLE.EXE                                                  282            8


8 rows selected.

window xp + oracle 9.2.0.1


================
orakill的用法
================
SQL> SELECT spid, osuser, s.program,sid
                                FROM v$process p, v$session s
                                WHERE p.addr=s.paddr;


SPID                                        OSUSER                            PROGRAM                              SID
------------------------ -------------------- --------------- ----------
6928                                        SYSTEM                            ORACLE.EXE                            1
5272                                        SYSTEM                            ORACLE.EXE                            2
7008                                        SYSTEM                            ORACLE.EXE                            3
6588                                        SYSTEM                            ORACLE.EXE                            4
6780                                        SYSTEM                            ORACLE.EXE                            5
6128                                        SYSTEM                            ORACLE.EXE                            6
6740                                        SYSTEM                            ORACLE.EXE                            7
6684                                        SYSTEM                            ORACLE.EXE                            8
7092                                        SYSTEM                            ORACLE.EXE                            9
6272                                        SYSTEM                            ORACLE.EXE                          10
4760                                        lifeng.fang                  sqlplus.exe                                        12
SPID                                        OSUSER                            PROGRAM                              SID
------------------------ -------------------- --------------- ----------
6484                                        lifeng.fang                  sqlplus.exe                        11


4284
語法:orakill 例項名 spid  (在win上是執行緒號)


SQL> host orakill charset 6484;
Kill of thread id 6484 in instance charset successfully signalled.


spid是os程序ID
pid是Oracle process ID


根據蓋國強的猜測

當在Oracle中kill session以後, Oracle只是簡單的把相關session的paddr 指向同一個虛擬地址.此時v$process和v$session失去關聯,程序就此中斷.然後Oracle就等待PMON去清除這些Session.所以通常等待一個被標記為Killed的Session退出需要花費很長的時間.如果此時被Kill的process,重新嘗試執行任務,那麼馬上會收到程序中斷的提示,process退出,此時Oracle會立即啟動PMON來清除該session.這被作為一次異常中斷處理.

當然如果該使用者已經沒有使用,例如在決定刪除該使用者的時候,PMON很可能不回自動的去清理這些session則需要手工觸發PMON執行

首先確認PMON程序是who
SQL> select pid,spid from v$process p,v$bgprocess b
where b.paddr=p.addr
and name='PMON';
       PID SPID
---------- ------------
        2  3608
SQL> oradebug wakeup 2
已處理的語句

SQL> select p.addr from v$process p where pid <> 1  minus select s.paddr from v$session s;  查詢已經KILL的程序地址
ADDR--------
542B70E8
542B7498


相關推薦

Kill session orakill 會話程序總結

一個使用者程序偶爾會掛起或佔用過多資源而拒絕其它會話。如果DBA依然能夠訪問資料庫,她通常可以發出以下查詢: select s.username, s.osuser, s.sid, s.serial#, p.spid  from v$session s,v$process

php中sessioncookie的使用區別

網上商城 標識 禁止 bsp 身份驗證 main str 什麽 ets 1.cookie的使用 什麽是 Cookie? cookie 常用於識別用戶。cookie 是服務器留在用戶計算機中的小文件。每當相同的計算機通過瀏覽器請求頁面時,它同時會發送 cookie。通過

SESSION COOKIE 的區別安全性

一,為什麼session,cookie經常會有人提到 做web開發的人基本上都會用session和cookie,但是僅僅只是會用,並不知道session和cookie的真正的工作原理,都只是憑著感覺來猜測。web開發者只要利用它們來完成工作就行了,所以每個人的理解基本都會有

PHP中sessioncookie的用法區別

一,session 1.session 是啥? 2.怎麼儲存的? 3.如何執行? 4.有生命週期嗎? 5.關閉瀏覽器會過期嗎? 6.Redis代替檔案儲存session 7.分散式session的同步問題     session是啥?

SessionCookie的區別Session的生命週期

區別: 1、cookie資料存放在客戶的瀏覽器上,           session資料放在伺服器上   2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙           考慮到安全應當使用session   3、sessi

SessionCookie的用法區別

1. Session、Cookie是什麼 1.1 概念理解 要了解session和cookie是什麼,先要了解以下幾個概念。 1.1.1 無狀態的HTTP協議 協議:是指計算機通訊網路中兩臺計算機之間進行通訊所必須共同遵守的規定或規則。 超文字傳輸協議(HTTP):是一種通訊協議,它允許將超文字標記語言(HT

Linux 執行緒程序總結

1 Linux 中的程序與執行緒 對於 Linux 來講,所有的執行緒都當作程序來實現,因為沒有單獨為執行緒定義特定的排程演算法,也沒有單獨為執行緒定義特定的資料結構(所有的執行緒或程序的核心資料結構都是 task_struct)。 對於一個程序,相當於是它含有一個執行緒,就是它自身。對於多執行緒來說,原

Java之集合框架圖 CollectionCollections的區別用法總結

Java中Collection和Collections的區別: 1、Java集合框架圖: 2、Collection介面:   java.util.Collection是一個集合介面,其中定義了對集合物件有關操作的普通介面方法。   Set和List集合型別(不包含Map)

alter system kill session[查會話程序]

最近公司伺服器出現記憶體被大量佔用,資料無法寫入,初步懷疑是有部分會話鎖死導致,通過以下兩步即可解決: 一、查詢哪些會話鎖死 select * from v$session t1, v$locked

Oracle會話 查詢關閉會話 表被鎖解鎖 會話 程序

  Oracle會話查詢等 2016年05月11日 10:27:00 波特王子 閱讀數:4432 如何檢視oracle當前連線數,會話數 收藏 檢視session: select * from v$session where username is

關於v$session v$process 如何殺掉session(會話),以及如何找到會話對應的系統程序ID

v$session 主要存放一些客戶端資訊詳情請看官方文件 v$process 主要存放一些服務端程序相關的資訊請看官方文件 獲取當前系統session數和process數 select count(*) from v$session select count(*)

PHP中的會話控制—sessioncookie(實現數據傳值功能)

代碼 會有 數據 xmlns code 特點 會話控制 pre color 1.session 登錄上一個頁面以後,長時間沒有操作,刷新頁面以後需要重新登錄。 特點:(1)session是存儲在服務器;    (2)session每個人(登陸者)存一份;    (3)

oracle for update鎖表資源釋放之kill -9alter system kill session 'sid,serial#';

查詢 sele 操作 sid 操作系統 objects lte 需要 ssi 通過for update鎖表,通過操作系統方式和oracle方式終止進程方式 --查詢需要終止進程的情況,包括操作系統進程 select proc.sPID, sess.sid,

SessionCookie介紹常見httpcode

在服務器 作用 標識 image 站點 的區別 限制 block 用戶信息 Cookie和Session,及常見httpcode 1.cookie和session簡介:   cookie是放在客戶端的鍵值對,用來識別用戶信息的,主要包括:名字,值,過期時間,路徑和域。路徑與

nohup&後臺執行,程序檢視終止 詳解

 nohup 和重定向 功能一樣,可用於定時啟動 1.nohup 用途:不掛斷地執行命令。 語法:nohup Command [ Arg … ] [ & ]   無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 n

會話控制技術session cookie

HTTP是無狀態協議,沒有內建機制維護兩個事物之間的狀態,同一個使用者在請求同一個頁面兩次的時候,HTTP協議不會認為這兩次請求都認為是同一使用者的請求,會當做兩次請求的獨立。會把兩次請求隔離開,會認為兩次請求是不同的兩個人進行請求或訪問。如果使用者進行了登入操作,再次請求頁面,HTTP協議不會認為該使用者之

linux, kill掉佔用60%多cpu的程序,幾秒後換個名稱pid又出現?

假設木馬的名字是nshbsjdy,如果top看不到,可以在/etc/init.d目錄下面檢視 1、首先鎖定三個目錄,不能讓新木馬檔案產生 1 2 3 4 chmod 000 /usr/bin/nshbsjdy chattr 

程序執行緒的主要區別程序與程式的主要區別

1.程序和執行緒的主要區別 根本區別:程序是作業系統資源分配的基本單位,而執行緒是任務排程和執行的基本單位 在開銷方面:每個程序都有獨立的程式碼和資料空間(程式上下文),程式之間的切換會有較大的開銷;執行緒可以看做輕量級的程序,同一類執行緒共享程式碼和資料空間,每個執行緒

Python學習【第21篇】:程序池以及回撥函式 python併發程式設計之多程序2-------------資料共享程序回撥函式

python併發程式設計之多程序2-------------資料共享及程序池和回撥函式 一、資料共享 1.程序間的通訊應該儘量避免共享資料的方式 2.程序

程序執行緒關係區別

1.定義 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動;程序是系統進行資源分配和排程的一個獨立單位。 執行緒是程序的一個實體,是CPU排程和分派的基本單位;它是比程序更小的能獨立執行的基本單位;同屬一個程序的不同執行緒之間共享程序所擁有的全部資源。 一個