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