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。如下所示:
oracle11g匯出空表
該引數意思是當建立物件 如表 初始時沒有資料,是否立即建立segment。預設是true。這會導致在按使用者匯出時,沒有segment的物件不會匯出。首先執行下面的語句 select alter table table name allocate extent from user tables wh...
oracle 11g匯出空表
oracle 11g 用exp命令匯出庫檔案備份時,發現只能匯出來一部分表而且不提示錯誤,之前找不到解決方案只能把沒匯出來的表重新建建立。後來發現是所有的空表都沒有匯出來。於是想好好查查,因為在以前的10g版本中沒有這樣的問題。查資料發現oracle 11g中有個新特性 新增了乙個引數 deferr...
oracle11g 空表匯出
oracle11g的新特性,資料條數是0時不分配segment,所以就不能被匯出。解決方法 1插入一條資料 或者再刪除 浪費時間,有時幾百張表會累死的。2建立資料庫之前 使用 sql alter system set deferred segment creation false 調整再建表 這兩種...