Oracle 데이터베이스에 오는 모든 쿼리 표시
데이터베이스로 오는 모든 쿼리를 확인해야 합니다.어떻게 하는 거지?저는 구글 검색에서 적절한 결과를 얻을 수 없었습니다.
SQL 추적을 활성화하면 데이터베이스로 오는 모든 쿼리가 기록됩니다.
ALTER SESSION SET sql_trace = true;
ALTER SESSION SET tracefile_identifier = mysqltrace;
추적 파일이 udump 디렉토리에 있습니다.
데이터베이스를 감사하려면 이전 답변을 참조하십시오.
짧은 시간 동안 모든 세션의 모든 쿼리를 확인해야 하고 정말 간단한 솔루션이 필요한 경우 이렇게 합니다. (위의 답변은 SQL이 한 세션에서만 실행된다는 것을 보여줍니다. 그러면 모든 세션에 걸쳐 모든 SQL이 쉽게 제공됩니다.)
. 검색된 모든 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),
"TERMINAL" VARCHAR2(30 BYTE),
"ADDRESS" RAW(8),
"PIECE" NUMBER,
"SQL_TEXT" VARCHAR2(4000)
)
. 익명 블록에서 악성 폴링 루프를 실행하여 블록이 실행되는 동안 시스템에서 실행되는 모든 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.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;
. 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
이 방법은 "여기서 무슨 일이 일어나고 있습니까?" 상황에서 GUI 도구가 없고 파일에 액세스할 수 없는 경우 SQL을 트랩할 수 있는 빠른 방법입니다.USER_DUMP_DEST
.
여기서 Windows에서 XE를 실행하면 사용자가 수행하는 작업을 찾을 수 있습니다.SQL Plus를 시작하고 다음을 실행합니다.
> 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\app\oracle\diag\rdbms\xe\xe\trace에서 여러 추적 로그를 찾을 수 있습니다..trc 파일은 단순히 텍스트입니다.
작업이 완료되면 파일이 가득 차거나 DB 속도가 느려지지 않도록 로깅을 해제합니다.
> execute dbms_system.set_sql_trace_in_session(<SID>, <SERIAL#>, false)
좋아요 - 행복한 진단과 리버스 엔지니어링!
언급URL : https://stackoverflow.com/questions/9125223/show-all-queries-coming-to-an-oracle-database
'programing' 카테고리의 다른 글
'for' 루프 이니셜라이저에서 포인터를 역참조하면 분할 오류가 생성됩니다. (0) | 2023.07.13 |
---|---|
클래스 로더 오류 - 로더 org.springframework.boot.devtools.restart.classloader의 명명되지 않은 모듈입니다.클래스 로더 다시 시작 (0) | 2023.07.13 |
Firebase 프로젝트의 지원 이메일을 변경하려면 어떻게 해야 합니까? (0) | 2023.07.13 |
라이브러리가 로드되지 않음: @rpath/FBLPromises.framework/FBLP는 iOS 13.3.1을 약속합니다. (0) | 2023.07.13 |
봄 JPA - "java.lang."잘못된 인수예외:투영 유형은 인터페이스여야 합니다!"(네이티브 쿼리 사용) (0) | 2023.07.13 |