728x90

SESSIONTIMEZONE() 함수는 Oracle SQL에서 현재 세션의 시간대(Time Zone)를 반환하는 함수입니다. 글로벌 환경에서 운영되는 애플리케이션에서는 세션별 시간대 처리가 매우 중요하며, 이 함수는 그러한 시간대 차이를 식별하고 관리하는 데 유용합니다.
1. SESSIONTIMEZONE() 함수란?
SESSIONTIMEZONE 함수는 현재 세션에 설정된 시간대를 문자형(예: '+09:00')으로 반환합니다. 반환 형식은 VARCHAR2입니다.
문법:
SELECT SESSIONTIMEZONE FROM dual;
예시:
-- 예: KST 기준 세션
SELECT SESSIONTIMEZONE FROM dual;
-- 결과: '+09:00'
2. SESSIONTIMEZONE의 필요성
- 글로벌 사용자 대상의 웹 애플리케이션에서 사용자별 시간 처리를 위함
- 서버와 사용자 간 타임존 불일치에 따른 오류 방지
- 오라클의 TIMESTAMP WITH TIME ZONE 또는 SYSTIMESTAMP와 함께 활용
3. SESSIONTIMEZONE 설정 변경
ALTER SESSION 문을 사용해 세션 타임존을 변경할 수 있습니다.
ALTER SESSION SET TIME_ZONE = '-05:00';
변경 후 확인:
SELECT SESSIONTIMEZONE FROM dual;
-- 결과: '-05:00'
4. DBTIMEZONE과의 비교
DBTIMEZONE은 데이터베이스 수준에서 설정된 기본 시간대이고, SESSIONTIMEZONE은 접속한 세션별 시간대입니다.
| 항목 | DBTIMEZONE | SESSIONTIMEZONE |
|---|---|---|
| 기준 | 데이터베이스 시스템 | 세션 사용자 |
| 변경 여부 | ALTER DATABASE | ALTER SESSION |
| 용도 | 타임스탬프 저장 기준 | 타임스탬프 조회/입력 기준 |
5. 실무 활용 예제
5-1. 현재 세션의 시간대 확인
SELECT SESSIONTIMEZONE FROM dual;
5-2. 세션 시간대를 기준으로 타임스탬프 출력
SELECT SYSTIMESTAMP AT TIME ZONE SESSIONTIMEZONE AS local_time FROM dual;
5-3. 세션 기준 시간대로 데이터 변환
SELECT FROM_TZ(CAST(CURRENT_TIMESTAMP AS TIMESTAMP), DBTIMEZONE) AT TIME ZONE SESSIONTIMEZONE AS adjusted_time
FROM dual;
5-4. 사용자 입력을 세션 시간대로 맞추기
-- UTC 시간 → 세션 시간대로 변환
SELECT FROM_TZ(TIMESTAMP '2025-06-01 00:00:00', 'UTC') AT TIME ZONE SESSIONTIMEZONE AS session_converted
FROM dual;
6. 시간대 표현 형식
- '+09:00' 또는 '-05:00' 등 오프셋 형식
- 'Asia/Seoul', 'America/New_York' 등 이름 형식 (Oracle 11g 이후 지원)
7. SESSIONTIMEZONE 관련 주의사항
- ALTER SESSION은 DB 권한에 따라 제한될 수 있음
- 세션 설정은 접속 종료 시 사라짐 (영구적 아님)
- TIMESTAMP WITH TIME ZONE 유형은 자동으로 시간대 정보를 포함함
8. 관련 함수 정리
SYSTIMESTAMP: 세션 기준 타임스탬프CURRENT_TIMESTAMP: 세션 기준 현재 시각DBTIMEZONE: DB의 기본 시간대FROM_TZ: 타임스탬프에 타임존 적용AT TIME ZONE: 타임스탬프 시간대 변환
9. 요약
SESSIONTIMEZONE() 함수는 오라클에서 시간대 관리의 핵심입니다. 특히 글로벌 환경에서 시간 정보를 정확하게 처리하기 위해서는 세션 기반 시간대 설정과 변환이 필수적입니다. 본 글에서 다룬 실무 예제들을 잘 응용하면 시간대 관련 오류를 효과적으로 예방할 수 있습니다.
참고자료
- Oracle 공식 문서
- SESSIONTIMEZONE Reference (Oracle 10g)
- 사내 글로벌 시간 변환 시스템 개발 경험 기반
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] TO_NUMBER() 함수로 문자형 숫자 데이터 안전하게 변환하는 방법 (0) | 2025.06.05 |
|---|---|
| [ORACLE] TZ_OFFSET() 함수 설명 및 시간대 오프셋 구하는 팁 (0) | 2025.06.05 |
| [ORACLE] DBTIMEZONE() 함수로 데이터베이스 시간대 정확히 설정하는 방법 (0) | 2025.06.05 |
| [ORACLE] LOCALTIMESTAMP()로 시간대 기반 데이터 정확히 처리하기 (0) | 2025.06.05 |
| [ORACLE] NEW_TIME() 함수로 로컬 시간을 GMT로 변환하기 (0) | 2025.06.05 |