如何查看用户的SQL执行历史
方法1:查询v$SQL text、v$SQL area和v$SQL stats视图。
select * from v$sqlarea t其中t . PARSING _ SCHEMA _ NAME in(' SCHEMA ')order by t . LAST _ ACTIVE _ TIME desc;
#对于v$sqltext和v$sqlarea,查看共享池中的SQL,其时间索引就是其解析历史,因为共享问题导致查询可能无法完全反映执行历史。
#v$sqlstats的信息保持时间比v$sql、v$sqltext和v$sqlarea长。即使SQL已经被换出共享池,仍然可以找到它。
方法2
组合v$active _ session _ history和v$sqlarea。
#v$active_session_history这个表只是采样数据,以秒为单位进行,只包括采样点在cpu上或者在那一秒不空闲的会话统计。所以可能会不完整,会忽略一些执行时间短的SQL。此视图无法还原完整的会话历史。
# v$sql area中有已执行的SQL语句,但是没有与会话相关的信息。v$session只与当前的SQL相关联,所以它不起作用。
视图视图:dba_hist_sqlstats,dba_hist_sqltext(历史数据)
方法3:会话跟踪
SQL & gt执行DBMS _ session . session _ trace _ enable(true,true);
PL/SQL过程已成功完成。
SQL & gtselect count(*)from DBA _ hist _ SQL text;
计数(*)
-
478
SQL & gtselect * from V$sesstat其中rownum = 1;
SID统计#值
- - -
134 0 1
SQL & gt执行DBMS _ session . session _ trace _ disable();
PL/SQL过程已成功完成。
$ CD $ ORACLE _ HOME/admin/test/udump
$ ls -lrt
$ tkprof test _ ora _ 2195620 . TRC report . txt sys = no explain = no aggregate = yes
$ TERM报告。txt——该文件包括跟踪开始和停止之间所有SQL语句的执行信息、执行计划和统计信息。
方法4: logminer
只包含DML和DDL语句,不能查询select语句。此外,需要打开补充日志记录,默认情况下是不打开的。
连接/作为系统管理员
-安装LOGMINER
SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/DBMS lmd . SQL;
SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/dbmslm . SQL;
SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/DBMS LMS . SQL;
SQL & gt@ $ ORACLE _ HOME/RDBMS/admin/PRV tlm . plb;
-打开附加日志
更改数据库添加补充日志数据;
-模拟DML操作
陈明港/...
SQL & gtselect * from test2
SQL & gt插入到test2值(7,77);
SQL & gt提交;
连接/作为系统管理员
-剪切并归档
SQL & gt更改系统开关日志文件;
SQL & gt从v$archived_log中选择名称、目标id、线程号、序列号;-最后一个是新档案。
-创建新的日志挖掘器
SQL & gt执行DBMS _ log mnr . add _ log file(log filename = & gt;/Oracle/archive _ 10g/test/test _ 1 _ 138 _ 786808434 . arc ',options = & gtDBMS _ log mnr . new);
-启动矿工
SQL & gt执行DBMS _ log mnr . start _ log mnr(options = & gt;DBMS _ logmnr . dict _ from _ online _ catalog);
-检查结果
SQL & gtcol用户名格式A8;
SQL & gt列sql _重做格式a50
SQL & gtselect用户名,scn,时间戳,SQL _ redo from v$log mnr _ contents其中table _ name = ' TEST2
SQL & gtselect用户名,scn,时间戳,SQL _ redo from v$logmnr _ contents其中用户名= ' P _陈明';
-关闭矿工
SQL & gt执行DBMS _ log mnr . end _ log mnr;
-关闭辅助日志
SQL & gtalter database删除补充日志数据;
摘要
看v$sqlarea只能看一个大概的历史,因为很多SQL是共享的。
查看ASH是不完整的,因为它是采样数据。
查看TRACE应该是最完整的,但是需要在执行SQL之前打开。
查看logminer不能查看select语句,默认系统不打开补充日志,所以可以查看的内容有限。