第8期 expdp ORA-31693 ORA-02354 ORA-01555

来源:这里教程网 时间:2026-03-03 20:22:49 作者:

在做数据库迁移时,使用expdp导出数据库时,如果数据库表比较大,数据变更比较频繁,在导出时经常会遇到如下的错误。 Export: Release 19.0.0.0.0 - Production on Sat Aug 3 21:00:01 2024 Version 19.9.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved. ;;;  Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Starting "SYS"."SYS_EXPORT_SCHEMA_01":  "/******** AS SYSDBA" directory=DATA_PUMP_DIR dumpfile=hr7_20240803210001.dump logfile=hr7_20240803210001.log schemas=hr COMPRESSION=all  Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_INDEX/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Processing object type SCHEMA_EXPORT/STATISTICS/MARKER Processing object type SCHEMA_EXPORT/USER Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/DB_LINK Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT Processing object type SCHEMA_EXPORT/TABLE/COMMENT Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE Processing object type SCHEMA_EXPORT/VIEW/VIEW Processing object type SCHEMA_EXPORT/VIEW/GRANT/OWNER_GRANT/OBJECT_GRANT Processing object type SCHEMA_EXPORT/TYPE/TYPE_BODY Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/INDEX/FUNCTIONAL_INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/TRIGGER ORA-31693: Table data object "HR"."H_RETS" failed to load/unload and is being skipped due to error: ORA-02354: error in exporting/importing data ORA-01555: snapshot too old: rollback segment number 5 with name "_SYSSMU5_4196806562$" too small一般遇到这种情况,有两种情况,一种是表确实非常大,100,200GB,并且这个表数据变更比较频繁。另一种情况就是,表有 LOB的,undo_retention定义的时间不准确,因此有 ORA-01555: snapshot too old: rollback segment number 5 with name "_SYSSMU5_4196806562$" too small的错误。

SQL> show parameter undo; NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ undo_management                      string      AUTO undo_retention                       integer     900 undo_tablespace                      string      UNDOTBS1 SQL> select max(maxquerylen) from v$undostat; MAX(MAXQUERYLEN) ---------------- 16331 SQL> select retention from dba_lobs where owner='<SCHEMA_NAME>' and table_name='<TABLE_NAME>'; RETENTION ---------- 900 我们看到保留时间显示为900秒(15分钟),与当前的UNDO_retention相同,但最大查询长度为16331秒。创建LOB时,RETENTION的实际设置由UNDO_RETENTION当前的设置定义,这段时间不够长。解决方法:

1. 修改当前数据库的UNDO_RETENTION 参数值:

SQL>ALTER SYSTEM SET UNDO_RETENTION = 16500 scope=both sid='*';

2. 修改 LOB retention值 ,使其大于尺寸过小的保留参数

SQL> alter table <SCHEMA_NAME>.<TABLE_NAME> modify lob(<LOB_COLUMN_NAME>) (pctversion 5); Table altered. SQL> alter table <SCHEMA_NAME>.<TABLE_NAME> modify lob(<LOB_COLUMN_NAME>) (retention); Table altered.

3.  再次查询lob保留情况,以验证更改是否已生效:

SQL> select retention from dba_lobs where owner='<SCHEMA_NAME>' and table_name='<TABLE_NAME>'; RETENTION ---------- 16500

4. 再次执行导出。另一种情况,当读取的一致性映像在撤消表空间中不可用时,会报告ORA-1555错误。当撤消记录没有保留足够的时间(即Undo_RETENTION设置不足)和/或撤消表空间中没有足够的空间在所需的时间内保留撤消记录时,就会发生这种情况。解决方案: 1) 第一步是确保在导出的整个过程中保留读取的一致图像。增加UNDO_RETENTION参数,以覆盖导出的整个持续时间和/或高于flashback_time或flashback_scn指定的持续时间,直到导出操作结束。

SQL>  select max(maxquerylen) from v$undostat;

MAX(MAXQUERYLEN)

----------------

16331 SQL> show parameter UNDO_RETENTION SQL> alter system set UNDO_RETENTION=<value in seconds>

如果使用FLASHBACK_TIME或FLASHBACK_SCN参数调用EXPDP,请注意。完成导出操作后,您可以将其还原为原始值。

2) 增加undo表空间大小,使其可以在增加的Undo_RETENTION持续时间内保留撤消记录。

SQL> SELECT 'The Required undo tablespace size using Statistics In Memory is ' || dbms_undo_adv.required_undo_size(<value>) || ' MB' required_undo_size FROM dual;

SQL>  alter tablespace UNDOTBS1 add datafile '/oradata/undo02.dbf' size 100m autoextend on;

相关推荐