⑴ sql語句中如何獲取session中的值
『「+session[]+」』
⑵ 如何通過sql語句kill一個session
https://msdn.microsoft.com/zh-cn/library/ms173730(v=sql.90).aspx
KILL { session ID | UOW } [ WITH STATUSONLY ]
ORACLE :
http://czmmiao.iteye.com/blog/1330421
ALTER SYSTEM KILL SESSION 'sid,serial#';
ALTER SYSTEM KILL SESSION '9,203';
⑶ 怎麼查詢一個session執行的所有sql
方法一】查詢v$sqltext、v$sqlarea、v$sqlstats視圖 select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('schema') order by t.LAST_ACTIVE_TIME desc; #對v$sqltext、v$sqlarea查看的是shared pool中的SQL
⑷ 如何查詢session執行的歷史sql語句
如何知道一個session都執行過哪些SQL語句?(查看當前比較容易,歷史的呢?怎麼復原sql的執行場景——事務關系、執行序列、單SQL還是存儲過程)
【方法一】查詢v$sqltext、v$sqlarea、v$sqlstats視圖
select * from v$sqlarea t where t.PARSING_SCHEMA_NAME in ('schema') order by t.LAST_ACTIVE_TIME desc;
#對v$sqltext、v$sqlarea查看的是shared pool中的SQL,其時間索引是其解析歷史,因為共享的問題這個查詢可能並不能完整地反映出執行的歷史。
#v$sqlstats信息保留時間比v$sql、v$sqltext、v$sqlarea長,及時SQL已經換出shared pool仍然可查到
【方法二】
聯合v$active_session_history和v$sqlarea
#v$active_session_history 這個表只是個取樣數據,按秒進行,只有在那一秒采樣點處於on cpu或非idle等待的session統計在內。所以可能會不全,有些執行很短的SQL會忽略。這個視圖無法還原完整的session歷史。
#v$sqlarea中有執行過的SQL語句,但並無到session的關聯信息,v$session中只關聯了當前的sql,所以也不行。
查看視圖:dba_hist_sqlstats、dba_hist_sqltext(歷史數據)
⑸ 怎麼查詢一個session執行的所有sql
session_id(SID) -> v$active_session_history(sid,sql_id) + v$sqlarea(sql_id,sql_text) 看看
⑹ oracle 怎麼跟蹤有問題session 的sql
selectsid,v$session.serial#,v$process.spid,v$session.username,last_call_et,status,LOCKWAIT,machine,logon_time,sql_textfromv$session,v$process,v$sqlareawherepaddr=addrandsql_hash_value=hash_valueandv$session.usernameisnotnullandsql_textnotlike'%session%'andstatus='ACTIVE'orderbylast_call_etdesc;
查詢當前正在執行的sql及執行用時,如果對性能優化查看sql效率要set autotrace on;然後執行sql查看執行計劃。
⑺ 如何跟蹤某個session的SQL
oracle自帶的sql trace程序可以跟蹤本地session
sys: alter system set sql_trace = true;對所有會話跟蹤
schema: alter session set sql_trace = true; 對某個session 會話跟蹤sql語句
11g可以通過 select * from v$DIAG_INFO;來獲取當前trace文件的位置
10g可用:當前用戶:SELECT d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_namefrom ( select p.spid from v$mystat m,v$session s, v$process pwhere m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,( select t.instance from v$thread t,v$parameter vwhere v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,( select value from v$parameter where name = 'user_mp_dest') d;
如果是查詢其他用戶session的跟蹤文件,則根據用戶的sid和#serial使用如下查詢:SELECT d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_namefrom( select p.spid from v$session s, v$process pwhere s.sid=』』 and s. SERIAL#='' and p.addr = s.paddr) p,( select t.instance from v$thread t,v$parameter vwhere v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,( select value from v$parameter where name = 'user_mp_dest') d
用tkprof 來格式化跟蹤文件輸出
tkprof 輸出內容包括 1 sql 語句 2統計信息 3explain table 執行計劃
⑻ oracle SQL跟蹤,如何跟蹤某個用戶發出的所有SQL
需要打開oracle審計功能才能記錄,並且消耗一定性能。
簡單打開審計如下
1、設置參數
alter system set audit_trail=db scope=spfile;
2、重啟資料庫
3、打開相應的審計(審計選項很多),如,對用戶test對表操作的審計
audit table by test;
4、以dba查看審計記錄
select * from dba_audit_trail;
⑼ 想跟蹤一個ERP軟體的sql語句怎麼跟蹤
用terminal吧
select * from v$sql a,v$session b where b.TERMINAL=userenv('terminal') AND b.SQL_HASH_VALUE=a.HASH_VALUE