【ORA-01555】Oracle LOB字段导出 报错 ORA-01555

本文主要介绍 在做Oracle 逻辑迁移或者备份的时候, Oracle10g 、Oracle11g导出含有LOB字段的表,非常慢且长时间会报错,ORA-01555,具体如下

含有LOB字段的表通常比较大,导出可以分批并行导出,这样可以提高效率。但因为bug等原因,使用数据泵导出特别慢,这样很容易造成ORA-01555错误,我们调整undo相关参数无济于事,需要调整lob字段本身相关undo参数。

报错如下所示:

Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
ORA-31693: Table data object "mytest"."mytest_lob" 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  with name "" too small
ORA-22924: snapshot too old
. . exported "mytest"."mytest_lob"            24.24 GB  7987193 rows
Master table "mytest"."SYS_EXPORT_TABLE_02" successfully loaded/unloaded

查看LOB相关信息

--语句参考
col owner for a15
col segment_name for a30
col column_name for a10
col tablespace_name for a15
select s.owner as owner,b.table_name as table_name,s.segment_name,s.tablespace_name,
s.bytes/1024/1024/1024 as gb ,b.COLUMN_NAME,b.RETENTION,b.PCTVERSION 
from dba_segments s,dba_lobs b where s.segment_name=b.segment_name and 
b.table_name='MYTEST' 
and s.bytes/1024/1024/1024>0.5 order by gb;
--修改 undo信息
alter table MYTEST.MYTEST_LOB modify lob(ZP) (PCTVERSION 50);
--注意,修改50后,lob字段实际占用空间是lob本身大小的两倍,为节省空间,可在导出后调回原值,原值默认是10.
alter table MYTEST.MYTEST_LOB modify lob(ZP) (PCTVERSION 10);

再次执行导出无报错,在Oracle11g中,Oracle退出了新的LOB类型SecureFiles LOB,SecureFiles提供以下新功能:

  • 提供数据去重、压缩和透明加密功能
  • 新的网络协议
  • 简化物理属性设计和管理
  • 节省存储空间

语句参考:

--创建SecureFiles lob, 并具有透明加密功能
create table test_lob (id number,doc clob) lob (doc)
store as securefile (encrypt);
--查询log类型,如下 查询某个表空间下的lob信息
select segment_name,segment_type,segment_subtye from dba_segments
where tablespace_name=''
and segment_type= 'LOBSEGMENT';
--另外可通过 DBMS_LOB.GETOPTIONS 查询SecureFiles类型的lob字段选项,如是否去重、加密等;DBMS_LOB.SETOPTIONS进行相关设置;DBMS_SPACE.SPACE_USAGE查询SecureFiles类型的LOB字段空间使用情况
--参考:mos 1490228.1/268476.1/66431.1
请使用浏览器的分享功能分享到微信等