ORA-39405→Oracle 19c DST 时区版本快速升级操作指南(CDB/PDB)

发布时间:2026/9/3 16:52:08
ORA-39405→Oracle 19c DST 时区版本快速升级操作指南(CDB/PDB) 一、DST 是什么DSTDaylight Saving Time在 Oracle 中可以简单理解为数据库使用的全球时区规则版本。Oracle 通过时区文件维护这些规则例如timezlrg_32.dat → DST 版本 32 timezlrg_43.dat → DST 版本 43在进行 Data Pump 数据迁移时如果源库 DST 版本高于目标库例如源库43 目标库32导入报错ORA-39405因此新数据库部署完成后在正式impdp前应先检查源库和目标库 DST 版本。版本一致无需处理目标版本较低时再进行升级。二、检查源库和目标库 DST 版本源库和目标库分别执行SELECT filename, version FROM v$timezone_file;例如源库 timezlrg_43.dat 43 目标库 timezlrg_32.dat 32这种情况目标库需要升级。如果源、目标版本已经一致无需执行后面的 DST 升级操作。三、确认目标 Oracle Home 存在对应时区文件例如源库是 43ls -l $ORACLE_HOME/oracore/zoneinfo/timezlrg_43.dat文件存在即可继续。也可以查看 Oracle Home 已安装的时区文件ls $ORACLE_HOME/oracore/zoneinfo/timezlrg_*.dat注意Oracle RU 更新后Oracle Home 中可能已经包含新版时区文件但已有数据库实际使用的 DST 版本不一定同步升级所以最终以v$timezone_file查询结果为准。四、升级 CDB$ROOT登录数据库sqlplus / as sysdba确认当前容器SHOW CON_NAME;如果不是CDB$ROOTALTER SESSION SET CONTAINERCDB$ROOT;关闭所有业务 PDBALTER PLUGGABLE DATABASE ALL CLOSE IMMEDIATE;1. 执行官方检查脚本SPOOL /tmp/utltz_upg_check.log ?/rdbms/admin/utltz_upg_check.sql SPOOL OFF确认检查没有异常后再进行正式升级。2. 执行官方升级脚本SPOOL /tmp/utltz_upg_apply.log ?/rdbms/admin/utltz_upg_apply.sql SPOOL OFF升级过程中脚本可能自动重启数据库不要人为中断或手工重启数据库。成功后会看到类似INFO: The RDBMS DST update is successfully finished.完成后退出EXIT;五、确认 CDB$ROOT 升级结果重新登录sqlplus / as sysdba执行SHOW CON_NAME; SELECT filename, version FROM v$timezone_file;例如timezlrg_43.dat 43说明 CDB$ROOT 已升级成功。六、检查并升级业务 PDB打开业务 PDB例如ALTER PLUGGABLE DATABASE YJXTPDB OPEN; ALTER SESSION SET CONTAINERYJXTPDB; SHOW CON_NAME; SELECT filename, version FROM v$timezone_file;如果已经是timezlrg_43.dat 43不需要继续升级。如果仍然是旧版本例如timezlrg_32.dat 32则在当前业务 PDB 中继续执行官方脚本。先检查SPOOL /tmp/YJXTPDB_utltz_check.log ?/rdbms/admin/utltz_upg_check.sql SPOOL OFF确认没有异常后执行升级SPOOL /tmp/YJXTPDB_utltz_apply.log ?/rdbms/admin/utltz_upg_apply.sql SPOOL OFF七、最终检查升级完成后重新连接数据库。检查 CDB$ROOTALTER SESSION SET CONTAINERCDB$ROOT; SELECT filename, version FROM v$timezone_file;检查业务 PDBALTER SESSION SET CONTAINERYJXTPDB; SELECT filename, version FROM v$timezone_file;最终确认源库 43 CDB$ROOT 43 业务 PDB 43确认无误后即可开始业务表结构和数据迁移。八、日后快速操作流程以后新建 Oracle 19c 数据库按照下面流程操作即可安装 Oracle 19c ↓ 安装 RU 补丁 ↓ 创建 CDB / PDB ↓ 检查源库 DST ↓ 检查目标库 DST ↓ 版本一致 ↓是 ↓否 无需处理 检查 Oracle Home ↓ utltz_upg_check.sql ↓ utltz_upg_apply.sql ↓ 检查 CDB$ROOT ↓ 检查业务 PDB ↓ PDB 版本低则继续升级 ↓ 最终确认版本一致 ↓ 执行 impdp最常用的 4 个命令① 查询数据库当前 DSTSELECT filename, version FROM v$timezone_file;② 查看 Oracle Home 时区文件ls $ORACLE_HOME/oracore/zoneinfo/timezlrg_*.dat③ Oracle 官方升级前检查?/rdbms/admin/utltz_upg_check.sql④ Oracle 官方执行升级?/rdbms/admin/utltz_upg_apply.sql操作原则先查版本不一致才升级先升级 CDB$ROOT再检查业务 PDB最终确认 DST 版本满足迁移要求后再进行 Data Pump 导入。其中43和YJXTPDB都只是示例。以后操作时分别替换为实际目标 DST 版本和实际业务 PDB 名称即可。