查询数据库一段时间内执行了哪些查询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楼,如果是短时间查询,可以开审计过一段时间之后再关掉.但是审计不建议长时间使用,否则会影响效率.