오라클 시간 관련 - 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 서버 시간 변경

  1. 서버 시간 확인 : date
  2. 서버 시간 한국으로 변경 : sudo timedatectl set-timezone Asia/Seoul
  3. 다시 서버 시간 확인 : date
  4. 서버 시간 상세히 확인 : timedatectl
  5. WAS 서버 재시작까지 해줘야 DB 서버 저장시 시간 변경됨 : stop / start image