如何知道一个用户在当前一段时间内执行了哪些SQL语句?

liuyann 2004-12-16 10:15:36
想对一数据库内的信息进行分析,找出相应的表和字段做报表,不过软件是国外的,并且不是英语,所以从表名上,字段名上无法进行猜测,数据库内共有表436个,当然其中有部分为空表,
对该软件进行操作,可查看到相应的信息数据.想知道可有方法获取某个用户当前使用了哪些SQL语句?
我在ORACLE的DBA Stadu内看session,查不到.
oracle server 是
Oracle8i Enterprise Edition Release 8.1.7.0.0
...全文
348 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lynx 2004-12-18
  • 打赏
  • 举报
回复
没怎么用过跟踪功能,正好手头有点资料,帮贴一下,楼主可以试试看。

[Q]如何设置自动跟踪
[A]用system登录
执行$ORACLE_HOME/rdbms/admin/utlplan.sql创建计划表
执行$ORACLE_HOME/rdbms/admin/plustrce.sql创建plustrace角色
如果想计划表让每个用户都能使用,则
SQL>create public synonym plan_table for plan_table;
SQL> grant all on plan_table to public;
如果想让自动跟踪的角色让每个用户都能使用,则
SQL> grant plustrace to public;
通过如下语句开启/停止跟踪
SET AUTOTRACE ON |OFF | ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN

[Q]如果跟踪自己的会话或者是别人的会话
[A]跟踪自己的会话很简单
Alter session set sql_trace true|false
Or
Exec dbms_session.set_sql_trace(TRUE);
如果跟踪别人的会话,需要调用一个包
exec dbms_system.set_sql_trace_in_session(sid,serial#,true|false)
跟踪的信息在user_dump_dest 目录下可以找到或通过如下脚本获得文件名称(适用于Win环境,如果是unix需要做一定修改)
SELECT p1.value||'\'||p2.value||'_ora_'||p.spid||'.ora' filename
FROM
v$process p,
v$session s,
v$parameter p1,
v$parameter p2
WHERE p1.name = 'user_dump_dest'
AND p2.name = 'db_name'
AND p.addr = s.paddr
AND s.audsid = USERENV ('SESSIONID')
最后,可以通过Tkprof来解析跟踪文件,如
Tkprof 原文件 目标文件 sys=n

[Q]怎么设置整个数据库系统跟踪
[A]其实文档上的alter system set sql_trace=true是不成功的
但是可以通过设置事件来完成这个工作,作用相等
alter system set events
'10046 trace name context forever,level 1';
如果关闭跟踪,可以用如下语句
alter system set events
'10046 trace name context off';
其中的level 1与上面的8都是跟踪级别
level 1:跟踪SQL语句,等于sql_trace=true
level 4:包括变量的详细信息
level 8:包括等待事件
level 12:包括绑定变量与等待事件
ylczy 2004-12-18
  • 打赏
  • 举报
回复
学习
GerryYang 2004-12-17
  • 打赏
  • 举报
回复
如果你有用Toad就好了
liuyann 2004-12-17
  • 打赏
  • 举报
回复
我有一个FREE 的TOAD
qiaozhiwei 2004-12-16
  • 打赏
  • 举报
回复
学习ing
LGQDUCKY 2004-12-16
  • 打赏
  • 举报
回复
获得当前台正在发出的sql语句

select user_name,sql_text from v$open_cursor where sid in (select sid from (select sid,serial#,username,program from v$session where status='ACTIVE'))
LGQDUCKY 2004-12-16
  • 打赏
  • 举报
回复
SELECT * FROM V$SQLTEXT;

select username,sid,opname,
round(sofar*100 / totalwork,0) || '%' as progress,
time_remaining,sql_text
from v$session_longops , v$sql
where time_remaining <> 0
and sql_address = address
and sql_hash_value = hash_value


或者通过工具plsql developer来查看,
liuyann 2004-12-16
  • 打赏
  • 举报
回复
请问如何使用audit
ssDOn 2004-12-16
  • 打赏
  • 举报
回复
看来只用audit了。
看你信誉是100就告诉你啦!(不是100的人提的问题是不能回答的)
zhaokeke2004 2004-12-16
  • 打赏
  • 举报
回复
mark
yxxx 2004-12-16
  • 打赏
  • 举报
回复
学习
liuyann 2004-12-16
  • 打赏
  • 举报
回复
我试了,不过好象效果不是我要的
我想看一下这个程序,调取相应界面时都用哪些表,哪些字段

请高手解救

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧