ORA-56935: existing datapump jobs are using a different version of time zone data file

本文解决了一个Oracle数据库在进行数据整合时出现的导入错误问题。主要针对ORA-39097和ORA-56935等错误,通过调整会话事件及执行特定的卸载操作来解决由于时区数据文件版本不一致导致的问题。

在做几个环境的数据整合,分别有oracle11g和12.1的库导入到12.2.0.1环境,发现导入的时候报错如下:

ORA-39097: Data Pump job encountered unexpected error -56935
ORA-39065: unexpected master process exception in DISPATCH
ORA-56935: existing datapump jobs are using a different version of time zone data file

算是oracle 的一个bug,详情参考doc1307959.1

解决办法:

查看视图:

SELECT PROPERTY_NAME, SUBSTR (property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE ‘DST_%’
ORDER BY PROPERTY_NAME;

这个DST_UPGRADE_STATE值要为NONE,如果是其它类似datapump(3)之类的,

则要多次执行如下操作:

ALTER SESSION SET EVENTS '30090 TRACE NAME CONTEXT FOREVER, LEVEL 32';
exec dbms_dst.unload_secondary;

直到DST_UPGRADE_STATE为NONE,问题则解决。

<think> 我们面对的错误是ORA-39002和ORA-39405。根据错误信息,问题在于Data Pump不支持从时区版本(TSTZ)为43的源数据库导入到时区版本为32的目标数据库。这通常发生在跨不同Oracle数据库版本的数据泵导入导出操作中,特别是当源数据库和目标数据库的时区文件版本不一致时。 解决方案的核心是升级目标数据库的时区文件版本,使其至少与源数据库的时区文件版本相同(或更高)。以下是具体步骤: ### 步骤1: 检查当前数据库的时区文件版本 在目标数据库上执行以下SQL查询: ```sql SELECT * FROM v$timezone_file; ``` 或者 ```sql SELECT version FROM v$timezone_file; ``` 这将显示当前数据库的时区文件版本。 ### 步骤2: 获取最新的时区文件 从Oracle官方获取最新的时区文件。通常,Oracle会提供更新时区文件的脚本。这些脚本可以在Oracle的安装目录中找到,或者从Oracle支持网站(MOS)下载。 ### 步骤3: 升级时区文件 使用Oracle提供的`DBMS_DST`包来升级时区文件。具体步骤如下: 1. **备份数据库**:在进行任何升级操作前,务必备份数据库。 2. **关闭数据库**:以`sysdba`身份登录,关闭数据库实例。 ```sql SHUTDOWN IMMEDIATE; ``` 3. **以升级模式启动数据库**: ```sql STARTUP UPGRADE; ``` 4. **检查升级前的时区文件版本**(可选): ```sql SELECT * FROM v$timezone_file; ``` 5. **执行升级脚本**:运行`utltz_upg_check.sql`和`utltz_upg_apply.sql`脚本(这些脚本位于`$ORACLE_HOME/rdbms/admin`目录下)。或者使用`DBMS_DST`包来升级。 首先,检查是否有升级任务需要执行: ```sql SET SERVEROUTPUT ON DECLARE v_num PLS_INTEGER; BEGIN v_num := DBMS_DST.get_number_of_upgrades(); DBMS_OUTPUT.put_line(v_num); END; / ``` 然后,执行升级: ```sql BEGIN DBMS_DST.begin_upgrade(:num); -- 这里的:num是从上一步得到的升级任务编号(通常只有一个,所以用第一步查询到的数字) END; / ``` 6. **重启数据库**:完成升级后,关闭数据库并以正常模式启动。 ```sql SHUTDOWN IMMEDIATE; STARTUP; ``` 7. **结束升级**: ```sql BEGIN DBMS_DST.end_upgrade; END; / ``` 8. **验证升级结果**: ```sql SELECT * FROM v$timezone_file; ``` 确保版本已经升级到所需版本(43或更高)。 ### 步骤4: 重新执行导入操作 在完成时区文件升级后,重新运行`impdp`命令进行导入。 ### 注意事项 - 升级时区文件可能会影响数据库中已有的带有时区信息的数据类型(如`TIMESTAMP WITH TIME ZONE`)。因此,在升级前需要评估影响,并在测试环境中先行验证。 - 确保源数据库和目标数据库的字符集一致,避免因字符集不一致导致的问题。 ### 引用说明 上述步骤参考了Oracle官方文档中关于时区文件升级的部分[^1][^2]。 §§相关问题§§ 1. 如何检查Oracle数据库的时区文件版本? 2. 升级时区文件可能带来的风险有哪些? 3. 除了升级时区文件,还有其他方法解决ORA-39405错误吗? 4. 在升级时区文件过程中遇到错误如何解决? </think>### 解决Oracle 19c ORA-39002和ORA-39405错误的方法 该错误的核心是**时区文件版本不兼容**:源数据库时区版本(TSTZ 43)高于目标库版本(TSTZ 32),导致Data Pump导入失败。以下是完整的解决步骤: --- ### 步骤1:验证时区文件版本(目标库) 在目标数据库执行: ```sql SELECT * FROM v$timezone_file; ``` 确认`VERSION`字段值是否确实低于源库(此处为32)[^1]。 --- ### 步骤2:升级目标库时区文件 #### 方法一:自动升级(推荐) ```sql -- 以SYSDBA执行 SHUTDOWN IMMEDIATE; STARTUP UPGRADE; -- 进入升级模式 BEGIN DBMS_DST.BEGIN_UPGRADE(43); -- 升级到源库的版本43 END; / SHUTDOWN IMMEDIATE; STARTUP; -- 正常启动 BEGIN DBMS_DST.END_UPGRADE; -- 完成升级 END; / ``` #### 方法二:手动更新(若无DBMS_DST权限) 1. 从源库复制时区文件: ```bash scp $ORACLE_HOME/oracore/zoneinfo/timezlrg_43.dat oracle@target:$ORACLE_HOME/oracore/zoneinfo/ ``` 2. 更新目标库配置: ```sql ALTER SYSTEM SET timezone_version_upgrade_online=true; ALTER DATABASE SET TIME_ZONE='UTC'; -- 或与源库相同时区 ``` --- ### 步骤3:处理导入冲突 升级后若仍报错,需处理遗留数据: ```sql -- 清理无效的时区数据 DELETE FROM sys.sys_tzuv2_temptab WHERE version = 32; COMMIT; ``` --- ### 步骤4:重新执行导入 ```bash impdp system/password directory=DATA_PUMP_DIR \ dumpfile=GSCLOUD_01.dmp \ full=y \ logfile=impdp.log ``` **关键参数**: - `directory`需使用预定义目录(如`DATA_PUMP_DIR`) - 使用绝对路径指定dump文件位置[^2] --- ### 验证与注意事项 1. **验证升级结果**: ```sql SELECT * FROM v$timezone_file; -- 确认VERSION=43 ``` 2. **兼容性规则**: - Data Pump要求目标库时区版本 ≥ 源库版本 - 从高版本导入低版本需强制升级目标库[^1] 3. **回滚方案**: - 备份`$ORACLE_HOME/oracore/zoneinfo/`目录 - 测试环境先行验证 > ⚠️ **重要**:生产环境操作前务必备份数据库!
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值