금일 오전에 테스트 서버 권한관리 테이블에 데이터가 싹 사라져 있었다..

사용자 권한에 따라서 페이지 메뉴 탭이 구분되어 보이는데, 관리자를 제외한 모든 사용자가 메뉴 탭을 확인하지 못하는 상황이 발생되었다. 테스트 서버라서 다행이다.

자, 이제 누가 권한관리 테이블을 언제, 어떤 계정으로, 어떤 쿼리를 통해 삭제했는지 확인해보자.

 

Oracle version DBMS
Oracle 10g Toad for Oracle

 

1. V$SQL 뷰를 통해 쿼리 로그 확인

V$SQL 뷰는 현재 메모리에 있는 SQL 문에 대한 정보를 제공한다.

이 뷰를 사용하면 최근 실행된 SQL 문을 확인할 수 있다.

SELECT sql_id, sql_text
FROM v$sql
WHERE sql_text LIKE '%검색하고자 하는 내용%';


--실행한 DELETE 쿼리 검색
SELECT sql_id, sql_text
FROM v$sql
WHERE sql_text LIKE '%DELETE%';

- SQL_ID: SQL문을 식별하는 고유한 ID

- SQL_TEXT: 실행한 SQL문

2. V$SQLAREA 뷰를 통해 SQL문 통계 확인

V$SQLAREA 뷰는 공유 풀에 있는 SQL 문에 대한 요약 정보를 제공한다. 특정 SQL 문이 얼마나 자주 실행되었는지, 얼마나 많은 자원을 소비했는지 등을 확인할 수 있다.

SELECT sql_id, executions, buffer_gets, disk_reads, sql_text
FROM v$sqlarea
WHERE sql_text LIKE '%검색하고자 하는 내용%'
ORDER BY executions DESC;

- execution: SQL문이 실행된 횟수

- buffer_gets: 메모리에서 데이터를 가져온 횟수

- disk_reads: 디스크에서 데이터를 읽은 횟수

3. DBA_HIST_SQLTEXT 뷰를 통해 이전 SQL 로그 확인

DBA_HIST_SQLTEXT 뷰는 AWR(Automatic Workload Repository)에서 저장된 SQL 문을 보여준다.

이 뷰를 사용하면 과거의 SQL 문도 확인할 수 있다.

SELECT sql_id, sql_text
FROM dba_hist_sqltext
WHERE sql_text LIKE '%검색하고자 하는 내용%';

- 이 뷰는 AWR 스냅샷에서 수집된 SQL문을 보여주기 때문에 실행된 지 시간이 오래된 SQL 문도 조회가 가능하다.

- 대신, CLOB 데이터로 구성됨

 

결론

오라클에서 쿼리 로그를 확인하는 방법은 다양한데, V$SQL과 V$SQLAREA 뷰를 통해 현재 메모리에 있는 SQL 문을 확인하거나, DBA_HIST_SQLTEXT 뷰를 통해 과거의 SQL 문을 조회할 수 있다.

또한, 오라클의 Audit 기능을 사용하면 특정 사용자가 실행한 SQL 문을 추적할 수 있다고 한다. 이부분은 추가적인 학습이 필요하기에 추후 정리할 예정이다.

 

아참, V$SQL에서 확인했다. 범인..


반응형