重庆思庄Oracle、Redhat认证学习论坛

标题: 数据泵EXPDP导出数据报错:ORA-31693 ORA-29913 ORA-01555 ORA-22924 [打印本页]

作者: 郑全    时间: 2023-4-10 18:40
标题: 数据泵EXPDP导出数据报错:ORA-31693 ORA-29913 ORA-01555 ORA-22924
在导数据时,报下面错误:
C:\Users\Administrator>expdp system/oracle full=y directory=emr_bak dumpfile=WeekBak11.DMP logfile=WeekBak11.log

Export: Release 11.2.0.4.0 - Production on 星期一 4月 10 16:14:46 2023

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
启动 "SYSTEM"."SYS_EXPORT_FULL_07":  system/******** full=y directory=emr_bak dumpfile=WeekBak11.DMP logfile=WeekBak11.l
og
正在使用 BLOCKS 方法进行估计...
处理对象类型 DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 29.00 GB
处理对象类型 DATABASE_EXPORT/TABLESPACE
处理对象类型 DATABASE_EXPORT/PROFILE
处理对象类型 DATABASE_EXPORT/SYS_USER/USER
。。。 。。。

处理对象类型 DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCOBJ
处理对象类型 DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMA
处理对象类型 DATABASE_EXPORT/AUDIT   --此处等了3小时
ORA-31693: 表数据对象 "ZLDOC"."BZ_DOC_LOG" 无法加载/卸载并且被跳过, 错误如下:
ORA-29913: 执行 ODCIEXTTABLEPOPULATE 调出时出错
ORA-01555: 快照过旧: 回退段号  (名称为 "") 过小
ORA-22924: 快照太旧

怎么办呢
检查发现:一直在创建一个外部表ET$00D:

SQL> select event,sql_id,module from v$session where wait_class<>'Idle';

EVENT                          SQL_ID                     MODULE
------------------------------ -------------------------- --------------------
direct path read               6rg8ga126xt6s              Data Pump Worker

SQL> set long 2000000
SQL> select sql_fulltext from v$sql where sql_id='6rg8ga126xt6s'

SQL_FULLTEXT
--------------------------------------------------------------------------------
CREATE TABLE "ET$00DT_2_SC("EDITLOG"), "CONTENTTEXT"
    FROM RELATIONAL("ZLDOC"."BZ_DOC_LOG" NOT XMLTYPE) KU$

看来是在对ZLDOC"."BZ_DOC_LOG" 进行导出。

SQL> desc ZLDOC."BZ_DOC_LOG"
名称                                      是否为空? 类型
----------------------------------------- -------- ----------------------------
ID                                        NOT NULL RAW(16)
ACTLOG_ID                                          RAW(16)
ANTETYPE_ID                                        RAW(16)
TITLE                                              VARCHAR2(80)
CONTENT                                            XMLTYPE STORAGE BINARY
ANONYM_DATA                                        XMLTYPE STORAGE BINARY
STATUS                                             NUMBER(1)
CREAT_TIME                                         DATE
CREATOR                                            VARCHAR2(50)
EDIT_TIME                                          DATE
EDITOR                                             VARCHAR2(50)
LOCKED                                             VARCHAR2(2000)
EDITLOG                                            XMLTYPE STORAGE BINARY
AFTER_LOG_ID                                       RAW(16)
SECRET                                             NUMBER(1)
SEALED                                             NUMBER(1)
LOCKED_CP                                          VARCHAR2(2000)
LOCKED_IP                                          VARCHAR2(20)
LOCKED_AC                                          VARCHAR2(20)
LOCKED_SE                                          VARCHAR2(80)
CONTENTTEXT                                        CLOB


看来是在导大对象出错了。


SQL> show parameter undo_reten


NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
undo_retention                       integer
900

SQL>


SQL> select table_name,column_name,segment_name,pctversion,retention,SECUREFILE,retention_type
           from dba_lobs
         where table_name='BZ_DOC_LOG'
             and column_name='CONTENTTEXT';


TABLE_NAME           COLUMN_NAME          SEGMENT_NAME                        PCTVERSION  RETENTION SECURE RETENTION_TYPE
--------------------        --------------------        ------------------------------             ----------         ----------       ------     --------------

BZ_DOC_LOG           CONTENTTEXT          SYS_LOB0000089148C00024$$                         900              NO       YES

看来超时了。同时是BASIC LOB,不能用并行,比较慢。
先调整undo_retention
alter system set undo_retention=10800;
调整一下LOB再看看

ALTER TABLE zldoc.BZ_DOC_LOG MODIFY LOB(CONTENTTEXT)(retention);


SQL> select table_name,column_name,segment_name,pctversion,retention
           from dba_lobs
         where table_name='BZ_DOC_LOG'
             and column_name='CONTENTTEXT';


TABLE_NAME           COLUMN_NAME          SEGMENT_NAME                        PCTVERSION  RETENTION
--------------------        --------------------        ------------------------------             ----------         ----------      

BZ_DOC_LOG           CONTENTTEXT          SYS_LOB0000089148C00024$$                         10800         


再去试试。












欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2