⑴ 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