오라클 시간 관련 - eunja511005/Tutorial GitHub Wiki
타임존 설정
CURRENT_DATE 함수는 현재 시간 및 날짜를 반환합니다. 이 함수의 반환 값은 세션의 시간대 설정인 SESSIONTIMEZONE에 영향을 받습니다.
SESSIONTIMEZONE 설정이 세팅되어 있다면 CURRENT_DATE 함수가 반환하는 값은 해당 세션의 시간대를 기준으로 합니다. 예를 들어, SESSIONTIMEZONE이 'Asia/Seoul'로 설정되어 있다면 CURRENT_DATE 함수는 한국 시간을 반환할 것입니다.
그러나 CURRENT_DATE 함수에 타임존 정보를 함께 지정하지 않으면, 반환되는 값은 세션의 시간대 설정인 SESSIONTIMEZONE에 따라 결정됩니다.
따라서, CURRENT_DATE 함수의 반환 값은 세션의 시간대 설정에 따라 달라질 수 있습니다. 이는 DBTIMEZONE 설정과는 별개로 동작합니다. 이전에 제시한 내용을 수정하여 드립니다. 감사합니다.
1. 타임존 확인 : SELECT dbtimezone FROM dual;
2. 타임존 변경 : ALTER DATABASE SET TIME_ZONE='Asia/Seoul';
3. 현재 시간 확인 : SELECT SYSDATE, SESSIONTIMEZONE, CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;
결론은 sysdate 말고 CURRENT_DATE 사용하자
-- 현재 시간 확인
SELECT sysdate FROM dual;
-- 모든 Timezone확인
SELECT * FROM V$TIMEZONE_NAMES;
-- Timezone별 시간 확인
SELECT systimestamp at time zone tz.tzname, tz.* FROM v$timezone_names tz;
-- 한국 시간 확인
SELECT systimestamp at time zone tz.tzname, tz.*
FROM v$timezone_names tz
WHERE 1=1
AND tzname LIKE 'Asia/Seoul'
AND tzabbrev LIKE 'LMT';
-- 타임존 설정(상위 권한 필요 하므로 ADMIN으로 접속 후 실행)
alter database set time_zone = 'Asia/Seoul';
-- 다시 시간 확인
SELECT sysdate FROM dual;
-- DB 서버의 시간을 바꾸지 말고 CURRENT_DATE 사용하자
SELECT SYSDATE, SESSIONTIMEZONE, CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;
-- 최종 결론
SELECT to_char(CURRENT_DATE,'yyyymmddhh24mmss') FROM dual;
WAS 서버 시간 변경
- 서버 시간 확인 : date
- 서버 시간 한국으로 변경 : sudo timedatectl set-timezone Asia/Seoul
- 다시 서버 시간 확인 : date
- 서버 시간 상세히 확인 : timedatectl
- WAS 서버 재시작까지 해줘야 DB 서버 저장시 시간 변경됨 : stop / start
