在oracle11g的imp和exp的使用過程中,發現有些從來沒有被插入數據的表總是導不出來,今天在導
表的時候藉機研究一下,分享給大家,希望對有此困擾的同學提供幫助。
oracle11g的初始化參數deferred_segment_creation,這個參數我自己理解是延遲段的空間分配,意
思是說段建立以後,如果沒有數據插入的時候,暫時不爲段分配磁盤空間,這樣節約了磁盤空間。這
個參數的默認值爲true,及開啓這個參數。
SQL> show parameter deferred_segment_creation;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean TRUE
爲了解決這個問題,可以通過以下兩種方式:
1、修改初始化參數deferred_segment_creation;
SQL> alter system set deferred_segment_creation=false;
System altered
這樣無論有沒有插入數據的表都會分配extent,這樣我們可以使用exp將其導出,但是在修改這個參數
之前的空表這個辦法是解決不了的,這個很好理解,所以我們介紹第二種方法;
2、手動爲空表分配extent;
SQL> alter table t_oa_staff allocate extent;
Table altered
這樣我們就可以講沒有插入過數據的表使用exp導出了,爲了批量做這件事情,我採用
SQL> select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
2 /
25 rows selected
SQL>
將查詢的數據導出後批量執行下,問題解決了;