新聞中心
Oracle用戶(hù)會(huì)話相信大家都比較了解,下面為您介紹的就是Oracle用戶(hù)會(huì)話信息的查詢(xún)方法,該方法供您參考,如果您感興趣的話,不妨一看。

目前創(chuàng)新互聯(lián)建站已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、象州網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
過(guò)V$SESSION視圖,可以查詢(xún)Oracle所有Oracle用戶(hù)會(huì)話信息:
- select sid,logon_time,username,machine from v$session;
通過(guò)分組,統(tǒng)計(jì)每個(gè)不同的用戶(hù)或主機(jī)打開(kāi)的Oracle用戶(hù)會(huì)話總數(shù):
- select username,machine,count(*) from v$session group by username,machine;
根據(jù)SID和SERIAL#可以終止用戶(hù)會(huì)話:
- ALTER SYSTEM KILL SESSION 'v_sid,v_serial#' immediate;
Oracle用戶(hù)會(huì)話的SID和SERIAL#可以通過(guò)V$SESSION視圖查到:
- SQL> select sid,serial#,username, machine,status from v$session where username like 'PCNSH%';
- SID SERIAL# USERNAME MACHINE STATUS
- -------- ---------- --------------- ------------------------------- --------
- 366 14303 PCNSH197 client197.yourdomain.com INACTIVE
- 369 1745 PCNSH003 server009 INACTIVE
- 370 10165 PCNSH049 client049.yourdomain.com INACTIVE
- 371 18999 PCNSH056 client056 INACTIVE
- 372 6207 PCNSH056 client056 INACTIVE
- 373 7688 PCNSH197 client197.yourdomain.com INACTIVE
- 374 19246 PCNSH003 server009 INACTIVE
- 377 17649 PCNSH003 server009 INACTIVE
在Oracle中終止掉的會(huì)話只有在這個(gè)進(jìn)程再次嘗試連接Oracle時(shí)才會(huì)被pmon清除,在進(jìn)程再次嘗試連接之前,查詢(xún)V$SESSION視圖時(shí)還是可以看到該會(huì)話。
當(dāng)用戶(hù)會(huì)話無(wú)法響應(yīng)時(shí),上面的方法可能無(wú)法終止用戶(hù)會(huì)話,只好直接殺死系統(tǒng)進(jìn)程(謹(jǐn)慎)。
用戶(hù)會(huì)話對(duì)應(yīng)的系統(tǒng)進(jìn)程可以通過(guò)V$SESSION和V$PROCESS兩個(gè)視圖來(lái)查詢(xún),通過(guò)會(huì)話的SID和SERIAL#可以查詢(xún)到系統(tǒng)進(jìn)程號(hào)。
- SQL> select p.spid from v$session s, v$process p
- where p.addr=s.paddr and s.sid=518 and s.serial#=41831;
- SPID
- ------------
- 16782
然后在操作系統(tǒng)中殺死進(jìn)程:
kill -9 16782
某些軟件會(huì)在啟動(dòng)時(shí)打開(kāi)多個(gè)會(huì)話,當(dāng)軟件異常退出時(shí),要批量的終止這些會(huì)話。存儲(chǔ)過(guò)程基于用戶(hù)名條件批量終止會(huì)話,創(chuàng)建存儲(chǔ)過(guò)程腳本kill_user.sql如下:
- create or replace procedure kill_user(v_name in varchar2)
- as
- message varchar2(50);
- cursor loguser is select sid,serial# from v$session where username=upper(v_name);
- v_info loguser%rowtype;
- sql_mgr varchar2(1000);
- i number default 0;
- begin
- open loguser;
- loop
- fetch loguser into v_info;
- exit when loguser%notfound;
- i :=1;
- sql_mgr :='alter system kill session '''||v_info.sid||','||v_info.serial#||''' immediate';
- execute immediate sql_mgr;
- dbms_output.put_line('All the sessions of '||v_name||' have been killed');
- end loop;
- close loguser;
- if i=0 then
- raise_application_error(-20004,'The user '||v_name||' is not login the database currently!');
- end if;
- exception
- when no_data_found then
- raise_application_error(-20004,'The user '||v_name||' is not login the database currently!');
- end;
- /
調(diào)用上面存儲(chǔ)過(guò)程,終止用戶(hù)所有進(jìn)程的方法如下:
- SQL> execute kill_user('user_name');
本文標(biāo)題:Oracle用戶(hù)會(huì)話信息的查詢(xún)方法
文章路徑:http://www.5511xx.com/article/ccssjii.html


咨詢(xún)
建站咨詢(xún)
