Oracle 11G空表無法匯出處理

2022-03-18 11:02:58 字數 1712 閱讀 7248

通過exp進行資料匯出的時候,如果表的資料為空,則會出現警告,並且表也不會匯出,不利於資料恢復。

可以通過以下方法進行解決:

一、使用allocate extent,可以匯出之前已經存在的空表

--

查詢當前使用者中所有記錄數為0的表

select table_name from user_tables where num_rows=0;

--拼接sql字串

select

'alter table

'||table_name||

'allocate extent;

'from user_tables where num_rows=

0or num_rows is

null

--將查詢出來的資料進行執行,更改表資訊

--例如:alert table t_1 allocate extendt;

--說明:

--allocate extent語法描述:

allocate extent

-----------

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

allocate extent使用樣例:

allocate extent

allocate extent(size

integer

[k | m])

allocate extent(datafile

'filename')

allocate extent(instance

integer

) www.2cto.com

allocate extent(size

integer

[k | m

] datafile '

filename')

allocate extent(size

integer

[k | m

] instance integer

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

-----------

alter

table

[schema.

] table_name allocate extent [

()]

二、修改資料庫引數(deferred_segment_creation)設定:

設定deferred_segment_creation 引數為false來禁用"段推遲建立"(也就是直接建立segment),無論是空表還是非空表,都分配segment。

在sqlplus中,執行如下命令:

sqlplus /as sysdba

sql>alter system set deferred_segment_creation=false;

#檢視:

sql>show parameter deferred_segment_creation;

注意:該值設定後只對後面新增的表產生作用,對之前建立的空表(已經存在的)不起作用,仍不能匯出。

並且要重新啟動資料庫,讓引數生效,為了使得後續新增的表也可以匯出,建議使用第二種方法

參考:

oracle11g無法匯出空表問題

產生原因 oracle11g為了節約空間,對空表不分配segment 解決方法 方法1.用如下語句設定空表可匯出 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...