oracle impdp 导入元数据表空间异常增大的解决办法

expdp导出的时候指定了contents=metadata_only只导出元数据,但是在impdp导入到新库的时候,发现新库的表空间增长非常大,其实这个直接就可以想到,应该是大表的initial segment过大导致的

正常impdp,在执行创建表和索引的sql的时候,会带上存储参数,存储参数中就指定了初始化段大小,如果原表非常大或者表分区特别多,那么这个默认的初始化段也会变的非常大,因此会导致你建表的时候占用的空间非常大

expdp/impdp提供了transform参数,可以指定在导出和导入的时候去除哪些属性:

TRANSFORM
Metadata transform to apply to applicable objects.
Valid keywords are: OID, PCTSPACE, SEGMENT_ATTRIBUTES and STORAGE.

内部可能是调用的DBMS_METADATA.SET_TRANSFORM_PARAM函数,关于此函数可以参考:

DBMS_METADATA中使用SESSION_TRANSFORM过滤不想获取的DDL-CSDN博客

此外,建表的时候创不创建初始段还和参数:

deferred_segment_creation         boolean     TRUE

有关,如果设置为true,那么默认建表的时候如果不加任何存储参数,是不会创建段的,如果设置为n,那么就会创建段,如果不显式的指定initial extentd,其实这个初始段一般是非常小的,但是如果要加快创建速度,是可以把他设置为true,这么就是只会建表,而不会创建段

最后修改导入语句如下:

impdp \'/ as sysdba\' directory=expdir dumpfile=str.dmp full=y exclude=statistics TRANSFORM=SEGMENT_ATTRIBUTES:N

 导入完成检查表空间使用:

oracle impdp 导入元数据表空间异常增大的解决办法_第1张图片

发现只有system表空间占用,因为元数据保存在system表空间中,其它表空间中都没有数据。

你可能感兴趣的:(oracle,troubleshoting,oracle,tools,oracle,数据库)