在做数据库迁移。现在在做测试。
由于老数据库和新数据库字符集不同,原数据库:GBK,现数据库UTF8
所以是经过如下步骤导入的。
1、导出表结构,不包括索引和主外键。
2、更新中文字段扩展为原始长度的1.5倍。更新VARCHAR2字段。
3、导入数据
4、导入索引和主键。
前面三步没任何问题,第四步。占用太多的表空间。
原始数据导出来只有80G。第三步导入数据也就100多个G。
但导入索引时候直接占了400G左右,还不够用提示表空间不足。
我查了下DBA_SEGMENTS视图,发现数据量很小的表比如几十万条的数据,一个索引竟然占了3、4个G。
查看表结构发现了一个现象,原来导入的表结构initial只是4K现在是几个G了。但是数据量才几十万不可能占用和这么多的。
对表进行shrink收缩操作后,发现立马减下去了。表和索引占的segment只有几百兆和几十兆。
为什么会出现这种现象??表空间和用户都是单独建的。表空间设置自增长。
------解决方案--------------------
原来导入的表结构initial只是4K现在是几个G了 ,
你原来的库里,就是这么设置的,你可以到原来的库里看看。
对表进行shrink收缩操作后,发现立马减下去了。表和索引占的segment只有几百兆和几十兆。
也可以把 IX 干掉,重建一下,别忘了收集一下统计信息;
------解决方案--------------------
你是哪个版本的库,我找个环境试试。
------解决方案--------------------
执行下面查到的结果:
select 'alter index '
------解决方案--------------------
owner
------解决方案--------------------
'.'
------解决方案--------------------
index_name
------解决方案--------------------
' rebuild ;' from dba_indexes
where OWNER not in ('SYS', 'SYSTEM', 'DBSNMP','SYSMAN','OUTLN','MDSYS','ORDSYS','EXFSYS','DMSYS',
'WMSYS','CTXSYS','ANONYMOUS','XDB','ORDPLUGINS','OLAPSYS','PUBLIC')
------解决方案--------------------
看着有点奇怪,数据泵一般改变initial extent的值
可能是跨版本引起的,导入的时候加version参数了吗
参数值指定为源库的版本号
------解决方案--------------------
所以,楼主用的并不是expdp/impdp,而是exp/imp咯
数据泵里没有compress参数