暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

故障处理|Oracle Imdp 失败并报错 ORA-30094:未能找到时区数据文件

原创 小小亮 2022-10-10
1627

我在 2 个数据库之间的 expdp&impdp 过程中遇到了这个错误。

expdp 进程没有任何问题。我将这些导出文件复制到新服务器。当我开始 impdp 命令时,它失败了这些错误:

ORA-39097:数据泵作业遇到意外错误 -30094
ORA-39065:DISPATCH 中出现意外的主进程异常 ORA-30094:
在 $ORACLE_HOME/oracore/zoneinfo 中找不到版本 28 的时区数据文件

如您所见,我们需要在目标数据库上进行升级。

下面是我们的步骤:

  1. 检查 Oracle 主目录中可用的最新版本的时区文件:

[oracle@hostname]$ cd $ORACLE_HOME/oracore/
[oracle@hostname oracore]$ ls
mesg zoneinfo

2. 备份当前 zoneinfo 文件

[oracle@hostname oracore]$ cp zoneinfo zoneinfo_old


3. 检查数据库的状态:

[oracle@hostname zoneinfo]$ 更多

$ORACLE_HOME/oracore/zoneinfo/timezdif.csv


文件版本 1.0
字段:VERSION#、TIMEZONE_NAME、FROM_YEAR、TO_YEAR
注意:TO_YEAR 的 NULL/空白表示 db 可表示/允许的最大年份。
14, Africa/Casablanca, 2010,
14, Africa/Tunis, 2010,
14, America/Argentina/San_Luis, 2010,
14, America/Tijuana, 2010,
14, America/Santiago, 2010, 2010
14, America/Asuncion, 2010 ,
14, 南极洲/凯西, 2010,

还从 sqlplus 检查:

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES
     WHERE PROPERTY_NAME LIKE 'DST_%'
     ORDER BY PROPERTY_NAME;

PROPERTY_NAME                 |VALUE
------------------------------|------------------------------
DST_PRIMARY_TT_VERSION        |14
DST_SECONDARY_TT_VERSION      |0
DST_UPGRADE_STATE             |NONE

SQL> select * from v$timezone_file;

FILENAME                VERSION     CON_ID
-------------------- ---------- ----------
timezlrg_14.dat              14          0

SQL> select TZ_VERSION from registry$database;

TZ_VERSION
----------
14

4. 设置相关参数

应清除回收站,并根据以下 MOS 说明设置一些会话参数:

在有大量数据受新 TZ 文件影响的数据库中,通过 DBUA 执行时区升级需要更多时间(文档 ID 2259734.1)
使用 DBMS_DST 更新 12c 第 1 版(12.1.0.1 及更高版本)中的 RDBMS DST 版本(文档 ID 1509653.1)

更改会话集“_with_subquery”=materialize;
更改会话集“_simple_view_merging”=TRUE;
清除 dba_recyclebin;


5. 开始升级过程

SQL> set serveroutput on
SQL> exec DBMS_DST.BEGIN_PREPARE(26);
A prepare window has been successfully started.
PL/SQL procedure successfully completed.

SQL> shutdown immediate;

SQL> startup upgrade;
ORACLE instance started.

SQL> exec DBMS_DST.BEGIN_UPGRADE(28);

PL/SQL procedure successfully completed.

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
     FROM DATABASE_PROPERTIES
     WHERE PROPERTY_NAME LIKE 'DST_%'
     ORDER BY PROPERTY_NAME;
  
PROPERTY_NAME                  VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION         28
DST_SECONDARY_TT_VERSION       14
DST_UPGRADE_STATE              UPGRADE

SQL> shu immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

SQL> truncate table sys.dst$error_table;

Table truncated.

SQL> truncate table sys.dst$trigger_table;

Table truncated.

--Check possibe errors here
SQL>  SELECT * FROM sys.dst$error_table;

no rows selected

SQL> alter session set "_with_subquery"=materialize;

Session altered.

SQL> alter session set "_simple_view_merging"=TRUE;

Session altered.

SQL> set serveroutput on
SQL> VAR numfail number
SQL> BEGIN
     DBMS_DST.UPGRADE_DATABASE(:numfail,
     parallel                  => TRUE,
     log_errors                => TRUE,
     log_errors_table          => 'SYS.DST$ERROR_TABLE',
     log_triggers_table        => 'SYS.DST$TRIGGER_TABLE',
     error_on_overlap_time     => TRUE,
     error_on_nonexisting_time => TRUE);
     DBMS_OUTPUT.PUT_LINE('Failures:'|| :numfail);
     END;
   /
 
Table list: "SYSMAN"."MGMT_PROV_SUITE_INST_MEMBERS"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_STAGING_DIRS"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_RPM_REP"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_OPERATION"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_NET_CONFIG"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_IP_RANGE"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_DEFAULT_IMAGE"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_CLUSTER_NODES"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_BOOTSERVER"
Number of failures: 0
Table list: "SYSMAN"."MGMT_PROV_ASSIGNMENT"
Number of failures: 0
Table list: "SYSMAN"."AQ$_MGMT_NOTIFY_QTABLE_S"
Number of failures: 0
Table list: "SYSMAN"."AQ$_MGMT_NOTIFY_QTABLE_L"
Number of failures: 0
Table list: "SYSMAN"."AQ$_MGMT_LOADER_QTABLE_S"
Number of failures: 0
Table list: "SYSMAN"."AQ$_MGMT_LOADER_QTABLE_L"
Number of failures: 0
Table list: "IX"."AQ$_STREAMS_QUEUE_TABLE_S"
Number of failures: 0
Table list: "IX"."AQ$_STREAMS_QUEUE_TABLE_L"
Number of failures: 0
Table list: "IX"."AQ$_ORDERS_QUEUETABLE_S"
Number of failures: 0
Table list: "IX"."AQ$_ORDERS_QUEUETABLE_L"
Number of failures: 0
Failures:0

PL/SQL procedure successfully completed.

--Check error again

SQL> SELECT * FROM sys.dst$error_table;

no rows selected

-- Check timezone 
SQL> select * from v$timezone_file;

FILENAME                VERSION
-------------------- ----------
timezlrg_28.dat              28

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
      FROM DATABASE_PROPERTIES
      WHERE PROPERTY_NAME LIKE 'DST_%'
      ORDER BY PROPERTY_NAME;
  
PROPERTY_NAME                  VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION         28
DST_SECONDARY_TT_VERSION       0
DST_UPGRADE_STATE              NONE


原文标题:Imdp fail with ORA-30094: failed to find the time zone data file
原文作者:Helios
原文链接:https://heliosguneserol.com/2022/10/05/imdp-fail-with-ora-30094-failed-to-find-the-time-zone-data-file/

最后修改时间:2022-10-10 10:32:27
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论