我需要查看所有查询到数据库。怎么做?我无法从Google搜索中获得正确的结果。
答案 0 :(得分:12)
启用SQL Trace&将记录所有进入数据库的查询。
ALTER SESSION SET sql_trace = true;
ALTER SESSION SET tracefile_identifier = mysqltrace;
跟踪文件将出现在udump目录中。
如果您想审核数据库,look at my previous answer.
答案 1 :(得分:6)
在Windows中运行XE是我如何找到用户正在做的事情。 启动SQLPlus并运行:
> SELECT USERNAME, SID, SERIAL# FROM v$session WHERE userName = '<your user>'
这将为您的用户提供两个整数值SID和SERIAL#。您的用户可能打开了多个会话。 运行此命令以打开日志记录:
> execute dbms_system.set_sql_trace_in_session(<SID>, <SERIAL#>, true)
接下来让你的应用做一些工作...... 找出数据的使用位置:
> SHOW PARAMETERS user_dump_dest
你会得到类似的东西: C:\ oraclexe \程序\ ORACLE \诊断\ RDBMS \ XE \ XE \跟踪 在哪里可以找到许多跟踪日志。 .trc文件只是文本
完成后,请关闭日志记录,这样您就不会填写文件或减慢数据库速度。
> execute dbms_system.set_sql_trace_in_session(<SID>, <SERIAL#>, false)
你去了 - 快乐的诊断和逆向工程!
答案 2 :(得分:5)
如果您需要查看来自所有会话的所有查询的SHORT窗口时间,并且您需要一个非常简单的解决方案,这就是我的工作。 (以上答案仅显示SQL在一个会话中运行,这样可以轻松地在所有会话中提供所有SQL。)
1)。创建临时表以存储所有检索到的SQL:
-- Fabien pointed out out that 'port may be inaccessible on 10.2
CREATE TABLE "MIKE"."TMP"
( "LOOP_NO" NUMBER(10,0),
"SID" NUMBER,
"SERIAL#" NUMBER,
"PROCESS" VARCHAR2(24 BYTE),
"PROGRAM" VARCHAR2(48 BYTE),
"MODULE" VARCHAR2(64 BYTE),
"OSUSER" VARCHAR2(30 BYTE),
"SCHEMANAME" VARCHAR2(30 BYTE),
"ACTION" VARCHAR2(64 BYTE),
"MACHINE" VARCHAR2(64 BYTE),
"PORT" NUMBER,
"TERMINAL" VARCHAR2(30 BYTE),
"ADDRESS" RAW(8),
"PIECE" NUMBER,
"SQL_TEXT" VARCHAR2(4000)
)
2)。只要块正在运行,就在匿名块中运行一个讨厌的轮询循环来收集系统上运行的所有SQL:
declare
begin
for j in 1.. 1000 loop
insert into mike.tmp
SELECT j, b.sid, b.serial#, b.process, b.program, b.module, b.osuser, b.schemaname, b.action, b.machine, b.port, b.terminal,a.address, a.piece, a.sql_text
FROM V$sqltext_With_Newlines a
join V$Session b on a.address = b.sql_address
WHERE A.ADDRESS NOT IN (select address FROM mike.tmp)
ORDER BY b.sid, a.piece;
commit;
end loop;
end;
3)。查询以检索SQL:
select distinct osuser, a.address, a.sid, a.piece, a.sql_text
from mike.tmp a
join (select loop_no, sid from mike.tmp where sql_text like '%anytexthere%') b
on a.loop_no = b.loop_no
and a.sid = b.sid
order by a.sid, a.address, a.piece
...请注意,这只是一个快速的方法来捕获SQL,当你在“这里发生了什么?”情况,你没有GUI工具。