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

标题: 存在lob字段的表expdp导出时ORA-31693、ORA-02354、ORA-01555 [打印本页]

作者: 刘泽宇    时间: 2026-1-22 18:09
标题: 存在lob字段的表expdp导出时ORA-31693、ORA-02354、ORA-01555
ORA-31693: 表数据对象 "ULTRA"."DAY_META_TASK_RESULT_B" 无法加载/卸载并且被跳过, 错误如下:
ORA-02354: 导出/导入数据时出错
ORA-01555: 快照过旧: 回退段号 24 (名称为 "_SYSSMU24$") 过小

首先想到的是查看及调整undo_retention参数
SQL> show parameter undo_r
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_retention                    integer     3600
SQL> select tablespace_name,sum(bytes)/1024/1024/1024 gb from dba_data_files where tablespace_name like '%UNDO%' group by tablespace_name;
TABLESPACE_NAME                GB
--------------------           ----------
UNDOTBS1                       106.992172
   然后查看了undo表空间的使用率,其使用率只有1%,因此考虑调整undo_retention参数到5400,调整后问题依旧,后来又调整到7200,问题依然存在,但是undo表空间的使用率最高到30%。现在,可以判断不是单纯的undo表空间参数undo_retention的问题了,需要具体问题具体分析一下。查看问题表的结构发现,该表有2个大字段:
SQL> desc "ULTRA"."DAY_META_TASK_RESULT_B"
名称                         是否为空?        类型
--------------------------- --------        ----------------------------
META_TASK_RESULT_ID         NOT NULL        VARCHAR2(50)
SCHEDULER_ID                                VARCHAR2(50)
META_TASK_ID                                VARCHAR2(50)
TIME                                        NUMBER(20)
ALARM                                       NUMBER(5)
META_TASK_STATE                             NUMBER(5)
INSTANCE                                    VARCHAR2(200)
UNIT                                        VARCHAR2(10)
VALUE_CHECK                                 VARCHAR2(5)
SHELL_RESULT                                CLOB
ADVICE                                      VARCHAR2(4000)
OPINION                                     VARCHAR2(100)
ALARM_INFO                                  VARCHAR2(200)
VALUE                                       CLOB
VTABLE                                      VARCHAR2(30)
REFLAG                                      VARCHAR2(50)

oracle的lob大字段有自己的retention参数,如果只调整undo_retention,而没有同步到lob大字段,该参数还是默认的900s,确认查询结果如下:
SQL>select table_name,column_name,pctversion,retention from dba_lobs where table_name='DAY_META_TASK_RESULT_B'
TABLE_NAME                     COLUMN_NAME                    PCTVERSION  RETENTION
----------------------------  ------------------------------  ----------  ----------
DAY_META_TASK_RESULT_B         SHELL_RESULT                                900
DAY_META_TASK_RESULT_B         VALUE                                       900

明确了问题原因,接下来就是修改表含有 lob大字段的retention设置
SQL>ALTER TABLE DAY_META_TASK_RESULT_B MODIFY LOB(SHELL_RESULT)(retention);
table altered.
SQL>ALTER TABLE DAY_META_TASK_RESULT_B MODIFY LOB(VALUE)(retention);
table altered.
SQL>select table_name,column_name,pctversion,retention from dba_lobs where table_name='DAY_META_TASK_RESULT_B'
TABLE_NAME                      COLUMN_NAME                    PCTVERSION  RETENTION
----------------------------   ------------------------------  ----------    ----------
DAY_META_TASK_RESULT_B         SHELL_RESULT                                  7200
DAY_META_TASK_RESULT_B         VALUE                                         7200

再次导出:
作业 "SYSTEM"."SYS_EXPORT_SCHEMA_02" 已于 18:12:35 成功完成

至此,故障处理完毕!






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