Oracle的Export用法


Oracle 的 Export 命令用於導出數據庫信息,既可以導出表結構,也可以導出數據,表空間,或者按用戶導出等等。按照通常的說法,該命令主要是用於數據庫的遷移或者備份的。下面就介紹一下該命令的部分參數。 

1. exp命令介紹 
export操作需要執行的命令是exp。exp導出數據的一個優點就是快,但導出的結果文件均為二進制文件,而且要求不能手動修改。 
exp在設定執行參數的值的時候,支持的格式為 EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN), 
例如: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR) 

2. 參數說明 
USERID: 用戶名/密碼@連接的數據庫。該參數必須為 exp 命令的第一個參數。 (如果是本地數據庫的話,此處只需指定“用戶名/密碼”)

BUFFER: 數據緩沖區大小。該參數指定查詢數據庫記錄時的緩沖區大小,單位為 byte,如果該參數設為0,那么獲取數據庫記錄時每次讀取一行。該參數需要配合參數direct=N 來使用。 

FILE: 輸出文件。導出的目標文件名,如果不設定該參數的話,命令會采用默認文件名——EXPDAT.DMP 

TABLES: 表名列表。需要導出的表名,可以是一個,也可以是多個。單個表名格式為:tables=test_tab, 多個表名格式:tables=(test_tab_1,test_tab_2) 。提示:在linux 、unix 環境下多個表名時用到的括號需要轉義,如下tables=\(test_tab_1,test_tab_2\) 。 

COMPRESS:  導入到一個區。這個參數是最容易讓人誤解的了,很容易理解簡單壓縮的意思。接下來我需要引用一段別人文章中的描述來解釋了。 事實上,COMPRESS 是改變STORAGE 參數INITIAL 的值。比如:CREATE TABLE .... STORAGE( INITIAL 10K NEXT 10K..) 現在數據已經擴展到100 個EXTENT, 如果采用COMPRESS=Y 來EXPORT 數據,則產生的語句時 STORAGE( INITIAL 1000K NEXT 10K) ; 我們可以看到NEXT 值並沒有改變,而INITIAL 是所有EXTENT 的總和。所以會出現如下情況,表A 有4 個100M 的EXTENT, 執行DELETE FROM A ,然后再用COMPRESS=Y 導出數據,產生的CREATE TABLE 語句將有400M 的INITIAL EXTENT 。即使這是TABLE 中已經沒有數據!!這是的DUMP 文件即使很小,但是在IMPORT 時就會產生一個巨大的TABLE. 另外,也可能會超過DATAFILE 的大小。比如,有4 個50M 的數據文件,其中表A 有15 個10M 的EXTENT, 如果采用COMPRESS=Y 的方式導出數據,將會有INITIAL=150M 那么在重新導入時,不能分配一個150M 的EXTENT ,因為單個EXTENT 不能跨多個文件。 

RECORDLENGTH: IO記錄的長度。和DIRECT=Y配合使用的是RECORDLENGTH參數,它定義了Export I/O緩沖的大小,作用類似於常規路徑導出使用的BUFFER 參數。建議設置RECORDLENGTH 參數為最大I/O 緩沖,即65535(64kb) 。 

INDEXES: 導出索引。導入過程中建立用戶定義的索引,特別是表上有多個索引或者數據表特別龐大時,需要耗費大量時間。某些情況下,需要以最快的時間導入數據,而索引允許后建,我們就可以使用 INDEXES=N 只導入數據不創建索引,從而加快導入速度。 

DIRECT: 直接路徑。該參數設定為Y時,oracle 將采用直接讀取數據庫存儲文件的方式獲取數據,而不再通過查詢數據庫的方式,省去了執行 sql 的時間,提高了導出速度。 

LOG: 屏幕輸出的日志文件。 

ROWS: 導出數據行。默認為Y,導出表中數據。設定N,則只會導出表結構。 

CONSISTENT: 交叉表的一致性。這個參數是指定在數據導出過程中,是否維持數據庫表一致性。默認為N ,如果設定為Y 的話,在導出過程中外部系統同樣可以查詢數據庫相關表,並且獲取到一致性的數據,在導出之前更新或者修改的數據不會被外部系統感知。這樣也就需要占用數據庫的回滾段。如果主機資源緊張,可以將參數設定為N ,這樣既可以少占用回滾段資源,更主要的是這樣導出速度也會提升。 

FILESIZE: 每個轉儲文件的最大大小。單位為bytes, 設定了該參數后,當導出的數據文件超過最大值時,會重新寫入到新文件中,以此類推。但是每次寫入新文件的時候,命令會轉為交互狀態,需要用戶數據新的文件名。 

QUERY: 用戶導出表的子集的select 子句。在只希望導出某表的一部分符合條件的數據時,這個參數就能派上用場了。整個參數需要用 ” ” 括起來。這個參數通過輸入where 條件可以只導出預期的數據。如果是導出針對的是多個表,那么在輸入where 條件時需要保證該子句對導出的任何一張表都是有效的。 提示:此處需注意query關鍵字在windows和linux平台下的處理不一樣,下面例子中會提到。

CONSTRAINTS:  導出約束條件。是否導出表中已有的constraint。 

GRANTS: 是否導出授權信息。 

STATISTICS: 分析對象 。指定導出過程中是否統計導出信息。選項包括: NONE , 

COMPUTE,ESTIMATE。習慣上把它設定為 NONE, 這樣可以提高導出速度。 


3. 舉例 
1) 准備用於測試的表emp_exp_imp_1,emp_exp_imp_2

SQL> create table emp_exp_imp_1 as select * from emp;

Table created.

SQL> create table emp_exp_imp_2 as select * from emp;

Table created.

2) exp測試

把scott用戶下emp_exp_imp_1表,emp_exp_imp_2表中empno>7600的記錄導出。
[oracle@toughhou work]$
exp scott/scott file=/home/oracle/work/emp_exp_imp.dmp buffer=100000 tables=\(emp_exp_imp_1,emp_exp_imp_2\) compress=N indexes=N direct=N rows=Y grants=Y consistent=N constraints=Y log=/home/oracle/work/emp_exp_imp.log  query="where EMPNO>7600"

LRM-00112: multiple values not allowed for parameter 'query'

EXP-00019: failed to process parameters, type 'EXP HELP=Y' for help
EXP-00000: Export terminated unsuccessfully

導出錯誤,原因是:query關鍵字賦值時,Windows平台和Unix/Linux平台處理有差異。此處http://www.anysql.net/oracle/exp_param_query.html有詳細說明。

在Windows下, 如何指定query參數:
exp ... query='where deptno=10'
exp ... query='where deptno=''10'''
exp ... query='where deptno"<"10'

在Solaris(C shell)下, 如何指定query參數:
exp ..... query=\"where col1 \< 1000\"
exp ..... query=\"where col1 \< '1000'\"

注意標紅地方:Windows平台和Unix/Linux平台處理情況不一樣。
[oracle@toughhou work]$ exp scott/scott file=/home/oracle/work/emp_exp_imp.dmp buffer=100000 tables=\(emp_exp_imp_1,emp_exp_imp_2\) compress=N indexes=N direct=N rows=Y grants=Y consistent=N constraints=Y log=/home/oracle/work/emp_exp_imp.log  query=\"where EMPNO \> 7600\"

Export: Release 10.2.0.1.0 - Production on Wed Oct 9 00:29:57 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses WE8ISO8859P1 character set (possible charset conversion)
Note: indexes on tables will not be exported

About to export specified tables via Conventional Path ...
. . exporting table                  EMP_EXP_IMP_1         10 rows exported
. . exporting table                  EMP_EXP_IMP_2         10 rows exported
Export terminated successfully without warnings.

此時可以看到成功導出。

 

 


免責聲明!

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



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