oracle中的數據導入和導出
本文對Oracle數據的導入導出 imp ,exp 兩個命令進行了介紹, 并對其相應的參數進行了說明,然后通過一些示例進行演練,加深理解.文章最后對運用這兩個命令可能出現的問題(如權限不夠,不同oracle版本)進行了探討,并提出了相應的解決方案;
本文部分內容摘錄自網絡,感謝網友的經驗總結;
一.說明
?? oracle 的exp/imp命令用于實現對數據庫的導出/導入操作;
?? exp命令用于把數據從遠程數據庫服務器導出至本地,生成dmp文件;
?? imp命令用于把本地的數據庫dmp文件從本地導入到遠程的Oracle數據庫中。
二.語法
可以通過在命令行輸入 imp help=y 獲取imp的語法信息:
=============================================================================
? C:\Documents and Settings\auduser>imp help=y
? Import: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:21:57 2008
? (c) Copyright 2001 Oracle Corporation.? All rights reserved.
? 可以通過輸入 IMP 命令和您的用戶名/口令
? 后接用戶名/口令的命令:
? 例程: IMP SCOTT/TIGER
? 或者, 可以通過輸入 IMP 命令和各種參數來控制“導入”
? 按照不同參數。要指定參數,您可以使用關鍵字:
? 格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
? 例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
? 或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表
? USERID 必須是命令行中的第一個參數。
? 關鍵字? 說明(默認)??????? 關鍵字????? 說明(默認)
? --------------------------------------------------------------------------
? USERID?? 用戶名/口令?????????? FULL???????? 導入整個文件 (N)
? BUFFER?? 數據緩沖區大小???????? FROMUSER???? 所有人用戶名列表
? FILE???? 輸入文件 (EXPDAT.DMP)??? TOUSER?????? 用戶名列表
? SHOW???? 只列出文件內容 (N) TABLES????? 表名列表
? IGNORE?? 忽略創建錯誤 (N)??? RECORDLENGTH? IO 記錄的長度
? GRANTS? 導入權限 (Y)?????????? INCTYPE????? 增量導入類型
? INDEXES 導入索引 (Y)????????? COMMIT?????? 提交數組插入 (N)
? ROWS??? 導入數據行 (Y)??????? PARFILE????? 參數文件名
? LOG????? 屏幕輸出的日志文件?? CONSTRAINTS? 導入限制 (Y)
? DESTROY??????????????? 覆蓋表空間數據文件 (N)
? INDEXFILE????????????? 將表/索引信息寫入指定的文件
? SKIP_UNUSABLE_INDEXES? 跳過不可用索引的維護 (N)
? FEEDBACK?????????????? 每 x 行顯示進度 (0)
? TOID_NOVALIDATE??????? 跳過指定類型 ID 的驗證
? FILESIZE?????????????? 每個轉儲文件的最大大小
? STATISTICS???????????? 始終導入預計算的統計信息
? RESUMABLE????????????? 遇到與空格有關的錯誤時掛起 (N)
? RESUMABLE_NAME???????? 用來標識可恢復語句的文本字符串
? RESUMABLE_TIMEOUT????? RESUMABLE 的等待時間
? COMPILE??????????????? 編譯過程, 程序包和函數 (Y)
? 下列關鍵字僅用于可傳輸的表空間
? TRANSPORT_TABLESPACE 導入可傳輸的表空間元數據 (N)
? TABLESPACES 將要傳輸到數據庫的表空間
? DATAFILES 將要傳輸到數據庫的數據文件
? TTS_OWNERS 擁有可傳輸表空間集中數據的用戶
==============================================
同樣可以通過輸入 exp help=y 獲取exp的語法信息
? Microsoft Windows XP [版本 5.1.2600]
? (C) 版權所有 1985-2001 Microsoft Corp.
? C:\Documents and Settings\auduser>exp help=y
? Export: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:26:34 2008
? (c) Copyright 2001 Oracle Corporation.? All rights reserved.
?
? 通過輸入 EXP 命令和用戶名/口令,您可以
? 后接用戶名/口令的命令:
? 例程: EXP SCOTT/TIGER
? 或者,您也可以通過輸入跟有各種參數的 EXP 命令來控制“導出”
? 按照不同參數。要指定參數,您可以使用關鍵字:
? 格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
? 例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
? 或 TABLES=(T1: P1,T1: P2),如果 T1 是分區表
? USERID 必須是命令行中的第一個參數。
? 關鍵字? 說明(默認)??????? 關鍵字????? 說明(默認)
? --------------------------------------------------------------------------
? USERID?? 用戶名/口令?????????? FULL???????? 導出整個文件 (N)
? BUFFER?? 數據緩沖區大小???????? OWNER???? 所有者用戶名列表
? FILE?????? 輸出文件 (EXPDAT.DMP)? TABLES?????? 表名稱列表
? COMPRESS?? 導入到一個區 (Y) RECORDLENGTH IO 記錄的長度
? GRANTS? 導出權限 (Y)?????????? INCTYPE????? 增量導出類型
? INDEXES??? 導出索引 (Y)???????? RECORD?????? 跟蹤增量導出 (Y)
? DIRECT???? 直接路徑 (N)??????????? TRIGGERS???? 導出觸發器 (Y)
? LOG??????? 屏幕輸出的日志文件? STATISTICS?? 分析對象 (ESTIMATE)
? ROWS??? 導出數據行 (Y)??????? PARFILE????? 參數文件名
? CONSISTENT 交叉表一致性??? CONSTRAINTS? 導出約束條件 (Y)
? FEEDBACK???????????? 每 x 行顯示進度 (0)
? FILESIZE???????????? 每個轉儲文件的最大大小
? FLASHBACK_SCN??????? 用于回調會話快照的 SCN
? FLASHBACK_TIME?????? 用來獲得最接近于指定時間的 SCN 的時間
? QUERY??????????????? 用來導出表的子集的選擇子句
? RESUMABLE??????????? 遇到與空格有關的錯誤時掛起 (N)
? RESUMABLE_NAME?????? 用來標識可恢復語句的文本字符串
? RESUMABLE_TIMEOUT??? RESUMABLE 的等待時間
? TTS_FULL_CHECK?????? 對 TTS 執行完全或部分相關性檢查
? TABLESPACES????????? 要導出的表空間列表
? TRANSPORT_TABLESPACE 導出可傳輸的表空間元數據 (N)
? TEMPLATE 調用 iAS 模式導出的模板名稱
三.使用示例
3.1 數據導出:
?1 將數據庫SampleDB完全導出,用戶名system 密碼manager 導出到E:\SampleDB.dmp中
?? exp system/manager@TestDB file=E:\sampleDB.dmp full=y
?2 將數據庫中system用戶與sys用戶的表導出
?? exp system/manager@TestDB file=E:\sampleDB.dmp? owner=(system,sys)
?3 將數據庫中的表 TableA,TableB 導出
??? exp system/manager@TestDB? file=E:\sampleDB.dmp? tables=(TableA,TableB)
?4 將數據庫中的表tableA中的字段filed1 值為 "王五" 的數據導出
?? exp system/manager@TestDB? file=E:\sampleDB.dmp? tables=(tableA)? query=' where filed1='王五'
?
?? 如果想對dmp文件進行壓縮,可以在上面命令后面 加上 compress=y 來實現。
3.2 數據的導入
?1 將備份數據庫文件中的數據導入指定的數據庫SampleDB 中,如果 SampleDB 已存在該表,則不再導入;
?? imp system/manager@TEST? file=E:\sampleDB.dmp? full=y? ignore=y
?
?2 將d:\daochu.dmp中的表table1 導入
?imp system/manager@TEST? file=E:\sampleDB.dmp? tables=(table1)
3. 導入一個完整數據庫
?imp system/manager file=bible_db log=dible_db full=y ignore=y
4. 導入一個或一組指定用戶所屬的全部表、索引和其他對象
?imp system/manager file=seapark log=seapark fromuser=seapark imp
?system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)
5. 將一個用戶所屬的數據導入另一個用戶
?imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
?imp system/manager file=tank log=tank fromuser=(seapark,amy)
?touser=(seapark1, amy1)
6. 導入一個表
?imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)
7. 從多個文件導入
?imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G full=y
8. 使用參數文件
?imp system/manager parfile=bible_tables.par
bible_tables.par參數文件:
?#Import the sample tables used for the Oracle8i Database Administrator's
Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import
參數文件示例見附錄
9. 增量導入
?imp system./manager inctype= RECTORE FULL=Y? FILE=A
?
不少情況下要先將表徹底刪除,然后導入。
?
?
四.參數說明
4.1、8i EXP常用選項
?1、FULL,這個用于導出整個數據庫,在ROWS=N一起使用時,可以導出整個數據庫的結構。例如:
?exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y
?2、BUFFER和FEEDBACK,在導出比較多的數據時,我會考慮設置這兩個參數。例如:
?exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT
?3、FILL和LOG,這兩個參數分別指定備份的DMP名稱和LOG名稱,包括文件名和目錄,例子見上面。
?需要說明的是,EXP可以直接備份到磁帶中,即使用FILE=/dev/rmt0(磁帶設備名),但是一般我們都不這么做,原因有二:一、這樣做的速度會慢很多,二、現在一般都是使用磁帶庫的,不建議直接對磁帶進行操作。至于沒有使用磁帶庫的朋友可以考慮和UNIX的TAR結合使用。
?如果你真想使用EXP直接到磁帶,你可以參考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文檔號:30428.1),該文中有詳細解釋。
?4、 COMPRESS參數將在導出的同時合并碎塊,盡量把數據壓縮到initial的EXTENT里,默認是N,一般建議使用。DIRECT參數將告訴 EXP直接讀取數據,而不像傳統的EXP那樣,使用SELECT來讀取表中的數據,這樣就減少了SQL語句處理過程。一般也建議使用。不過有些情況下 DIRECT參數是無法使用的。
?5、如何使用SYSDBA執行EXP/IMP?
?這是一個很現實的問題,有時候我們需要使用SYSDBA來執行EXP/IMP,如進行傳輸表空間的EXP/IMP,以及在9i下用SYS用戶來執行EXP/IMP時,都需要使用SYSDBA才可。
posted on 2009-04-15 20:47 tobyxiong 閱讀(618) 評論(0) 編輯 收藏 所屬分類: DATABASES