今天使用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了