最近在oracle导入和导出的时候发现一些问题,空表没有导出。 那么就需要对oracle的导出进行一些处理。 先做全局设置,先登录oracle。 show parameter defer; 查看是否 deferred_segment_creation 的值为true。 这个时候是不导出空表的。 alter system set deferred_segment_creation= false scope=spfile; 修改这个值为false,以后新建的空表就可以导出了。 对于原有的空表。首先查询 select 'alter table XXXXXX.'||table_name||' allocate extent;' from dba_tables where num_rows=0 where owner='XXXXXX' ; XXXX代表用户名。 然后将查询到的语句拷贝出来,执行。将空表分配空间。 再导出,就会发现空表也导出来了。
上面有可能检查不全,可以用下面的语句再查询一次
检查user_tables表发现没有导出的表的segment_created属性是NO
解决办法:
1、可通过下面语句生成SQL执行:
select 'alter table '|| table_name ||' move;'
from user_tables where segment_created='NO';
或是
select 'alter table '|| table_name ||' allocate extent;'
from user_tables where segment_created='NO';
impdb导出导入
expdp SRM_DEMO/password schemas=SRM_DEMO directory=data_pump_dir dumpfile =SRM_DEMO.dmp logfile=expdp_SRM_DEMO.log;
impdp SRM_DEMO3/SRM_DEMO3 directory=data_pump_dir dumpfile=srmdemo615.dmp REMAP_SCHEMA=SRM_DEMO:SRM_DEMO3 REMAP_TABLESPACE=SRM_DEMO:SRM_DEMO3 table_exists_action=replace;