[Oracle] 사용자/본인이 입력한 쿼리 검색

qb·2024년 1월 4일
0

Oracle

목록 보기
1/2

Platform : DBeaver

  • 주의: auto commit (default)를 꺼놓는게 좋습니다.
    • 윈도우(Window) → 설정(settings) → 연결(connection) → 연결 유형(connection type)
      → ‘Auto-commit by default‘ 해제

문제 : 쿼리를 날렸으나 테이블 조회 시 반영이 안되있는 현상을 확인

해결책 : 내가 날린 쿼리가 정상적으로 입력이 되었는지 확인 필요

→ 쿼리가 정상적으로 입력됨이 확인되면 commit; 입력

참고사이트
Database Reference

<해결 쿼리>

-- 본인이 날린 쿼리 조회 

SELECT B.*
FROM V$SESSION A, V$SQL B
WHERE A.MODULE_HASH = B.MODULE_HASH AND A.AUDSID = SYS_CONTEXT('USERENV', 'SESSIONID')
ORDER BY FIRST_LOAD_TIME DESC
;
  • 이 구문은 현재 사용자 세션의 고유 식별자를 반환하며, 데이터베이스 관리 및 사용자 활동 모니터링에 활용될 수 있습니다.

<개념 정리>

1. V$SQL 뷰와 V$SQLAREA 뷰의 차이

→ 큰 차이가 없으며 그냥 V$SQLAREA 를 사용하면 됩니다

  • 둘 다 SQL 문의 실행에 대한 정보를 제공하지만 세부사항의 범위에 차이가 있습니다.
-- 모든	쿼리 히스토리 조회  V$SQL

SELECT *
FROM V$SQL
ORDER BY LAST_LOAD_TIME DESC
;
-- 모든 쿼리 히스토리 조회   V$SQLAREA

SELECT *
FROM V$SQLAREA
ORDER BY LAST_LOAD_TIME DESC
;
  • V$SQL : 데이터베이스에 최근에 실행된 SQL 명령어들에 대한 정보를 제공
    각 SQL 문의 텍스트, 실행 횟수, 최적화된 실행 계획, 실행된 시간 등 다양한 성능 지표를 포함

    -V$SQL은 매우 상세한 정보를 제공하며, 하나의 SQL 문에 대해 여러 버전(예: 다른 사용자에 의해 실행되거나, 다른 최적화로 인해)의 정보를 가질 수 있습니다.
    -데이터베이스에서 실행된 모든 SQL 문에 대한 보다 상세한 정보를 제공합니다.
    -동일한 SQL 문이라도 다양한 실행 마다 다른 정보를 가질 수 있기 때문에 동일한 SQL 문이 여러 번 실행되었을 경우, 각 실행에 대한 개별적인 정보를 볼 수 있습니다.
    -이를 통해 개별 실행에 대한 성능 문제를 파악할 수 있습니다.

  • V$SQLAREA : V$SQL의 정보를 요약하여 제공

    -V$SQLAREA는 일반적으로 메모리 사용을 더 적게 하며, SQL 문의 전반적인 성능을 파악하고자 할 때 유용합니다.
    -데이터베이스에서 실행된 모든 SQL 문에 대한 전반적인 성능 통계를 제공합니다.
    -동일한 SQL 문의 모든 실행에 대한 정보를 하나로 집계합니다.
    -이는 일반적인 성능 분석에 적합하며, 동일한 SQL 문에 대한 전체적인 효과를 파악하는 데 도움이 됩니다.

2. USERENV, SESSIONID

-- 본인이 날린 쿼리 조회 

SELECT B.*
FROM V$SESSION A, V$SQLAREA B
WHERE A.MODULE_HASH = B.MODULE_HASH AND A.AUDSID = SYS_CONTEXT('USERENV', 'SESSIONID')
-- 이 구문은 V$SESSION의 세션과 V$SQL의 SQL 명령이 같은 모듈에서 발생했는지를 확인

-- MODULE_HASH : SQL 명령이나 세션을 구별하는 데 사용되는 내부적인 해시 값

-- AUDSID : 현재 사용자의 세션 ID(AUDSID)
-- SYS_CONTEXT('USERENV', 'SESSIONID'): 현재 사용자의 세션 ID를 반환
-- => 따라서 이 조건은 쿼리를 실행하는 사용자의 세션에 해당하는 데이터만을 필터링

ORDER BY FIRST_LOAD_TIME DESC

-- FIRST_LOAD_TIME : 'SQL 명령이 처음으로 데이터베이스에 로드된 시간'
;
  • SYS_CONTEXT 함수 :
    세션 정보를 조회하는 함수
    Oracle 데이터베이스에서 제공하는 내장 함수로, 현재 세션의 정보나 환경 설정에 대한 세부 정보를 반환

  • USERENV :
    USERENV를 통해 접근할 수 있는 정보 : 사용자 이름, 세션 ID, 현재 언어, 클라이언트의 IP 주소

    → 각 정보는 SYS_CONTEXT 함수의 두 번째 인자로 지정하여 조회할 수 있습니다.

  • SESSIONID :
    SESSIONID를 SYS_CONTEXT 함수의 두 번째 인자로 사용하면, 현재 데이터베이스 세션의 고유 식별자(세션 ID)를 반환합니다. 이는 현재 연결된 사용자 세션을 식별하는 데 사용됩니다.

    → SESSIONID는 데이터베이스에서 사용자의 현재 세션을 구별하는 데 중요하며, 보안, 감사, 사용자 활동 추적 등 다양한 목적으로 사용됩니다.

3. V$SESSION

V$SESSION은 현재 데이터베이스 세션에 대한 정보를 포함

(추후 정리)

profile
q_________b

0개의 댓글