データベースに送られるすべてのクエリを確認する必要があります。どうやってするか? Google検索で適切な結果が得られませんでした。
有効 SQLトレース &データベースに送られるすべてのクエリがログに記録されます。
ALTER SESSION SET sql_trace = true;
ALTER SESSION SET tracefile_identifier = mysqltrace;
トレースファイルはudumpディレクトリにあります。
データベースを監査する場合は、 以前の回答を参照してください。
時間の短いウィンドウですべてのセッションからのすべてのクエリを表示する必要があり、本当に簡単な解決策が必要な場合は、これを実行します。 (上記の回答は、SQLが1つのセッションで実行されていることのみを示しています。これにより、すべてのセッションにわたってすべての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ツールがありません。
ここでWindowsでXEを実行すると、ユーザーが何をしているかを見つけることができます。 SQLPlusを起動して実行します。
> SELECT USERNAME, SID, SERIAL# FROM v$session WHERE userName = '<your user>'
これにより、ユーザーのSIDとSERIAL#の2つの整数値が取得されます。ユーザーが複数のセッションを開いている可能性があります。これを実行してロギングをオンにします。
> execute dbms_system.set_sql_trace_in_session(<SID>, <SERIAL#>, true)
次に、アプリでいくつかの作業を行います...データがどこに使用されたかを調べます。
> SHOW PARAMETERS user_dump_dest
そして、C:\ oraclexe\app\Oracle\diag\rdbms\xe\xe\traceのようなものを取得します。ここには、多数のトレースログがあります。 .trcファイルは単にテキストです
完了したら、ログをオフにして、ファイルがいっぱいになったり、データベースの速度が低下したりしないようにします。
> execute dbms_system.set_sql_trace_in_session(<SID>, <SERIAL#>, false)
よろしくお願いします-診断とリバースエンジニアリングを楽しんでください!