orcl數據庫使用plsql 快速導入表結構,和內容

通常使用pl/sql對數據庫表進行導入導出的時候會分3中方法, 網上也有相關的導入導入方式,但小弟實在不會用,只會用一種,眼下就和各位童鞋分享一下;web

導出表結構:sql

這種方式使用pl/sql的tools下的「導出對象功能」,能夠單表打出,也能夠多表導出。但只能導出表結構,不能導出表中已有的數據。且在導入時,要是用pl/sql的命令符進行導入。數據庫

若是是不一樣用戶的表結構移植,就須要對導出的對象文件中的用戶進行修改(改爲要導入的用戶)才能使用,不然會報不存在的視圖異常。oracle

 

導出表內數據:spa

 可使用查詢數據表中的相似餅狀圖的一個圖標,‘導出查詢結果’  該功能能夠導出單表的數據內容,,導入時要使用命令提示符才能夠。orm

 

另:若是使用dmp的文件導出方式,則可以導出表的結構和原表的內容, 是一個很是好的方式,但它不能導出存儲過程。對象

若是你的表是空的, 從未添加過數據那麼使用dmp方式導出時,這種表就會包錯,不會導出,解決辦法有:it

11G中有個新特性,當表無數據時,不分配segment,以節省空間io

  解決方法:table

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

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

  二、設置deferred_segment_creation 參數

show parameter deferred_segment_creation 

NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
deferred_segment_creation            boolean     TRUE 
SQL> alter system set deferred_segment_creation=false; 

系統已更改。 

SQL> show parameter deferred_segment_creation 

NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
deferred_segment_creation            boolean     FALSE

 

  該參數值默認是TRUE,當改成FALSE時,不管是空表仍是非空表,都分配segment。

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

搞了我很久,最後查到這個方法。

先查詢一下當前用戶下的全部空表

select table_name from user_tables where NUM_ROWS=0;

用如下這句查找空表

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0

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

'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table AQ$_AQ$_MEM_MC_H allocate extent;
alter table AQ$_AQ$_MEM_MC_G allocate extent;
alter table AQ$_AQ$_MEM_MC_I allocate extent;
alter table AQ$_AQ_PROP_TABLE_T allocate extent;
alter table AQ$_AQ_PROP_TABLE_H allocate extent;
alter table AQ$_AQ_PROP_TABLE_G allocate extent;
alter table AQ$_AQ_PROP_TABLE_I allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_T allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_H allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_G allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent;

'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table AQ$_SYS$SERVICE_METRICS_TAB_T allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_H allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_G allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_I allocate extent;

而後再執行

exp 用戶名/密碼@數據庫名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log

  成功!

相關文章
相關標籤/搜索