日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

oracle 数据库导入导出文章

發(fā)布時(shí)間:2024/3/13 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 数据库导入导出文章 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原文出自: http://www.cnblogs.com/fjfzhkb/archive/2007/09/03/879807.html

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客戶端,并建立了連接
?(通過(guò)Net Configuration Assistant添加正確的服務(wù)命名,其實(shí)你可以想成是客戶端與服務(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è)文件是被包裝后的類文件。
?SQLPLUS.EXE調(diào)用EXP.EXE、IMP.EXE他們所包裹的類,完成導(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)出,用戶名system 密碼manager 導(dǎo)出到D:\daochu.dmp中
?? exp system/manager@TEST file=d:\daochu.dmp full=y
?2 將數(shù)據(jù)庫(kù)中system用戶與sys用戶的表導(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)前用戶的的數(shù)據(jù),當(dāng)前用戶如果有DBA的權(quán)限,則導(dǎo)出所有數(shù)據(jù)!

同名用戶之間的數(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)出,用戶名system 密碼manager 導(dǎo)出到D:daochu.dmp中

?? exp system/manager@TEST file=d:daochu.dmp full=y

2 將數(shù)據(jù)庫(kù)中system用戶與sys用戶的表導(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)槟愕挠脩艨赡茉谑跈?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”,回車,進(jìn)入命令行窗口。

在窗口中,輸入:

exp mas/123456@mas

系統(tǒng)提示:輸入數(shù)組提取緩沖區(qū)大小: 4096 >

可以直接回車;

系統(tǒng)提示:導(dǎo)出文件: EXPDAT.DMP>

此處輸入導(dǎo)出文件的位置,其路徑必須存在,Oracle在這里不會(huì)自動(dòng)建立路徑,但可以建立文件名。備份文件以dmp作為后綴。

輸入內(nèi)容如:e:\work\mas_db_090925v1.dmp 回車

系統(tǒng)提示: (1)E(完整的數(shù)據(jù)庫(kù)),(2)U(用戶) 或 (3)T(表): (2)U > u

此處可以輸入u,也可以直接回車,因?yàn)橄到y(tǒng)此時(shí)默認(rèn)的是U

系統(tǒng)提示:導(dǎo)出權(quán)限(yes/no):yes>回車

系統(tǒng)提示:導(dǎo)出表數(shù)據(jù)(yes/no):yes>回車

系統(tǒng)提示:壓縮區(qū)(yes/no):yes>回車

系統(tǒng)提示:要導(dǎo)出的用戶: (RETURN 以退出) > mas

系統(tǒng)提示:要導(dǎo)出的用戶: (RETURN 以退出) > 回車

此時(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 命令和您的用戶名/口令

? 后接用戶名/口令的命令:

??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?? 用戶名/口令?????????? FULL???????? 導(dǎo)入整個(gè)文件 (N)

? BUFFER?? 數(shù)據(jù)緩沖區(qū)大小???????? FROMUSER???? 所有人用戶名列表

? FILE???? 輸入文件 (EXPDAT.DMP)??? TOUSER?????? 用戶名列表

? SHOW???? 只列出文件內(nèi)容 (N) TABLES????? 表名列表

? IGNORE?? 忽略創(chuàng)建錯(cuò)誤 (N)??? RECORDLENGTH? IO 記錄的長(zhǎng)度

? GRANTS? 導(dǎo)入權(quán)限 (Y)?????????? INCTYPE????? 增量導(dǎo)入類型

? 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ò)指定類型 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ù)的用戶

==============================================

同樣可以通過(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 命令和用戶名/口令,您可以

? 后接用戶名/口令的命令:

?

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?? 用戶名/口令?????????? FULL???????? 導(dǎo)出整個(gè)文件 (N)

? BUFFER?? 數(shù)據(jù)緩沖區(qū)大小???????? OWNER???? 所有者用戶名列表

? FILE?????? 輸出文件 (EXPDAT.DMP)? TABLES?????? 表名稱列表

? COMPRESS?? 導(dǎo)入到一個(gè)區(qū) (Y) RECORDLENGTH IO 記錄的長(zhǎng)度

? GRANTS? 導(dǎo)出權(quán)限 (Y)?????????? INCTYPE????? 增量導(dǎo)出類型

? 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ì)話快照的 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)出的模板名稱

?

三、使用示例
3.1 數(shù)據(jù)導(dǎo)出:

?1 將數(shù)據(jù)庫(kù)SampleDB完全導(dǎo)出,用戶名system 密碼manager 導(dǎo)出到E:\SampleDB.dmp中

?? exp system/manager@TestDB file=E:\sampleDB.dmp full=y

?2 將數(shù)據(jù)庫(kù)中system用戶與sys用戶的表導(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è)或一組指定用戶所屬的全部表、索引和其他對(duì)象

?imp system/manager file=seapark log=seapark fromuser=seapark imp

?system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)

5. 將一個(gè)用戶所屬的數(shù)據(jù)導(dǎo)入另一個(gè)用戶

?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名稱和LOG名稱,包括文件名和目錄,例子見(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用戶來(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í)使用依賴性檢查。

?5、TEMPLATE - 用于支持iAS。

?6、TABLESPACES - 設(shè)置表空間導(dǎo)出模式。個(gè)人覺(jué)得對(duì)于一般用戶而言,這個(gè)才是新增參數(shù)中最實(shí)用的一個(gè),可以讓用戶在原來(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ù)中使用查詢條件建立臨時(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ò)程建索引的話不建議同時(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 能否連上。

附錄一:

?給用戶增加導(dǎo)入數(shù)據(jù)權(quán)限的操作

?第一, 啟動(dòng)sql*puls

?第二,以system/manager登陸

?第三,create user 用戶名 IDENTIFIED BY 密碼(如果已經(jīng)創(chuàng)建過(guò)用戶,這步可以省略)

?第四,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 用戶名字

?第五, 運(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的用戶可以不同)?????????

??????? 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é)為單位,缺省依賴操作系統(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:指明下載的用戶名

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è)用戶所有對(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ì)話的對(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é)為單位,缺省依賴操作系統(tǒng)

commit:上載數(shù)據(jù)緩沖區(qū)中的記錄上載后是否執(zhí)行提交

feeback:顯示處理記錄條數(shù),缺省為0,即不顯示

file:輸入文件,缺省為expdat.dmp

filesize:輸入文件大小,缺省為操作系統(tǒng)最大值

fromuser:指明來(lái)源用戶方

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:指明目的用戶方

導(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è)用戶所有對(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)始提供了稱為數(shù)據(jù)泵新的工具expdp/impdp,它為Oracle數(shù)據(jù)提供高速并行及大數(shù)據(jù)的遷移。

?

?imp/exp可以在客戶端調(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)出用戶的數(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)入該用戶數(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。