oracle 数据库导入导出文章
Oracle數(shù)據(jù)導(dǎo)入導(dǎo)出imp/exp
功能:Oracle數(shù)據(jù)導(dǎo)入導(dǎo)出imp/exp就相當(dāng)與oracle數(shù)據(jù)還原與備份。
?
大多情況都可以用Oracle數(shù)據(jù)導(dǎo)入導(dǎo)出完成數(shù)據(jù)的備份和還原(不會(huì)造成數(shù)據(jù)的丟失)。
?Oracle有個(gè)好處,雖然你的電腦不是服務(wù)器,但是你裝了oracle客戶(hù)端,并建立了連接
?(通過(guò)Net Configuration Assistant添加正確的服務(wù)命名,其實(shí)你可以想成是客戶(hù)端與服務(wù)器端 修了條路,然后數(shù)據(jù)就可以被拉過(guò)來(lái)了)
?這樣你可以把數(shù)據(jù)導(dǎo)出到本地,雖然可能服務(wù)器離你很遠(yuǎn)。
?你同樣可以把dmp文件從本地導(dǎo)入到遠(yuǎn)處的數(shù)據(jù)庫(kù)服務(wù)器中。
?利用這個(gè)功能你可以構(gòu)建倆個(gè)相同的數(shù)據(jù)庫(kù),一個(gè)用來(lái)測(cè)試,一個(gè)用來(lái)正式使用。
?
執(zhí)行環(huán)境:可以在SQLPLUS.EXE或者DOS(命令行)中執(zhí)行,
?DOS中可以執(zhí)行時(shí)由于 在oracle 8i 中? 安裝目錄\$ora10g\BIN被設(shè)置為全局路徑,
?該目錄下有EXP.EXE與IMP.EXE文件被用來(lái)執(zhí)行導(dǎo)入導(dǎo)出。
?oracle用java編寫(xiě),我想SQLPLUS.EXE、EXP.EXE、IMP.EXE這倆個(gè)文件是被包裝后的類(lèi)文件。
?SQLPLUS.EXE調(diào)用EXP.EXE、IMP.EXE他們所包裹的類(lèi),完成導(dǎo)入導(dǎo)出功能。
?
下面介紹的是導(dǎo)入導(dǎo)出的實(shí)例,向?qū)雽?dǎo)出看實(shí)例基本上就可以完成,因?yàn)閷?dǎo)入導(dǎo)出很簡(jiǎn)單。
數(shù)據(jù)導(dǎo)出:
?1 將數(shù)據(jù)庫(kù)TEST完全導(dǎo)出,用戶(hù)名system 密碼manager 導(dǎo)出到D:\daochu.dmp中
?? exp system/manager@TEST file=d:\daochu.dmp full=y
?2 將數(shù)據(jù)庫(kù)中system用戶(hù)與sys用戶(hù)的表導(dǎo)出
?? exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
?3 將數(shù)據(jù)庫(kù)中的表table1 、table2導(dǎo)出
?? exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
?4 將數(shù)據(jù)庫(kù)中的表table1中的字段filed1以"00"打頭的數(shù)據(jù)導(dǎo)出
?? exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like? '00%'\"
?
???? 上面是常用的導(dǎo)出,對(duì)于壓縮我不太在意,用winzip把dmp文件可以很好的壓縮。
???????????????????? 不過(guò)在上面命令后面 加上 compress=y? 就可以了
數(shù)據(jù)的導(dǎo)入
?1 將D:\daochu.dmp 中的數(shù)據(jù)導(dǎo)入 TEST數(shù)據(jù)庫(kù)中。
?? imp system/manager@TEST? file=d:\daochu.dmp
?? 上面可能有點(diǎn)問(wèn)題,因?yàn)橛械谋硪呀?jīng)存在,然后它就報(bào)錯(cuò),對(duì)該表就不進(jìn)行導(dǎo)入。
?? 在后面加上 ignore=y 就可以了。
?2 將d:\daochu.dmp中的表table1 導(dǎo)入
?imp system/manager@TEST? file=d:\daochu.dmp? tables=(table1)
?
?基本上上面的導(dǎo)入導(dǎo)出夠用了。不少情況我是將表徹底刪除,然后導(dǎo)入。
?
注意:
?你要有足夠的權(quán)限,權(quán)限不夠它會(huì)提示你。
?數(shù)據(jù)庫(kù)時(shí)可以連上的。可以用tnsping TEST 來(lái)獲得數(shù)據(jù)庫(kù)TEST能否連上。
?
數(shù)據(jù)導(dǎo)出:
exp hkb/hkb@boss_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;
導(dǎo)出注意事項(xiàng):導(dǎo)出的是當(dāng)前用戶(hù)的的數(shù)據(jù),當(dāng)前用戶(hù)如果有DBA的權(quán)限,則導(dǎo)出所有數(shù)據(jù)!
同名用戶(hù)之間的數(shù)據(jù)導(dǎo)入:
imp hkb/hkb@xe? file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y
不同名之間的數(shù)據(jù)導(dǎo)入:
imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp
log=c:\orabackup\hkbimp.log;
------------------------------------------------------------------------------------------------------------
百度文庫(kù)資料
Oracle數(shù)據(jù)庫(kù)文件資料收集:
一、Oracle數(shù)據(jù)導(dǎo)入導(dǎo)出imp/exp命令 10g以上expdp/impdp命令 詳細(xì)
A) 數(shù)據(jù)導(dǎo)出:1 將數(shù)據(jù)庫(kù)TEST完全導(dǎo)出,用戶(hù)名system 密碼manager 導(dǎo)出到D:daochu.dmp中
?? exp system/manager@TEST file=d:daochu.dmp full=y
2 將數(shù)據(jù)庫(kù)中system用戶(hù)與sys用戶(hù)的表導(dǎo)出
?? exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
3 將數(shù)據(jù)庫(kù)中的表inner_notify、notify_staff_relat導(dǎo)出
??? exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)
4 將數(shù)據(jù)庫(kù)中的表table1中的字段filed1以"00"打頭的數(shù)據(jù)導(dǎo)出
?? exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"
? 上面是常用的導(dǎo)出,對(duì)于壓縮,既用winzip把dmp文件可以很好的壓縮。
? 也可以在上面命令后面 加上 compress=y 來(lái)實(shí)現(xiàn)。
B) 數(shù)據(jù)的導(dǎo)入
1 將D:daochu.dmp 中的數(shù)據(jù)導(dǎo)入 TEST數(shù)據(jù)庫(kù)中。
?? imp system/manager@TEST? file=d:daochu.dmp
?? imp aichannel/aichannel@HUST full=y? file=d:datanewsmgnt.dmp ignore=y
?? 上面可能有點(diǎn)問(wèn)題,因?yàn)橛械谋硪呀?jīng)存在,然后它就報(bào)錯(cuò),對(duì)該表就不進(jìn)行導(dǎo)入。
?? 在后面加上 ignore=y 就可以了。
2 將d:daochu.dmp中的表table1 導(dǎo)入
imp system/manager@TEST? file=d:daochu.dmp? tables=(table1)
*注:要先是將表徹底刪除,然后導(dǎo)入。
操作者要有足夠的權(quán)限,權(quán)限不夠它會(huì)提示。
數(shù)據(jù)庫(kù)時(shí)可以連上的。可以用tnsping TEST 來(lái)獲得數(shù)據(jù)庫(kù)TEST能否連上
當(dāng)然,上面的方法在導(dǎo)出數(shù)據(jù)時(shí)可能會(huì)導(dǎo)出很大的包,那是因?yàn)槟愕挠脩?hù)可能在授權(quán)的時(shí)候授予了DBA的權(quán)限,所以可以采用下面方法來(lái)進(jìn)行數(shù)據(jù)庫(kù)備份:
二、數(shù)據(jù)庫(kù)備份
建議系統(tǒng)過(guò)渡后,每周進(jìn)行一次備份。或者在數(shù)據(jù)表發(fā)生重大改變前,對(duì)要改變的數(shù)據(jù)表進(jìn)行備份。
執(zhí)行以下步驟,進(jìn)行備份。
在命令行里,敲入“cmd”,回車(chē),進(jìn)入命令行窗口。
在窗口中,輸入:
exp mas/123456@mas
系統(tǒng)提示:輸入數(shù)組提取緩沖區(qū)大小: 4096 >
可以直接回車(chē);
系統(tǒng)提示:導(dǎo)出文件: EXPDAT.DMP>
此處輸入導(dǎo)出文件的位置,其路徑必須存在,Oracle在這里不會(huì)自動(dòng)建立路徑,但可以建立文件名。備份文件以dmp作為后綴。
輸入內(nèi)容如:e:\work\mas_db_090925v1.dmp 回車(chē)
系統(tǒng)提示: (1)E(完整的數(shù)據(jù)庫(kù)),(2)U(用戶(hù)) 或 (3)T(表): (2)U > u
此處可以輸入u,也可以直接回車(chē),因?yàn)橄到y(tǒng)此時(shí)默認(rèn)的是U
系統(tǒng)提示:導(dǎo)出權(quán)限(yes/no):yes>回車(chē)
系統(tǒng)提示:導(dǎo)出表數(shù)據(jù)(yes/no):yes>回車(chē)
系統(tǒng)提示:壓縮區(qū)(yes/no):yes>回車(chē)
系統(tǒng)提示:要導(dǎo)出的用戶(hù): (RETURN 以退出) > mas
系統(tǒng)提示:要導(dǎo)出的用戶(hù): (RETURN 以退出) > 回車(chē)
此時(shí)系統(tǒng)會(huì)自動(dòng)進(jìn)行備份
?
經(jīng)驗(yàn)總結(jié):
A.說(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ù)中。
B.語(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ù)名/口令的命令:
??A.導(dǎo)入:例程: 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ù)名/口令的命令:
?
B .導(dǎo)出例程: 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才可。我們可以使用下面方式連入EXP/IMP:
?exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n
?6、QUERY參數(shù)后面跟的是where條件,值得注意的是,整個(gè)where子句需要使用""括起來(lái),where子句的寫(xiě)法和SELECT中相同,如果是UNIX平臺(tái)所有"和'都需要使用\u26469屏蔽它們的特殊含義:
?exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"
?如果是windows平臺(tái),則使用下面的格式:
????? exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""
4.2、8i IMP常用選項(xiàng)
?1、FROMUSER和TOUSER,使用它們實(shí)現(xiàn)將數(shù)據(jù)從一個(gè)SCHEMA中導(dǎo)入到另外一個(gè)SCHEMA中。
?2、IGNORE、GRANTS和INDEXES,其中IGNORE參數(shù)將忽略表的存在,繼續(xù)導(dǎo)入,這個(gè)對(duì)于需要調(diào)整表的存儲(chǔ)參數(shù)時(shí)很有用,我們可以先根據(jù)實(shí)際情況用合理的存儲(chǔ)參數(shù)建好表,然后直接導(dǎo)入數(shù)據(jù)。而GRANTS和INDEXES則表示是否導(dǎo)入授權(quán)和索引,如果想使用新的存儲(chǔ)參數(shù)重建索引,或者為了加快到入速度,我們可以考慮將INDEXES設(shè)為N,而GRANTS一般都是Y。
?另外一個(gè)EXP/IMP都有的參數(shù)是PARFILE,它是用來(lái)定義EXP/IMP的參數(shù)文件,也就是說(shuō),上面的參數(shù)都可以寫(xiě)在一個(gè)參數(shù)文件中,但我們一般很少使用。
4.4、Oracle9i EXP功能描述
?Oracle9i EXP在原有的基礎(chǔ)上新增了部分新的參數(shù),按功能主要分為以下幾個(gè)部分:
?1、OBJECT_CONSISTENT - 用于設(shè)置EXP對(duì)象為只讀以保持對(duì)象的一致性。默認(rèn)是N。
?2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。
?3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空間分配而新增。
?4、TTS_FULL_CHECK - 用于在傳輸表空間時(shí)使用依賴(lài)性檢查。
?5、TEMPLATE - 用于支持iAS。
?6、TABLESPACES - 設(shè)置表空間導(dǎo)出模式。個(gè)人覺(jué)得對(duì)于一般用戶(hù)而言,這個(gè)才是新增參數(shù)中最實(shí)用的一個(gè),可以讓用戶(hù)在原來(lái)的FULL、OWNER、TABLES的基礎(chǔ)上多了一種選擇,使得EXP更加靈活。
?
五、不同版本的EXP/IMP問(wèn)題?
一般來(lái)說(shuō),從低版本導(dǎo)入到高版本問(wèn)題不大,麻煩的是將高版本的數(shù)據(jù)導(dǎo)入到低版本中,在Oracle9i之前,不同版本Oracle之間的EXP/IMP可以通過(guò)下面的方法來(lái)解決:
?1、在高版本數(shù)據(jù)庫(kù)上運(yùn)行底版本的catexp.sql;
?2、使用低版本的EXP來(lái)導(dǎo)出高版本的數(shù)據(jù);
?3、使用低版本的IMP將數(shù)據(jù)庫(kù)導(dǎo)入到底版本數(shù)據(jù)庫(kù)中;
?4、在高版本數(shù)據(jù)庫(kù)上重新運(yùn)行高版本的catexp.sql腳本。
?但在9i中,上面的方法并不能解決問(wèn)題。如果直接使用底版本EXP/IMP會(huì)出現(xiàn)如下錯(cuò)誤:
?EXP-00008: ORACLE error %lu encountered
?ORA-00904: invalid column name
?這已經(jīng)是一個(gè)公布的BUG,需要等到Oracle10.0才能解決,BUG號(hào)為2261,你可以到METALINK上去查看有關(guān)此BUG的詳細(xì)信息。
?BUG歸BUG,我們的工作還是要做,在沒(méi)有Oracle的支持之前,我們就自己解決。在Oracle9i中執(zhí)行下面的SQL重建exu81rls視圖即可。
?CREATE OR REPLACE view exu81rls
?(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)
?AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,
?decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')
?|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')
?|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')
?|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),
?r.check_opt, r.enable_flag,
?DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)
?from user$ u, obj$ o, rls$ r
?where u.user# = o.owner#
?and r.obj# = o.obj#
?and (uid = 0 or
?uid = o.owner# or
?exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')
?)
?/
?grant select on sys.exu81rls to public;
?/
六、其他問(wèn)題
本文只討論了Oracle8i和9i中的EXP/IMP的一些情況,對(duì)于之前的版本,在8.0.X中,除了QUERY參數(shù)不能用外,其它差別不大。針對(duì)沒(méi)有QUERY的情況,我們可以先在數(shù)據(jù)庫(kù)中使用查詢(xún)條件建立臨時(shí)中間表,然后使用EXP導(dǎo)出這個(gè)中間表即可。至于Oracle7因?yàn)槟壳笆褂玫娜溯^少,gototop不打算在此做詳細(xì)解釋了,如果讀者朋友有需求,你可以參考Metalink文檔:“Overview of Export and Import in Oracle7”(文檔號(hào):61949.1)。關(guān)于EXP/IMP的詳細(xì)參數(shù)信息你可以通過(guò)EXP/IMP HELP=Y來(lái)獲得。
?另外關(guān)于傳輸表空間的更多信息可以參考下面的Metelink文檔,本文不再詳述。
?[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.
?[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.
?在進(jìn)行并行EXP/IMP的時(shí)候,如果IMP過(guò)程建索引的話(huà)不建議同時(shí)運(yùn)行5個(gè)以上的IMP,如果你想加快速度,可以在IMP的時(shí)候不建索引,這樣只要內(nèi)存允許,可以多跑幾個(gè),然后是SQL腳本創(chuàng)建需要的索引。
?
注意:*
?操作者要有足夠的權(quán)限,權(quán)限不夠它會(huì)提示。
?數(shù)據(jù)庫(kù)是否可以連上, 可以用tnsping TestDB? 來(lái)獲得數(shù)據(jù)庫(kù) TestDB 能否連上。
附錄一:
?給用戶(hù)增加導(dǎo)入數(shù)據(jù)權(quán)限的操作
?第一, 啟動(dòng)sql*puls
?第二,以system/manager登陸
?第三,create user 用戶(hù)名 IDENTIFIED BY 密碼(如果已經(jīng)創(chuàng)建過(guò)用戶(hù),這步可以省略)
?第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
?? ????DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
????? ?DBA,CONNECT,RESOURCE,CREATE SESSION? TO 用戶(hù)名字
?第五, 運(yùn)行-cmd-進(jìn)入dmp文件所在的目錄,
????? imp userid=system/manager full=y file=*.dmp
????? 或者 imp userid=system/manager full=y file=filename.dmp
附錄二:
?Oracle 不允許直接改變表的擁有者, 利用Export/Import可以達(dá)到這一目的.
? 先建立import9.par,
? 然后,使用時(shí)命令如下:imp parfile=/filepath/import9.par
? 例 import9.par 內(nèi)容如下:
??????? FROMUSER=TGPMS??????
??????? TOUSER=TGPMS2????
(注:把表的擁有者由FROMUSER改為T(mén)OUSER,FROMUSER和TOUSER的用戶(hù)可以不同)?????????
??????? ROWS=Y
??????? INDEXES=Y
??????? GRANTS=Y
??????? CONSTRAINTS=Y
??????? BUFFER=409600
??????? file==/backup/ctgpc_20030623.dmp
??????? log==/backup/import_20030623.log
?
?
?
?
?
?
?
?
?
?
exp 命令的參數(shù):
將數(shù)據(jù)庫(kù)內(nèi)的各對(duì)象以二進(jìn)制方式下載成dmp文件,方便數(shù)據(jù)遷移。
buffer:下載數(shù)據(jù)緩沖區(qū),以字節(jié)為單位,缺省依賴(lài)操作系統(tǒng)
consistent:下載期間所涉及的數(shù)據(jù)保持read only,缺省為n
direct:使用直通方式 ,缺省為n
feeback:顯示處理記錄條數(shù),缺省為0,即不顯示
file:輸出文件,缺省為expdat.dmp
filesize:輸出文件大小,缺省為操作系統(tǒng)最大值
indexes:是否下載索引,缺省為n,這是指索引的定義而非數(shù)據(jù),exp不下載索引數(shù)據(jù)
log:log文件,缺省為無(wú),在標(biāo)準(zhǔn)輸出顯示
owner:指明下載的用戶(hù)名
query:選擇記錄的一個(gè)子集
rows:是否下載表記錄
tables:輸出的表名列表
導(dǎo)出整個(gè)實(shí)例
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y
user應(yīng)具有dba權(quán)限
導(dǎo)出某個(gè)用戶(hù)所有對(duì)象
exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
導(dǎo)出一張或幾張表
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000
導(dǎo)出某張表的部分?jǐn)?shù)據(jù)
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=\”where col1=\’…\’ and col2 \<…\”
不可用于嵌套表
以多個(gè)固定大小文件方式導(dǎo)出某張表
exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000
這種做法通常用在:表數(shù)據(jù)量較大,單個(gè)dump文件可能會(huì)超出文件系統(tǒng)的限制
直通路徑方式
direct=y,取代buffer選項(xiàng),query選項(xiàng)不可用
有利于提高下載速度
consistent選項(xiàng)
自export啟動(dòng)后,consistent=y凍結(jié)來(lái)自其它會(huì)話(huà)的對(duì)export操作的數(shù)據(jù)對(duì)象的更新,這樣可以保證dump結(jié)果的一致性。但這個(gè)過(guò)程不能太長(zhǎng),以免回滾段和聯(lián)機(jī)日志消耗完
imp
將exp下載的dmp文件上載到數(shù)據(jù)庫(kù)內(nèi)。
buffer:上載數(shù)據(jù)緩沖區(qū),以字節(jié)為單位,缺省依賴(lài)操作系統(tǒng)
commit:上載數(shù)據(jù)緩沖區(qū)中的記錄上載后是否執(zhí)行提交
feeback:顯示處理記錄條數(shù),缺省為0,即不顯示
file:輸入文件,缺省為expdat.dmp
filesize:輸入文件大小,缺省為操作系統(tǒng)最大值
fromuser:指明來(lái)源用戶(hù)方
ignore:是否忽略對(duì)象創(chuàng)建錯(cuò)誤,缺省為n,在上載前對(duì)象已被建立往往是一個(gè)正常現(xiàn)象,所以此選項(xiàng)建議設(shè)為y
indexes:是否上載索引,缺省為n,這是指索引的定義而非數(shù)據(jù),如果上載時(shí)索引已建立,此選項(xiàng)即使為n也無(wú)效,imp自動(dòng)更新索引數(shù)據(jù)
log:log文件,缺省為無(wú),在標(biāo)準(zhǔn)輸出顯示
rows:是否上載表記錄
tables:輸入的表名列表
touser:指明目的用戶(hù)方
導(dǎo)入整個(gè)實(shí)例
imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000
導(dǎo)入某個(gè)用戶(hù)所有對(duì)象
imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
導(dǎo)入一張或幾張表
imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
以多個(gè)固定大小文件方式導(dǎo)入某張表
imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,…\) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000
?
exp/imp已經(jīng)很好用了,但是唯一的確定是速度太慢,如果1張表的數(shù)據(jù)有個(gè)百千萬(wàn)的,常常導(dǎo)入導(dǎo)出就長(zhǎng)時(shí)間停在這個(gè)表這,但是從Oracle 10g開(kāi)始提供了稱(chēng)為數(shù)據(jù)泵新的工具expdp/impdp,它為Oracle數(shù)據(jù)提供高速并行及大數(shù)據(jù)的遷移。
?
?imp/exp可以在客戶(hù)端調(diào)用,但是expdp/impdp只能在服務(wù)端,因?yàn)樵谑褂胑xpdp/impdp以前需要在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)Directory
create directory dump_test as '/u01/oracle10g';
grant read, write on directory dump_test to piner
然后就可以開(kāi)始導(dǎo)入導(dǎo)出
expdp piner/piner directory=dump_test dumpfile=user.dmp? 導(dǎo)出用戶(hù)的數(shù)據(jù)
expdp piner/piner directory=dump_test dumpfile=table.dmp tables=test1,test2 導(dǎo)出表數(shù)據(jù)
impdp piner/piner directory=dump_test dumpfile=user.dmp 導(dǎo)入該用戶(hù)數(shù)據(jù)
impdp piner/piner directory=dump_test dumpfile=table.dmp? 導(dǎo)出表數(shù)據(jù)
my test:
SQL> create directory dump_test as '/home/oracle/oracle10g';
Directory created.
SQL> drop directory dump_test;
Directory dropped.
SQL>? create directory dump_test as '/u01/oracledmp';
Directory created.
--接下來(lái)記得創(chuàng)建directory在系統(tǒng)上,并賦好權(quán)限
[oracle@localhost ~]$ expdp anlen/anlen123 directory=dumpdir dumpfile=anlen.dmp
Export: Release 10.2.0.4.0 - Production on Saturday, 12 June, 2010 14:43:20
Copyright (c) 2003, 2007, Oracle.? All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "ANLEN"."SYS_EXPORT_SCHEMA_01":? anlen/******** directory=dumpdir dumpfile=anlen.dmp
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 1.125 MB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
. . exported "ANLEN"."DBA_01"??????????????????????????? 571.2 KB?? 20000 rows
. . exported "ANLEN"."DBA_02"??????????????????????????? 278.4 KB?? 20000 rows
Master table "ANLEN"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ANLEN.SYS_EXPORT_SCHEMA_01 is:
? /u01/dmpdir/anlen.dmp
Job "ANLEN"."SYS_EXPORT_SCHEMA_01" successfully completed at 14:43:41
?
總結(jié)
以上是生活随笔為你收集整理的oracle 数据库导入导出文章的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C语言经典案例】用*号输出字母C的图案
- 下一篇: HWDB1.1数据集 | 手写汉字数据集