解決exp無法導出問題

用exp無法導出空表解決方法/用exp導出數據時表丟失原因



使用oracle 11g導出數據發現有的表丟失原因是:

11GR2中有個新特性,當表無數據時,不分配segment,以節省空間,可是在用EXPORT導出時,空表也不能導出,這就導致遷移時候丟失了一些表,存儲過程也失效了

  解決方法:


一、 insert一行,再rollback就產生segment了。

  該方法是在在空表中插入數據,再刪除,則產生segment。導出時則可導出空表。


二、 設置deferred_segment_creation參數

該參數值默認是TRUE,當改爲FALSE時,無論是空表還是非空表,都分配segment。修改SQL語句:

alter system set deferred_segment_creation=false scope=both;


  需注意的是:該值設置後對以前導入的空表不產生作用,仍不能導出,只能對後面新增的表產生作用。如需導出之前的空表,只能用第一種方法。


三、 用以下這句查找空表並分配空間

select 'alter table '||table_name||' allocate extent;' from user_tables where SEGMENT_CREATED='NO';


  把SQL查詢的結果導出,然後執行導出的語句,強行爲表分配空間修改segment值,然後再導出即可導出空表了。


  以下是腳本,將未分配空間的表的sql直接輸出到result.txt 文件 (直接執行result.txt中的sql即可爲未分配空間的表分配空間)

set linesize 120;
set pagesize 2000;
spool /home/oracle/result.txt;
SELECT 'ALTER TABLE '||TABLE_NAME||' ALLOCATE EXTENT;' SQLSTR FROM USER_TABLES WHERE SEGMENT_CREATED='NO';
spool off;
exit;



--會出現類型這樣的格式

ALTER TABLE JW ALLOCATE EXTENT;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章