Oracle impdp导入后表空间很大的解决方法

今天使用impdp命令导入 DMP文件,文件才100M,导入之后表空间占磁盘空间达9G,查资料研究之后发现是表跟索引的初始大小太大了,解决方法如下:

一、使用以下语句生成的SQL语句重新设置所有表跟索引的初始大小(其中BC2022是用户名)

--表
select 'ALTER TABLE '||owner||'.'||table_name||' MOVE TABLESPACE '||tablespace_name||' STORAGE(INITIAL 64K NEXT 32K);' 
  from dba_tables 
 where owner='BC2022' and initial_extent>65536  ;
 
--索引
select 'ALTER INDEX '||owner||'.'||index_name||' REBUILD STORAGE(INITIAL 64K NEXT 32K);' 
  from dba_indexes 
 where owner='BC2022'  and initial_extent>65536;


--分区表
select 'ALTER table '||table_owner||'.'||table_name||' MOVE PARTITION '||PARTITION_NAME||' STORAGE(INITIAL 64K NEXT 32K);'   
  from DBA_tab_PARTITIONS 
 where table_owner='BC2022' and initial_extent>65536;
 
--分区索引
select 'ALTER INDEX '||index_owner||'.'||index_name||' REBUILD PARTITION '||PARTITION_NAME||' STORAGE(INITIAL 64K NEXT 32K);'   
  from DBA_ind_PARTITIONS 
 where index_owner='BC2022' and initial_extent>65536;

二、使用alter index index_name rebuild  online; 语句重置所有索引

三、使用expdp命令备份当前用户数据到dmp文件

expdp username/password@orcl directory=databakdir dumpfile=bc2022_%date:~0,4%-%date:~5,2%-%date:~8,2%.dmp schemas=bc2022  logfile=bc2022_%date:~0,4%-%date:~5,2%-%date:~8,2%.log

四、删除用户,再删除表空间

1、drop user bc2022 cascade; --删除用户

2、drop tablespace tablespace_name including contents and datafiles; --删除表空间及对应数据文件

五、创建用户、创建表空间

六、重新用impdp导入第三步备份的dmp文件,此时表空间只占磁盘200M了


版权声明:本文为CXIAONIAO原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。