針對下面的文章作點調整,第二種方案,應將查詢空表的語句改成:html
Select 'alter table '||table_name||' allocate extent;' from user_tables where segment_created='NO'; sql
/******************************************************************************************************************/數據庫
轉載:http://www.cnblogs.com/Jingkunliu/p/3298597.html網絡
PLSQL使用方法簡單,日常使用較多,但在日常使用過程當中,遇到一些問題,下面簡單羅列並進行解決。這些解決方法大多經過網絡查找得到,這裏只是進行簡單整理。工具
使用的數據庫版本爲:Oracle11g。spa
通用方法:表結構和數據分開導出導入,通用方法能夠解決不少問題,對於下面的錯誤頁能夠經過這個方法進行解決。htm
方法說明:經過工具—>導出用戶對象 導出用戶表結構,能夠經過編輯方式對錶結構進行編輯後在導入的時候選擇導入表—>SQL插入方式導入表結構。對象
表結構導入後能夠採用dmp導入導出的方式進行數據導入,對於部分表能夠採用數據複製的方式進行數據導入。blog
一、在數據導出的時候,沒法導出空表,提示錯誤「導出表報EXP-00011:table不存在」。get
緣由:11g默認建立一個表時不分配segment,只有在插入數據時纔會產生(固然也能夠強制分配),以節省磁盤空間。
解決方法:
第一種:在空表中插入一條數據而後再對插入的數據進行刪除,即可以進行數據導出(若是表少的話能夠手動執行,對於多個表的狀況能夠採用語句進行批量操做的)。
第二種:能夠使用手工爲空表分配Extent的方式,來解決導出以前創建的空表的問題。
查找空表語句:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
注意:我在查詢過程當中可能查找的空表有遺漏,這個能夠先進行一遍導出
把查詢結果導出,執行導出的語句便可。
導出結果能夠經過語句導出,在PLSQL命令窗口執行下面語句:
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:\allocate.sql;
第三種:設置deferred_segment_creation 參數,該參數值默認是TRUE,當改成FALSE時,不管是空表仍是非空表,都分配segment。
需注意的是:該值設置後對之前導入的空表不產生做用,仍不能導出,只能對後面新增的表產生做用。如需導出以前的空表,只能用第一種方法。
在PLSQL中執行命令就下面第一句查看deferred_segment_creation屬性是否爲true,若是爲true則繼續執行後面一句進行更改便可。
show parameter deferred_segment_creation;
alter system set deferred_segment_creation = false;
二、對於包含大字段的表當表空間名稱改變時沒法導出導入。
查看全部包含大字段的表名稱:select table_name from user_tab_columns where data_type='clob' or data_type='NCLOB'or data_type='BLOB'
對於這些表能夠採用先創建表結構在經過導入數據方式進行。
三、可能因爲權限設置緣由,致使導入表的表空間名稱不正確。
能夠採用通用方法進行表結構導出,而後進行編輯後在進行導入,在編輯的時候修改表空間名稱便可。