问题起因:在一次导回数据库的时候发现数据库过大,导回比较困难,通过数据库相关查询发现了问题
select sum(bytes)/1024/1024/1024 from user_segments; -- 大概20G数据
select segment_name,bytes/1024/1024 from user_segments order by bytes/1024/1024 desc ; -- 找到具体是哪些表占用大的空间,通过倒叙可以看到前几个占用空间较大的对象,将这些对象 通过下面的查询 找到对应的表
select * from user_objects where object_name='SYS_LOB0000055475C00005$$';
找到具体的两张表中有大字段,表是 'ERECEIVEFILE','ESENDFILE' 这两张表都存在大字段,大约占了16G的数据,不想将这两张表的数据导出
所以就有了这样的问题:
提出的问题:
oracle 10g 数据库导出数据时不导出某些表,导出其它所有表;导入时:不导入某些表,其它表全部导入
网上说 exp,imp 做不到
如果是10g或者以上版本的话 可以用expdp 这个可以 排除表
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=table:"in('tablename1'...)"
解决方法:
具体做法如下:
=================================================
sqlplus/nolog
conn carmot_hz_8/[email protected]:1521/IGRP;
CREATE OR REPLACE DIRECTORY dir_dump AS 'D:/dbbak/bak';
GRANT READ, WriTE ON DIRECTORY dir_dump TO public;
--导回数据库
Expdp carmot_hz_8/[email protected]:1521/IGRP DIRECTORY=DIR_DUMP DUMPFILE=201207171030-carmot_hz_8.dp EXCLUDE=TABLE:\"IN('ERECEIVEFILE', 'ESENDFILE')\" logfile=carmot.log
================================================
sqlplus/nolog
conn carmot_hz_8/carmot@DEV_10.4.247.92;
CREATE OR REPLACE DIRECTORY dir_dump AS 'D:/dbbak/bak';
GRANT READ, WriTE ON DIRECTORY dir_dump TO public;
--导入数据库
Impdp carmot_hz_8/carmot@DEV_10.4.247.92 DIRECTORY=DIR_DUMP DUMPFILE=201207171030-carmot_hz_8.dp EXCLUDE=TABLE:\"IN('ERECEIVEFILE', 'ESENDFILE')\" logfile=carmot.log