[Oracle] Non-CDB에서 Timezone 업그레이드 방법(DSTv43 -> 44)

728x90

Non-CDB에서 Timezone 업그레이드 방법

  • OS : Red Hat Enterprise Linux 9.7
  • DB : Single DB 19.24(DSTv43)
  • Timezone Upgrade : 43 -> 44

1) Timezone DSTv44 패치

37537949 Timezone DST 44 패치 다운로드
OS에 맞는 패치 다운로드
-> Oracle 공식 문서

참고) 최신 timezone 파일 가져오기

아래 오라클 문서에서 데이터베이스에 사용할 최신 timezone 파일을 찾을 수 있음

Updated DST Transitions and New Time Zones in Oracle RDBMS and OJVM Time Zone File Patches (Doc ID 412160.1)

 

37537949 패치파일 압축 해제

$ unzip -q p37537949_190000_Linux-x86-64.zip

DB, Listener Down

$ lsnrctl stop
SQL> shutdown immediate

37537949 패치 적용

$ cd 37537949/
$ opatch apply -local

(참고)패치 로그

Oracle Interim Patch Installer version 12.2.0.1.49
Copyright (c) 2026, Oracle Corporation.  All rights reserved.


Oracle Home       : /ORA19/app/oracle/product/19c
Central Inventory : /ORA19/app/oraInventory
   from           : /ORA19/app/oracle/product/19c/oraInst.loc
OPatch version    : 12.2.0.1.49
OUI version       : 12.2.0.7.0
Log file location : /ORA19/app/oracle/product/19c/cfgtoollogs/opatch/opatch2026-03-07_21-36-53PM_1.log

Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   37537949

Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Backing up files...
Applying interim patch '37537949' to OH '/ORA19/app/oracle/product/19c'

Patching component oracle.oracore.rsf, 19.0.0.0.0...
Patch 37537949 successfully applied.
Log file location: /ORA19/app/oracle/product/19c/cfgtoollogs/opatch/opatch2026-03-07_21-36-53PM_1.log

OPatch succeeded.

패치 적용 확인

$ opatch lspatches
37537949;RDBMS - DSTV44 UPDATE - TZDATA2025A
36582781;Database Release Update : 19.24.0.0.240716 (36582781)
29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)

OPatch succeeded.

DB, Listener Up

SQL> startup
$ lsnrctl start

2) 현재 Timezone 버전 조회

Timezone 파일 확인

SELECT * FROM v$timezone_file;


FILENAME                VERSION     CON_ID
-------------------- ---------- ----------
timezlrg_43.dat              43          0

registry$database 뷰를 이용해서도 조회 가능

SELECT tz_version FROM registry$database;

TZ_VERSION
----------
        43

PROPERTY_NAME에 따른 PROPERTY_VALUE 기억해두기

COL property_name FORMAT A30
COL property_value FORMAT A20

SELECT property_name, property_value
FROM   database_properties
WHERE  property_name LIKE 'DST_%'
ORDER BY property_name;

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------
DST_PRIMARY_TT_VERSION         43
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE

DB 엔진이 가지고 있는 가장 최신의 timezone file 버전을 보여줌
37537949 패치를 적용했으므로 DB 엔진은 44 버전을 최신 버전으로 가지고 있음

SELECT DBMS_DST.get_latest_timezone_version
FROM   dual;

GET_LATEST_TIMEZONE_VERSION
---------------------------
                         44

3) 업그레이드 준비

SET SERVEROUTPUT ON;
DECLARE
  l_tz_version PLS_INTEGER;
BEGIN
  l_tz_version := DBMS_DST.get_latest_timezone_version;

  DBMS_OUTPUT.put_line('l_tz_version=' || l_tz_version);
  DBMS_DST.begin_prepare(l_tz_version);
END;
/

l_tz_version=44
A prepare window has been successfully started.

PL/SQL procedure successfully completed.

DST_SECONDARY_TT_VERSION 에 적용하려는 44 버전이 찍혀 있는 모습 확인
DST_UPGRADE_STATE도 PREPARE로 변경된 모습

COL property_name FORMAT A30
COL property_value FORMAT A20

SELECT property_name, property_value
FROM   database_properties
WHERE  property_name LIKE 'DST_%'
ORDER BY property_name;

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------
DST_PRIMARY_TT_VERSION         43
DST_SECONDARY_TT_VERSION       44
DST_UPGRADE_STATE              PREPARE

DBMS_DST.FIND_AFFECTED_TABLES를 실행하기 전에 테이블 목록과 에러를 저장하는 테이블 TRUNCATE

TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;

timezone 버전 업그레이드의 영향을 받는 테이블 확인

EXEC DBMS_DST.find_affected_tables;

결과 확인

SELECT * FROM sys.dst$affected_tables;
SELECT * FROM sys.dst$error_table;

준비 끝

EXEC DBMS_DST.end_prepare;

A prepare window has been successfully ended.

PL/SQL procedure successfully completed.

4) Timezone 업그레이드(Time Zone File 업그레이드) : non-CDB

DB Down 후 startup upgrade
참고) 21c 이후론 재기동 필요 없음. 자세한 사항은 아래 '21c 이후 버전 참고 사항' 참고

SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;

업그레이드 시작

SET SERVEROUTPUT ON
DECLARE
  l_tz_version PLS_INTEGER;
BEGIN
  SELECT DBMS_DST.get_latest_timezone_version
  INTO   l_tz_version
  FROM   dual;

  DBMS_OUTPUT.put_line('l_tz_version=' || l_tz_version);
  DBMS_DST.begin_upgrade(l_tz_version);
END;
/

l_tz_version=44
An upgrade window has been successfully started.

PL/SQL procedure successfully completed.

다시 재기동
참고) 21c 이후론 재기동 필요 없음. 자세한 사항은 아래 '21c 이후 버전 참고 사항' 참고

SHUTDOWN IMMEDIATE;
STARTUP;

timezone 파일 업그레이드

SET SERVEROUTPUT ON
DECLARE
  l_failures   PLS_INTEGER;
BEGIN
  DBMS_DST.upgrade_database(l_failures);
  DBMS_OUTPUT.put_line('DBMS_DST.upgrade_database : l_failures=' || l_failures);

END;
/
Table list: "GSMADMIN_INTERNAL"."AQ$_CHANGE_LOG_QUEUE_TABLE_S"
Number of failures: 0
Table list: "GSMADMIN_INTERNAL"."AQ$_CHANGE_LOG_QUEUE_TABLE_L"
Number of failures: 0
DBMS_DST.upgrade_database : l_failures=0

timezone 파일 업그레이드 종료

SET SERVEROUTPUT ON;
DECLARE
  l_failures   PLS_INTEGER;
BEGIN
  DBMS_DST.end_upgrade(l_failures);
  DBMS_OUTPUT.put_line('DBMS_DST.end_upgrade : l_failures=' || l_failures);
END;
/

An upgrade window has been successfully ended.
DBMS_DST.end_upgrade : l_failures=0

dba_tstz_tables 뷰는 timezone 파일 업그레이드 과정에서 처리되는 테이블과 해당 테이블의 현재 업그레이드 상태를 표시

set lines 300 pages 1000
COLUMN owner FORMAT A30
COLUMN table_name FORMAT A30

SELECT owner,
       table_name,
       upgrade_in_progress
FROM   dba_tstz_tables
ORDER BY 1,2;

OWNER                          TABLE_NAME                     UPG
------------------------------ ------------------------------ ---
DBSNMP                         MGMT_DB_FEATURE_LOG            NO
GSMADMIN_INTERNAL              AQ$_CHANGE_LOG_QUEUE_TABLE_L   NO
GSMADMIN_INTERNAL              AQ$_CHANGE_LOG_QUEUE_TABLE_S   NO
SYS                            ACCHK_EVENTS                   NO
SYS                            ACCHK_SESSION                  NO
SYS                            ACCHK_STATISTICS               NO
SYS                            ACLMVREFSTAT$                  NO
SYS                            ALERT_QT                       NO
SYS                            AQ$_ALERT_QT_L                 NO
SYS                            AQ$_ALERT_QT_S                 NO
SYS                            AQ$_AQ$_MEM_MC_L               NO
SYS                            AQ$_AQ$_MEM_MC_S               NO
SYS                            AQ$_AQ_PROP_TABLE_L            NO
SYS                            AQ$_AQ_PROP_TABLE_S            NO
SYS                            AQ$_DEQUEUE_LOG_PARTITION_MAP  NO
SYS                            AQ$_DURABLE_SUBS               NO
SYS                            AQ$_ORA$PREPLUGIN_BACKUP_QTB_L NO
SYS                            AQ$_ORA$PREPLUGIN_BACKUP_QTB_S NO
SYS                            AQ$_PDB_MON_EVENT_QTABLE$_L    NO
SYS                            AQ$_PDB_MON_EVENT_QTABLE$_S    NO
SYS                            AQ$_QUEUE_PARTITION_MAP        NO
SYS                            AQ$_SCHEDULER$_EVENT_QTAB_L    NO
SYS                            AQ$_SCHEDULER$_EVENT_QTAB_S    NO
SYS                            AQ$_SCHEDULER$_REMDB_JOBQTAB_L NO
SYS                            AQ$_SCHEDULER$_REMDB_JOBQTAB_S NO
SYS                            AQ$_SCHEDULER_FILEWATCHER_QT_L NO
SYS                            AQ$_SCHEDULER_FILEWATCHER_QT_S NO
SYS                            AQ$_SUBSCRIBER_TABLE           NO
SYS                            AQ$_SYS$SERVICE_METRICS_TAB_L  NO
SYS                            AQ$_SYS$SERVICE_METRICS_TAB_S  NO
SYS                            ATSK$_SCHEDULE_CONTROL         NO
SYS                            BLOCKCHAIN_TABLE_CHAIN$        NO
SYS                            BLOCKCHAIN_TABLE_DROPPED$      NO
SYS                            FGR$_FILE_GROUPS               NO
SYS                            FGR$_FILE_GROUP_FILES          NO
SYS                            FGR$_FILE_GROUP_VERSIONS       NO
SYS                            IMPDP_STATS                    NO
SYS                            KET$_AUTOTASK_STATUS           NO
SYS                            KET$_CLIENT_CONFIG             NO
SYS                            KET$_CLIENT_TASKS              NO
SYS                            LTXID_TRANS                    NO
SYS                            NOTIFICATION$                  NO
SYS                            NOTIFICATIONS$                 NO
SYS                            OPTSTAT_HIST_CONTROL$          NO
SYS                            OPTSTAT_SNAPSHOT$              NO
SYS                            OPTSTAT_USER_PREFS$            NO
SYS                            RADM_FPTM$                     NO
SYS                            REG$                           NO
SYS                            SCHEDULER$_CONSTRAINTS_STATS   NO
SYS                            SCHEDULER$_EVENT_LOG           NO
SYS                            SCHEDULER$_EVENT_QTAB          NO
SYS                            SCHEDULER$_FILEWATCHER_HISTORY NO
SYS                            SCHEDULER$_FILEWATCHER_RESEND  NO
SYS                            SCHEDULER$_FILE_WATCHER        NO
SYS                            SCHEDULER$_GLOBAL_ATTRIBUTE    NO
SYS                            SCHEDULER$_JOB                 NO
SYS                            SCHEDULER$_JOB_DESTINATIONS    NO
SYS                            SCHEDULER$_JOB_OUT_ARGS        NO
SYS                            SCHEDULER$_JOB_RUN_DETAILS     NO
SYS                            SCHEDULER$_LIGHTWEIGHT_JOB     NO
SYS                            SCHEDULER$_REMDB_JOBQTAB       NO
SYS                            SCHEDULER$_REMOTE_JOB_STATE    NO
SYS                            SCHEDULER$_SCHEDULE            NO
SYS                            SCHEDULER$_STEP_STATE          NO
SYS                            SCHEDULER$_WINDOW              NO
SYS                            SCHEDULER$_WINDOW_DETAILS      NO
SYS                            SCHEDULER_FILEWATCHER_QT       NO
SYS                            STATS_TARGET$                  NO
SYS                            TAB_STATS$                     NO
SYS                            TSM_DST$                       NO
SYS                            TSM_SRC$                       NO
SYS                            WRI$_ADV_AI_COL_USAGE          NO
SYS                            WRI$_ALERT_HISTORY             NO
SYS                            WRI$_ALERT_OUTSTANDING         NO
SYS                            WRI$_OPTSTAT_AUX_HISTORY       NO
SYS                            WRI$_OPTSTAT_HISTGRM_HISTORY   NO
SYS                            WRI$_OPTSTAT_HISTHEAD_HISTORY  NO
SYS                            WRI$_OPTSTAT_IND_HISTORY       NO
SYS                            WRI$_OPTSTAT_OPR               NO
SYS                            WRI$_OPTSTAT_OPR_TASKS         NO
SYS                            WRI$_OPTSTAT_TAB_HISTORY       NO
SYS                            WRM$_DATABASE_INSTANCE         NO
SYS                            WRM$_PDB_INSTANCE              NO
SYS                            WRM$_PDB_IN_SNAP               NO
SYS                            WRM$_PDB_IN_SNAP_BL            NO
SYS                            WRM$_SNAPSHOT                  NO
SYS                            WRMS$_SNAPSHOT                 NO
SYS                            WRR$_REPLAY_DIVERGENCE         NO
SYS                            XS$PRIN                        NO
SYS                            XS$ROLE_GRANT                  NO
WMSYS                          AQ$_WM$EVENT_QUEUE_TABLE_L     NO
WMSYS                          AQ$_WM$EVENT_QUEUE_TABLE_S     NO
WMSYS                          WM$METADATA_MAP_TBL            NO
WMSYS                          WM$MP_PARENT_WORKSPACES_TABLE$ NO
WMSYS                          WM$WORKSPACES_TABLE$           NO
WMSYS                          WM$WORKSPACE_SAVEPOINTS_TABLE$ NO

96 rows selected.

5) 현재 Timezone 버전 조회

Timezone 파일 확인

SELECT * FROM v$timezone_file;

FILENAME                VERSION     CON_ID
-------------------- ---------- ----------
timezlrg_44.dat              44          0

업그레이드 후 v$timezone_file과 registry$database에 출력되는 버전 값이 다른데, 이는 정상임
-> Doc ID 1255474.1 참고

SELECT tz_version FROM registry$database;

TZ_VERSION
----------
        43

DST_PRIMARY_TT_VERSION이 44로 올라고 업그레이드 상태는 NONE으로 바뀜

COL property_name FORMAT A30
COL property_value FORMAT A20

SELECT property_name, property_value
FROM   database_properties
WHERE  property_name LIKE 'DST_%'
ORDER BY property_name;

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------ --------------------
DST_PRIMARY_TT_VERSION         44
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE

참고) 21c 이후 버전 참고 사항

21c부터는 다음 명령어를 사용하여 데이터베이스를 업그레이드 모드로 전환하지 않고도 timezone 파일을 업데이트할 수 있음

즉, DB 다운타임 없이 timezone 파일 업그레이드 가능

alter system set timezone_version_upgrade_online=true;

이렇게 설정한 후 똑같이 위의 절차를 따르되, 데이터베이스 종료 및 시작 작업은 모두 생략


참고
https://oracle-base.com/articles/misc/update-database-time-zone-file

728x90