Oracle11gExp匯出空表方法

2021-06-19 03:39:45 字數 2343 閱讀 6523

之前有需求要匯入匯出資料,每次發現執行exp匯出的表都不全,後來發現,原來在11g新特性中,對exp的匯出做了限制。

oracle11g 在使用exp 匯出資料時會出現空表不能匯出的問題,這是因為:

1、oracle11g 預設對空表不分配segment,故使用exp 匯出oracle11g 資料庫時,空表不

會匯出。

2、預設設定deferred_segment_creation 引數為true,空表不分配segment。

處理方法:

在 sqlplus 中,執行如下命令:

sql>alter system set deferred_segment_creation=false;

檢視:sql>show parameter deferred_segment_creation;

該值設定後只對後面新增的表產生作用,對之前建立的空表不起作用。

3、可以使用手工為空表分配extent的方式,來解決匯出之前建立的空表的問題。說明如下:

3.1 使用allocate extent的說明

使用 allocate extent可以為資料庫物件分配extent。其語法如下:

-----------

allocate extent

-----------

可以針對資料表、索引、物化檢視等手工分配extent。

allocate extent使用樣例:

allocate extent

allocate extent(size integer [k | m])

allocate extent(datafile 'filename')

allocate extent(instance integer)

allocate extent(size integer [k | m] datafile 'filename')

allocate extent(size integer [k | m] instance integer)

針對資料表操作的完整語法如下:

-----------

alter table [schema.]table_name allocate extent [()]

-----------

故,需要構建如下樣子簡單的sql命令:

-----------

alter table atabelname allocate extent

-----------

3.2 構建對空表分配空間的sql命令,

查詢當前使用者下的所有空表(乙個使用者最好對應乙個預設表空間)。命令如下:

-----------

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

-----------

批量輸出上述生成的sql語句,建立c:\createsql.sql,其內容如下:

-----------

set heading off;

set echo off;

set feedback off;

set termout on;

spool c:\allocate.sql;

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;

spool off;

-----------

執行 c:\createsql.sql,命令如下:

-----------

sql>@ c:\createsql.sql;

-----------

執行完畢後,得到c:\allocate.sql檔案。

開啟該檔案會看到,已經得到對所有空表分配空間的命令sql語句。

3.4 執行sql命令,對空表分配空間:

執行 c:\allocate.sql,命令如下:

-----------

sql>@ c:\allocate.sql;

-----------

執行完畢,表已更改。

3.4 此時執行exp 命令,即可把包括空表在內的所有表,正常匯出。

另外:oracle11g 中,對密碼是大小寫敏感的,即密碼中的字母是區分大小寫的。

在 oracle10g 中及以前,密碼中的字母大小寫無所謂。

oracle11gexp匯出空表

oracle 11g 預設對空表不分配segment,故使用exp匯出oracle11g資料庫時,空表不會匯出。預設情況下,deferred segment creation 引數為true,將引數 deferred segment creation 引數設定為false後,無論是空表還是非空表,都...

Oracle 11g exp不能匯出的空表處理方法

oracle 11g在用exp匯出時,空表不能匯出。11g中有個新特徵,當表無近據時,不分配segment,以節省空間 處理方法 1 insert一行,再rollback就發生segment了。該方法是在在空表中插入資料,再刪除,則發生segment。匯出時則可匯出空表。2 配置deferred s...

oracle11g匯出空表

該引數意思是當建立物件 如表 初始時沒有資料,是否立即建立segment。預設是true。這會導致在按使用者匯出時,沒有segment的物件不會匯出。首先執行下面的語句 select alter table table name allocate extent from user tables wh...