본문 바로가기
Database

[ORACLE] DBTIMEZONE() 함수로 데이터베이스 시간대 정확히 설정하는 방법

by Engineer J 2025. 6. 5.

오라클 DBTIMEZONE() 함수로 데이터베이스 시간대 정확히 설정하는 방법
[Oracle] DBTIMEZONE

 

오라클 데이터베이스에서 시간대(Time Zone)는 날짜 및 시간 데이터를 해석하고 비교하는 데 중요한 역할을 합니다. 특히 글로벌 서비스를 운영하거나 다국적 데이터를 처리할 때 시간대의 정확한 이해는 필수입니다. 이 글에서는 DBTIMEZONE() 함수에 대해 자세히 설명하고, 실무에서의 활용법과 주의사항까지 정리합니다.

1. DBTIMEZONE() 함수란?

DBTIMEZONE() 함수는 현재 데이터베이스의 표준 시간대를 반환합니다. 이 값은 일반적으로 설치 시 지정되며, 데이터베이스 전체의 시간 기준으로 사용됩니다.

문법:

SELECT DBTIMEZONE FROM dual;

예제 결과:

+05:00
-08:00
UTC

2. DBTIMEZONE의 반환 형식

  • 시간 오프셋 형식: +HH:MI 또는 -HH:MI (예: +09:00)
  • 지역 이름: UTC 등

주의할 점은, DBTIMEZONE은 시간대 이름(Time Zone Name)이 아닌 오프셋 값을 반환한다는 것입니다.

3. DBTIMEZONE vs SESSIONTIMEZONE

오라클은 시간대 관련 함수로 SESSIONTIMEZONE()도 함께 제공합니다. 두 함수의 차이는 아래와 같습니다:

항목 DBTIMEZONE SESSIONTIMEZONE
설명 DB의 기본 시간대 사용자의 세션 시간대
설정 방법 ALTER DATABASE SET TIME_ZONE ALTER SESSION SET TIME_ZONE
반환 형식 +HH:MI +HH:MI 또는 Time Zone Name

4. 실무 예제

예제 1: DBTIMEZONE 확인

SELECT DBTIMEZONE FROM dual;

예제 2: 세션 시간대 확인

SELECT SESSIONTIMEZONE FROM dual;

예제 3: 시간대 기준의 시간 삽입

INSERT INTO time_test (created_at)
VALUES (CURRENT_TIMESTAMP AT TIME ZONE DBTIMEZONE());

예제 4: 시간대 비교

SELECT DBTIMEZONE, SESSIONTIMEZONE FROM dual;

5. DBTIMEZONE 설정 변경 방법

DBTIMEZONE은 데이터베이스 단위로 설정되며, 설정을 변경하려면 데이터베이스를 재시작해야 합니다.

-- DBTIMEZONE 변경 예시
ALTER DATABASE SET TIME_ZONE = '+09:00';
-- 변경 후 재시작 필요
SHUTDOWN IMMEDIATE;
STARTUP;

시간대 변경은 반드시 DBA의 승인과 사전 테스트가 필요합니다.

6. DBTIMEZONE이 중요한 이유

  • 글로벌 애플리케이션의 데이터 정합성 유지
  • TIMESTAMP WITH TIME ZONE 칼럼에 대한 정확한 처리
  • 시간 비교 및 변환에서 예기치 않은 오류 방지

7. 관련 함수 정리

  • SESSIONTIMEZONE(): 현재 세션의 시간대 반환
  • CURRENT_TIMESTAMP: 세션 시간대 기준 현재 시간
  • SYS_EXTRACT_UTC(): UTC 기준으로 시간 추출
  • FROM_TZ(): TIMESTAMP에 시간대 지정
  • NEW_TIME(): 오래된 방식이므로 사용 지양

8. 주의사항 및 팁

  • DBTIMEZONE 값은 SYSDATE, SYSTIMESTAMP 함수와 다를 수 있음
  • 데이터 백업 및 마이그레이션 시 시간대 확인 필수
  • 타임존 변경 시 JOB, SCHEDULER, TRIGGER 등에 영향 가능

9. 요약

DBTIMEZONE()은 오라클 데이터베이스의 시간대를 확인하고 통제하는 중요한 함수입니다. 글로벌 서비스나 시간 기반 트랜잭션 로직이 포함된 애플리케이션에서는 반드시 이를 정확히 이해하고 활용할 필요가 있습니다.

참고자료