oracle11g延迟段问题

来源:互联网 发布:摄像机ntp端口号 编辑:程序博客网 时间:2024/06/13 04:24
很多数据库都有存在空表的情况,较多的空表会占用大量的磁盘空间,ORACLE 在11gR2版本推出延迟段创建新特性,所谓延迟段创建,
顾名思义就是在创建一张新空表的时候,ORACLE默认不会为这张空表分配段(SEGMENTS),也就是不会为这张空表分配空间,这样就避免了空表占用空间的情况
可以在创建表时候追加SEGMENT CREATION IMMEDIATE|DEFERRED来定义是否立即分配segment,如果是deferred时候只有手动分配或者插入数据时候才分配segment
问题:EXP只能导出已经分配段的表,要导出未分配段的空表EXP就无能为力了,要导出未分配段的空表就需要使用数据泵(EXPDP),使用EXPDP可以导出未分配段的空表

解决:
1,手动分配段空间
SELECT 'ALTER TABLE ' || T.TABLE_NAME || ' ALLOCATE EXTENT;'      FROM ALL_TABLES T       WHERE T.NUM_ROWS = 0         AND T.OWNER = 'U1'         AND T.PARTITIONED = 'NO'      UNION ALL      SELECT 'ALTER TABLE ' || T1.TABLE_NAME || ' MODIFY PARTITION ' ||             T2.PARTITION_NAME || ' ALLOCATE EXTENT;'        FROM ALL_PART_TABLES T1, ALL_TAB_PARTITIONS T2       WHERE T1.TABLE_NAME = T2.TABLE_NAME         AND T1.OWNER = T2.TABLE_OWNER         AND T1.OWNER = 'U1';  

2,一开始设置deferred_segment_creation参数为false
alter system set deferred_segment_creation=false;
0 0