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工具可以導出空表。