问题描述
使用expdp导出数据,报ORA-01691表空间不足错误
WTF!!导出怎么会报表空间不足?导出还会占用表空间大小吗?
问题排查及解决
亲自开着挖掘机上百度一顿挖。。。。。。
查看SYSTEM表空间使用率
SQL> select b.tablespace_name "表空间",b.bytes/1024/1024 "大小M",(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 "已使用M",substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) "利用率" from dba_free_space a,dba_data_files b where a.file_id=b.file_id and b.tablespace_name='SYSTEM' group by b.tablespace_name,b.file_name,b.bytes order by b.tablespace_name;
SQL> select tablespace_name,sum(bytes/1024/1024/1024) gbytes from dba_free_space where tablespace_name = 'SYSTEM' group by tablespace_name; TABLESPACE_NAME GBYTES ------------------------------ ---------- SYSTEM 0.03298889
从这里看,由于system可能存在一些碎片的情况,无法找到一个连续的空间也很正常。由于导出的时候,会生成一个表SYS_EXPORT_SCHEMA_01,这个表主要是记录一些导出的任务信息等内容,其本向大小也就100多m,但是通过查询发现,本表有一个lob字段,已经到了1.2g
SQL> select l.owner, 2 l.table_name, 3 l.segment_name, 4 s.bytes/1024/1024/1024 gbytes 5 from dba_lobs l, 6 dba_segments s 7 where l.table_name like 'SYS_EXPORT_SCHEMA%' and 8 l.table_name = s.segment_name; OWNER TABLE_NAME SEGMENT_NAME GBYTES ------------------------------ ------------------------------ ------------------------------ ---------- SYSDB SYS_EXPORT_SCHEMA_01 SYS_LOB0000665077C00039$$ 1.2479325
可以看到lob字段已经比较大了,并且还在扩张。
出现这种情况,也比较正常,比如说导出的内容挺多,需要记录到这个表中,导致这个lob段不断的扩展!
解决办法就是扩展system表空间!!
1、为SYSTEM表空间增加一个数据文件SYSTEM02.DBF
2、设置SYSTEM表空间为自动拓展
拓展数据文件
SQL> select file_name,bytes from dba_data_files where tablespace_name = 'SYSTEM'; FILE_NAME BYTES --------------------------------------------------------------- /u01/app/oracle/oradata/myerp/system01.dbf 2147483648 SQL> alter database datafile '/u01/app/oracle/oradata/myerp/system01.dbf' resize 4096m
设置为自动拓展
alter database datafile '/u01/app/oracle/oradata/myerp/system01.dbf' autoextend on next 50m maxsize 32000m;
将文件扩展到4g后,expdp任务执行完成!
尾巴
最近真的是被Oracle搞的不要不要的,阿里去IOE万岁