데이터베이스.가이드
오라클 데이터베이스에서는 다양한 장소에서 시간대를 설정할 수 있습니다. 다음은 오라클을 사용할 때 시간대를 변경하는 네 가지 방법입니다.
데이터베이스 시간대 설정
데이터베이스를 생성할 때 데이터베이스 시간대를 설정할 수 있습니다. 이렇게 하려면CREATE DATABASE
문의SET TIME_ZONE
절을 사용하십시오.
예:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
이 경우 시간대 영역 이름을 사용했습니다. 시스템에서 유효한 지역 이름의 전체 목록을 가져오려면 오라클 데이터베이스에서 유효한 시간대 목록을 반환하는 방법을 참조하십시오.
또는 실제 표준 시간대 오프셋을 사용할 수 있습니다:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
데이터베이스를 만들 때 표준 시간대를 명시적으로 설정하지 않으면 기본적으로 서버 운영 체제의 표준 시간대로 설정됩니다.
데이터베이스의 현재 표준 시간대 설정을 변경할 수도 있습니다. 이렇게 하려면ALTER DATABASE
문을 사용하십시오.
예:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
데이터베이스 표준 시간대는TIMESTAMP WITH LOCAL TIME ZONE
열에 대해서만 관련이 있습니다. 또한 데이터베이스 표준 시간대를 세계 협정시(0)로 설정하는 것이 좋습니다:00)데이터 변환을 방지하고 데이터가 데이터베이스간에 전송 될 때 성능을 향상시킬 수 있습니다.
세션 시간대 설정
세션 시간대를 데이터베이스 시간대와 독립적으로 설정할 수 있습니다. TIMESTAMP WITH LOCAL TIME ZONE
데이터를 반환하면 현재 세션의 표준 시간대에 반환됩니다.
세션 시간대는TIMESTAMP
값이TIMESTAMP WITH TIME ZONE
또는TIMESTAMP WITH LOCAL TIME ZONE
데이터 형식으로 변환될 때도 적용됩니다.
세션 수준에서 시간대를 설정하는 몇 가지 작업을 수행할 수 있습니다.
환경 변수
ORA_SDTZ
환경 변수를 사용하여 세션 시간대를 설정할 수 있습니다. 이 값은 다음 값으로 설정할 수 있습니다:
- 운영 체제 현지 시간대(
'OS_TZ'
) - 데이터베이스 시간대(
'DB_TZ'
) - 절대 오프셋(예:
'-04:00'
) - 시간대 지역 이름(예:
'America/St_Kitts'
)
다음은 유닉스 환경에서 이 환경 변수를 설정하는 몇 가지 예입니다:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
ORA_SDTZ
변수의 기본값은'OD_TZ'
입니다. 이 값은 변수가 설정되지 않았거나 잘못된 값으로 설정된 경우에 사용됩니다.
세션 변경 명령문
ALTER SESSION
명령문의SET TIME_ZONE
절을 사용하여 특정 세션의 표준 시간대를 변경할 수 있습니다.
TIME_ZONE
은 다음 값으로 설정할 수 있습니다:
- 세션이 시작된 기본 현지 시간대(
local
) - 데이터베이스 시간대(
dbtimezone
) - 절대 오프셋(예:
'-04:00'
) - 시간대 지역 이름(예:
'Canada/Eastern'
)
다음은TIME_ZONE
을 이러한 값으로 설정하는 예입니다:
ALTER SESSION SET TIME_ZONE=local;ALTER SESSION SET TIME_ZONE=dbtimezone;ALTER SESSION SET TIME_ZONE='Canada/Eastern';ALTER SESSION SET TIME_ZONE='-04:00';
SESSIONTIMEZONE
기능으로 현재 세션의 시간대를 확인할 수 있습니다.
예:
SELECT SESSIONTIMEZONE FROM DUAL;
결과:
Australia/Brisbane
내 경우에는 세션 시간대가 호주/브리즈번으로 설정됩니다.
시간대 절
날짜/시간 식에는AT LOCAL
절 또는AT TIME ZONE
절이 포함될 수 있습니다. AT LOCAL
절을 포함하면 결과가 현재 세션 표준 시간대에 반환됩니다. AT TIME ZONE
절을 포함하는 경우 표준 시간대는 다음 중 하나일 수 있습니다:
- 표준 시간대 오프셋
- 표준 시간대 영역 이름
-
DBTIMEZONE
(이 함수는 데이터베이스의 표준 시간대를 반환합니다) -
SESSIONTIMEZONE
(이 함수는 현재 세션의 표준 시간대를 반환합니다) - 유효한 표준 시간대 형식의 문자열을 반환하는 식입니다.
예:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;
결과:
02/JAN/30 04:30:35.000000000 AM +12:00
이 경우FROM_TZ()
함수를 사용하여 타임 스탬프 값과 시간대를TIMESTAMP WITH TIME ZONE
값으로 변환했습니다. 그런 다음AT TIME ZONE
절을 사용하여 다른 시간대를 지정했습니다.
이 시간을 제외하고 동일한 예가 있습니다AT LOCAL
:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;
결과:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE