Oracle 中deferred_segment_creation 的用法以及exp時解決辦法,oraclesegment
SYS@ORCL>show parameter segment
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean TRUE
rollback_segments string
transactions_per_rollback_segment integer 5
deferred_segment_creation參數,在11.2.0.4g才有的參數,
建立一個表,在沒有插入資料時是否分配空間,為true時,不分配空間,但在sys使用者下不支援;
deferred_segment_creation=ture;
1.在sys使用者下,建立一個沒有資料的表時,同時自動分配空間;
2.在普通使用者下,建立一個沒有資料的表時,不會分配空間;
查看sql語句,是否已經分配空間;
select dbms_metadata.get_ddl('TABLE','T1') from dual;
--設定輸出格式(set long 99999)
deferred_segment_creation在11.2.0.4版本的Oracle資料庫新增參數,預設是true。
這會導致在exp時,沒有segment的對象不會匯出。
解決:
(1)設定deferred_segment_creation的值為false
此方法只對以後的表有效,之前的表還是沒分配空間。
(2) 建立表的時候聲明立即建立Segment
create table table_name segment creation immediate;
(3)對於已經建立但是還沒有Segment的表來說,
可以執行alter table table_name allocate extent來使其建立出分配空間,
當然也可以插入一條資料,使其建立分配空間;
Oracle 11g怎沒有deferred_segment_creation
這是11gR2的新特性、你的莫非是11gR1版本?
select version from v$instance;
oracle資料匯入匯出問題解
1、EXP/IMP 會忽略“空表”操作,如果你想對空表也操作,可以使用EXPDP/IMPDP命令實現,用法和EXP/IMP差不多,只是使用之前要建立個目錄!
【相關知識擴充--------------只為分享,共同成長】
ORACLE 11g
新增了一個參數:deferred_segment_creation,預設值是
true。具體是如果deferred_segment_creation為true,當建立表並且沒有向其中插入資料的時候,這個表不會立即分配
extent,即不佔資料空間,只有insert資料後才分配空間,這樣做可以節省少量的空間!為了防止再次出現EXP/IMP匯出表不全,所以在使用11g時,把這個參數預設設定為“false”!