oracle 11g中有個新特性,當表無資料時,不分配segment,以節省空間。所以,在使用資料庫部署工具(常見為v2.5 2015.12.10)匯出資料庫時,空表簿能被匯出,出現少表的問題。
解決方案:
1)insert一行,再rollback就產生segment了
該方法是在在空表中插入資料,再刪除,則產生segment。匯出時則可匯出空表。
2)設定deferred_segment_creation引數
複製**
sql> show parameter deferred_segment_creation
name type value
deferred_segment_creation boolean true
sql> alter system set deferred_segment_creation=false;
系統已更改。
sql> show parameter deferred_segment_creation
name type value
deferred_segment_creation boolean false
複製**
需注意的是:該值設定後對以前匯入的空表不產生作用,仍不能匯出,只能對後面新增的表產生作用。如需匯出之前的空表,只能用第一種方法。
3)批量處理空表
首先使用下面的sql語句查詢一下當前使用者下的所有空表
select table_name from user_tables where num_rows=0;
然後用一下sql語句執行查詢
select 『alter table 『||table_name||』 allocate extent;』 from user_tables where num_rows=0
假設我們這裡有空表tbl_1,tbl_2,tbl_3,tbl_4,則查詢結果如下:
alter table tbl_1 allocate extent;
alter table tbl_2 allocate extent;
alter table tbl_3 allocate extent;
alter table tbl_4 allocate extent;
最後我們把上面的sql語句執行就可以了。
案例完整** ***.sql
create table "bdck"."zrzys_zrzy_bdcql_gl_xz"
( "zrzybdcqlglid" varchar2(50) not null enable,
"zrzydyh" varchar2(50),
"bdcdyh" varchar2(50),
"bdcdjdyid" varchar2(50),
"bdcqlid" varchar2(50),
"bdcqlrid" varchar2(50),
"bdczsid" varchar2(50),
"bdcfsqlid" varchar2(50),
"jttdsyq" varchar2(100),
"bdcqlr" varchar2(100),
"fj" varchar2(200),
"gytdsdyywq" varchar2(100),
"bdcdylx" varchar2(50)
) segment creation deferred
pctfree 10 pctused 40 initrans 1 maxtrans 255 nocompress logging
tablespace "bdck" ;
alter table "bdck"."zrzys_zrzy_bdcql_gl_xz" modify ("zrzybdcqlglid"
not null enable);
comment on column "bdck"."zrzys_zrzy_bdcql_gl_xz"."zrzybdcqlglid"
is'標識碼';
comment on column "bdck"."zrzys_zrzy_bdcql_gl_xz"."zrzydyh"
is'自然資源單元號';
comment on column "bdck"."zrzys_zrzy_bdcql_gl_xz"."bdcdyh"
is'不動產單元號';
comment on column "bdck"."zrzys_zrzy_bdcql_gl_xz"."bdcdjdyid"
is'不動產登記單元id';
comment on column "bdck"."zrzys_zrzy_bdcql_gl_xz"."bdcqlid"
is'不動產權利id';
...
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 調整再建表 這兩種...