日期:2014-05-17  浏览次数:20901 次

查询数据库一段时间内执行了哪些查询sql
如何查询oracle数据库在一段时间内执行了哪些查询sql.
并且查到是哪台机器执行的,ip地址是多少。

------解决方案--------------------
select * from v$sqlarea a
       where 1=1
       and a.LAST_ACTIVE_TIME >=  to_date( '2013-02-21 18:23:00','yyyy-MM-dd HH24:mi:ss')
       and a.LAST_ACTIVE_TIME <  to_date( '2013-02-21 18:24:00','yyyy-MM-dd HH24:mi:ss')
       --and a.LAST_ACTIVE_TIME <  to_date('2012-02-21 17:55','yyyy-MM-dd HH24:mi:ss')
       and a.MODULE_HASH <> 0
       and a.MODULE = 'JDBC Thin Client'
       order by a.LAST_ACTIVE_TIME desc

建议工具进行查看,TOAD里很方便的查看,也可看到执行抓取SQL的语句,自己改下就可以了

当然还可以看审计,比较耗数据库性能
------解决方案--------------------
可以通过v$session和v$sqlarea试图进行查询。v$session中machine字段记录该session的主机名。、
以下sql查询当前活跃会话正在执行的sql,如若有误还望高手们指正;
select q.SQL_TEXT,s.SID,s.SERIAL#,s.MACHINE from v$session s ,v$sqlarea q where s.sql_address=q.ADDRESS and s.status='ACTIVE';

你要是查询一段时间内的所有操作,我觉得可以使用oracle的审计功能,你所要的信息基本都有;
------解决方案--------------------
V$SQL --sql语句
+ v$SESSION  --机器名
+ UTL_INADDR.get_host_address(machine_name) --IP地址
------解决方案--------------------
开审计 开审计
------解决方案--------------------
答案在2楼,如果是短时间查询,可以开审计过一段时间之后再关掉.但是审计不建议长时间使用,否则会影响效率.