PLSQL數據導入導出問題解決(空表、大字段表、表空間錯誤等)

針對下面的文章作點調整,第二種方案,應將查詢空表的語句改成: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;

                        注意:我在查詢過程當中可能查找的空表有遺漏,這個能夠先進行一遍導出

                        image

                        把查詢結果導出,執行導出的語句便可。

                        導出結果能夠經過語句導出,在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;

                        image

            第三種:設置deferred_segment_creation 參數,該參數值默認是TRUE,當改成FALSE時,不管是空表仍是非空表,都分配segment。

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

                        在PLSQL中執行命令就下面第一句查看deferred_segment_creation屬性是否爲true,若是爲true則繼續執行後面一句進行更改便可。

                        show parameter deferred_segment_creation;

                        alter system set deferred_segment_creation = false;

                        image

二、對於包含大字段的表當表空間名稱改變時沒法導出導入。

           查看全部包含大字段的表名稱:select table_name from user_tab_columns where data_type='clob' or data_type='NCLOB'or data_type='BLOB'

           對於這些表能夠採用先創建表結構在經過導入數據方式進行。

三、可能因爲權限設置緣由,致使導入表的表空間名稱不正確。

           能夠採用通用方法進行表結構導出,而後進行編輯後在進行導入,在編輯的時候修改表空間名稱便可。

相關文章
相關標籤/搜索