DB:ORACLE 11.2.0.3
[box style=”blue”]SYMPTOMS[/box]
通过EXPDP导出全库,查看log发现如下报错:
ORA-31693: 表数据对象 “AUDIT_GD”.”PUB_LOBFILE” 无法加载/卸载并且被跳过, 错误如下:
ORA-02354: 导出/导入数据时出错
ORA-01555: 快照过旧: 回退段号 7 (名称为 “_SYSSMU7_93985497$”) 过小
已成功加载/卸载了主表 “EXP_DBA”.”JOB_EXP_FULL_2″
[box style=”blue”]CAUSE & SOLUTION[/box]
从报错信息ORA-31693,我们可以看到由于”AUDIT_GD”.”PUB_LOBFILE”对象的UNDO段过期导致。我们知道LOB对象的UNDO段保留时间通过PCTVERSION和RETENTION参数控制。
注意:
1、SecureFiles类型的LOB,只能通过RETENTION参数控制。
2、BasicFiles类型的LOB,可以通过PCTVERSION 或 RETENTION中的其中一个进行控制。
PCTVERSION:表示整个BasicFiles LOB对象的空间允许被该LOB对象的UNDO段占用的最大百分比。
RETENTION:表示保留的时间,单位秒。当数据库为自动UNDO段管理是,该参数为默认值,并参考undo_retention的参数值。
查看该LOB对象的UNDO段保留情况:
SQL> select COLUMN_NAME,SECUREFILE,PCTVERSION,RETENTION from dba_lobs where OWNER=upper('AUDIT_GD') and TABLE_NAME=upper('PUB_LOBFILE') ; COLUMN_NAME SEC PCTVERSION RETENTION ------------------------------ --- ---------- ---------- LOB NO 10 TEXTLOB NO 900
查看数据库中使用UNDO段的最大保留时间:
SQL> select max(maxquerylen) from v$undostat; MAX(MAXQUERYLEN) ---------------- 1839
为了防止数据导出过程中UNDO段过期,增加undo_retention参数值:(设置该参数之前,必须保证UNDO表空间有足够的空间)
SQL> alter system set undo_retention=2000 scope=both sid='*';
设置LOB对象的UNDO段保留时间:
SQL> alter table AUDIT_GD.PUB_LOBFILE modify lob(LOB) (retention); Table altered. SQL> alter table AUDIT_GD.PUB_LOBFILE modify lob(TEXTLOB) (retention); Table altered. SQL> select COLUMN_NAME,SECUREFILE,PCTVERSION,RETENTION from dba_lobs where OWNER=upper('AUDIT_GD') and TABLE_NAME=upper('PUB_LOBFILE') ; COLUMN_NAME SEC PCTVERSION RETENTION ------------------------------ --- ---------- ---------- LOB NO 2000 TEXTLOB NO 2000
修改完参数之后,再进行EXPDP导出。
参考:ORA-31693, ORA-02354 and ORA-01555 with Export Datapump (文档 ID 1580798.1)
版权所有,转载请注明出处:
no comment untill now