oracle11g,在用exp命令備份數據庫時,如果表中沒有數據報EXP-00011錯誤,對應的表不存在。這導致對應的空表無法備份。
原因:11g默認創建一個表時不分配segment,只有在插入數據時才會產生(當然也可以強制分配),以節省磁盤空間。
對於已經存在的空表解決辦法:
就是想辦法讓空表有segment,第一種:可以通過插入數據的方式(不想要這些數據可以回滾),只要有insert動作就會分配segment;
第二種:就是強制分配:alter table tablename allocate extent;
如果采用第二種可以用以下方法:
1、用以下這句查找空表:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
2、把查詢結果導出,執行導出的語句;
為了后面創建的表能直接分配segment:
用系統賬戶登錄數據庫,修改參數deferred_segment_creation(11g新增的)。該參數即指是否延遲創建segment,默認為true。如果想讓表創建時就分配segment,那么就應該修改該參數為false即alter system set deferred_segment_creation=false。如下所示: