ORACLE SYS_CONTEXT 란?
오라클에서 현재 세션 정보를 얻기 위해, SYS_CONTEXT 함수를 사용할 수 있어 소개합니다.
사실, SYS_CONTEXT는 지정된 컨텍스트의 속성 값을 반환하며,
컨텍스트, 속성 및 값은 이미 DB에 정의되어 있어야 합니다
그 중에서 USERENV는 현재 세션을 설명하는 내장 컨텍스트이며,
대표적인 사용법은 다음과 같습니다.
1 | SYS_CONTEXT ('USERENV', 'OS_USER') |
쿼리사용예제
DUAL 테이블을 사용하여 아래와 같은 SELECT문을 사용하면,
각각의 세부 값들을 확인할 수 있습니다.
1 | SELECT |
결과예시)
SYS_CONTEXT(‘USERENV’,’SESSIONID’) | SYS_CONTEXT(‘USERENV’,’OS_USER’) | SYS_CONTEXT(‘USERENV’,’HOST’) | SYS_CONTEXT(‘USERENV’,’MODULE’) |
---|---|---|---|
107637700 | devscb | pcdevscb | SQL Developer |
기타 USERENV 세부속성
앞선 예제에서, SYS_CONTEXT 의 두번째 속성값은 정말 다양한 값들을 사용할 수 있습니다.
예를 들어, SYS_CONTEXT(‘USERENV’, ‘AUTHENTICATED_IDENTITY’) 처럼
속성값을 바꾸면서 현재 세션의 여러 정보들을 확인할 수 있습니다.
어떤 속성값을 사용할 수 있는지는 아래 표와 같이 정리합니다.
USERENV 속성 | 설명 | 예시값 |
---|---|---|
AUTHENTICATED_IDENTITY | 권한인증 하에 사용중인 ID, 예를들어, 현재 세션에서 로그인한 ID | sys_ora |
AUTHENTICATION_METHOD | 권한인증 방식 | PASSWORD / OS / SSL |
CURRENT_EDITION_ID | 세션 edition ID | 100 |
CURRENT_EDITION_NAME | 세션 edition 이름 | ORA$BASE |
CURRENT_SCHEMA | 현재 스키마에서 사용중인 스키마 명 | SH |
CURRENT_SCHEMA_ID | 현재 스키마에서 사용중인 Default 스키마 ID | 80 |
CURRENT_USER | 현재 활성화된 권한을 가진 데이터베이스 사용자 이름, | devscb |
CURRENT_USERID | 현재 활성화된 권한을 가진 데이터베이스 사용자의 숫자 식별자 | 80 |
DATABASE_ROLE | Data Guard 역할 | PRIMARY / PHYSICAL STANDBY / LOGICAL STANDBY / SNAPSHOT STANDBY |
DB_DOMAIN | 초기화 파라미터에서 지정한 대로 데이터베이스의 네트워크 도메인 | us.devscb.com. |
DB_NAME | 초기화 파라미터에서 지정한 대로 데이터베이스의 이름 | DEVSCBDB |
DB_UNIQUE_NAME | 도메인에서의 데이터베이스의 고유 이름 | DEVSCBDB |
ENTERPRISE_IDENTITY | 유저의 enterprise-wide identity | NULL / SYSDBA / SYSOPER |
FG_JOB_ID | 클라이언트 foreground 프로세스가 열려있을 경우의 job id | NULL / 0 |
GLOBAL_CONTEXT_MEMORY | 시스템 전역 영역에서 전역적으로 액세스되는 컨텍스트에서 사용되는 수 | 1 |
GLOBAL_UID | 오라클 인터넷 디렉토리에서 엔터프라이즈 사용자 보안 로그인에 대한 글로벌 사용자 식별자 | NULL |
HOST | 클라이언트 호스트 컴퓨터의 이름 | devscbpc |
IDENTIFICATION_TYPE | 데이터베이스에서 사용자 스키마가 생성 된 방식 | LOCAL / EXTERNAL / GLOBAL SHARED / GLOBAL PRIVATE |
INSTANCE | 현재 인스턴스의 식별 번호 | 1 |
INSTANCE_NAME | 데이터베이스 인스턴스의 이름 | devscbdb |
IP_ADDRESS | 클라이언트의 IP 주소 | 10.1.2.2 |
ISDBA | 사용자가 DBA 권한으로 인증 된 경우 TRUE이고 그렇지 않으면 FALSE | TRUE / FALSE |
LANG | 세션 언어에 대한 짧은 명칭 | US |
LANGUAGE | 언어, 지역 및 데이터베이스 문자 집합 | AMERICA_AMERICAN.WE8DEC |
MODULE | DBMS_APPLICATION_INFO 패키지 또는 OCI를 통해 설정 된 응용 프로그램 이름 | JDBC Thin Client / SQL Developer |
NETWORK_PROTOCOL | 통신에 사용되는 네트워크 프로토콜 | TCP |
NLS_CALENDAR | 세션의 달력 | GREGORIAN |
NLS_CURRENCY | 세션의 통화단위 | $ |
NLS_DATE_FORMAT | 시간 형식 | DD-MON-RR |
NLS_DATE_LANGUAGE | 날짜 언어 | AMERICAN |
NLS_SORT | 이진 또는 언어적 정렬 기준 | XSPANISH |
NLS_TERRITORY | 세션의 지역 | KOREA |
OS_USER | 데이터베이스 세션을 시작한 클라이언트 프로세스의 운영 체제 사용자 이름 | devscb |
SERVER_HOST | 데이터베이스 인스턴스가 실행 중인 컴퓨터의 호스트 이름 | devscbdbservr |
SERVICE_NAME | 세션이 연결된 서비스의 이름 | SYS$USERS |
SESSION_USER | 로그인 시 사용자를 식별 한 데이터베이스 사용자 이름 또는 스키마 이름 | DEVSCBUSER |
SESSIONID | 세션 식별자 | 120456 |
SID | 세션 번호 | 86 |
참고 : https://docs.oracle.com/cd/E11882_01/olap.112/e23381/row_functions079.htm#OLAXS472