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


PLSQL使用方法簡單,平常使用較多,但在平常使用過程中,遇到一些問題,下面簡單羅列並進行解決。這些解決方法大多通過網絡查找獲得,這里只是進行簡單整理。

使用的數據庫版本為:Oracle11g。

通用方法:表結構和數據分開導出導入,通用方法可以解決很多問題,對於下面的錯誤頁可以通過這個方法進行解決

方法說明:通過工具—>導出用戶對象 導出用戶表結構,可以通過編輯方式對表結構進行編輯后在導入的時候選擇導入表—>SQL插入方式導入表結構。

               表結構導入后可以采用dmp導入導出的方式進行數據導入,對於部分表可以采用數據復制的方式進行數據導入。

1、在數據導出的時候,無法導出空表,提示錯誤“導出表報EXP-00011:table不存在”。

原因: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

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

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

           對於這些表可以采用先建立表結構在通過導入數據方式進行。

3、可能由於權限設置原因,導致導入表的表空間名稱不正確。

           可以采用通用方法進行表結構導出,然后進行編輯后在進行導入,在編輯的時候修改表空間名稱即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM