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 파일을 찾을 수 있음
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
'📁 Database > Oracle' 카테고리의 다른 글
| [Oracle] sql 파일을 활용한 19c Single Non-CDB Timezone 버전 업그레이드 가이드(42 -> 44) (0) | 2026.03.07 |
|---|---|
| [Oracle] Oracle Instant Client rpm 설치 가이드 (for Linux x86-64) (0) | 2026.02.25 |
| [Oracle] Huge Page 설정 스크립트 링크 (0) | 2026.02.13 |
| [Oracle] 테이블명 변경 시 오브젝트 타입별 상태 영향도 파악(VALID → INVALID / 다시 VALID 되는 조건) (0) | 2025.12.04 |
| [Oracle] DBA_HIST_ACTIVE_SESS_HISTORY (ASH의 과거 데이터) (0) | 2025.11.28 |
