oracle 11g 默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。默认情况下,deferred_segment_creation 参数为TRUE,将参数
deferred_segment_creation 参数设置为FALSE后,无论是空表还是非空表,都分配segment。
在sqlplus 中连接数据库:
(1)、查看该参数的值
SQL> show parameter deferred_segment_creation;
(2)、修改该参数值为false
SQL> alter system set deferred_segment_creation=false;
注: 该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。(我在修改此参数之前创建一张空表tab1,修改之后又创建一直表tab2,在导出操作时,确实没有导出表tab1 而导出表tab2。)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
deferred_segment_creation=false之前的空表如何才能导出呢???
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
查找空表:
SQL> select table_name from user_tables where num_rows=0 or num_rows is null;
方法1:insert 一行,然后在rollback 就产生segment了。该方法是在空表中插入数据再删除,则产生segment。导出时则可导出空表。
方法2:可以使用手工为空表分配Extent的方式,来解决之前建立的空表的问题。
SQL> alter table tablename allocate extent;
方法3:不用exp ,使用expdp工具可以导出空表。