Sat*_*hat 13
启用SQL跟踪,将记录进入数据库的所有查询.
ALTER SESSION SET sql_trace = true;
ALTER SESSION SET tracefile_identifier = mysqltrace;
Run Code Online (Sandbox Code Playgroud)
跟踪文件将出现在udump目录中.
如果要审核数据库,请查看我之前的答案.
如果您需要在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)
)
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
...请注意,这只是一个快速的方法来陷阱SQL当你在"这里发生了什么?" 情况,你没有GUI工具.
在Windows中运行XE就是我如何找到用户正在做的事情.启动SQLPlus并运行:
> SELECT USERNAME, SID, SERIAL# FROM v$session WHERE userName = '<your user>'
Run Code Online (Sandbox Code Playgroud)
这将为您的用户提供两个整数值SID和SERIAL#.您的用户可能打开了多个会话.运行此命令以打开日志记录:
> execute dbms_system.set_sql_trace_in_session(<SID>, <SERIAL#>, true)
Run Code Online (Sandbox Code Playgroud)
接下来让你的应用做一些工作......找出数据的使用位置:
> SHOW PARAMETERS user_dump_dest
Run Code Online (Sandbox Code Playgroud)
你会得到类似的东西:C:\ oraclexe\app\oracle\diag\rdbms\xe\xe\trace,你会在其中找到许多跟踪日志..trc文件只是文本
完成后,关闭日志记录,这样就不会填满文件或减慢数据库速度.
> execute dbms_system.set_sql_trace_in_session(<SID>, <SERIAL#>, false)
Run Code Online (Sandbox Code Playgroud)
你去了 - 快乐的诊断和逆向工程!