oracle impdp/expdp 使用詳解
今天在項(xiàng)目中遇到了如下情況:備份恢復(fù)一張數(shù)據(jù)量比較大(大約200w條記錄算柳,約119M大泻浪浴)的表時(shí)像寒,使用慣用的exp/imp工具進(jìn)行操作時(shí)疼邀,工具直接卡死(或是操作時(shí)間過長(zhǎng))丁鹉。于是想起之前使用過的impdp/expdp數(shù)據(jù)泵工具陕凹,其優(yōu)點(diǎn)在于大數(shù)據(jù)量導(dǎo)入導(dǎo)出時(shí)高效快捷。使用數(shù)據(jù)泵后鳄炉,漫長(zhǎng)的大表導(dǎo)出過程變得快速高效杜耙,想到自己好久沒有進(jìn)行技術(shù)總結(jié),故在此將impdp/expdp的使用總結(jié)一下拂盯,以便之后查閱佑女。
相關(guān)參數(shù)
- DIRECTORY
創(chuàng)建語句:
create or replace directory dmp as 'd:/dmp'
其中dmp為directory名稱,as后接directory路徑谈竿,需要在指定路徑下自行建立指定文件夾团驱。
建立directory所需權(quán)限:create any directory
- CONTENT
該選項(xiàng)用于指定要導(dǎo)出的內(nèi)容.默認(rèn)值為ALL
CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
當(dāng)設(shè)置CONTENT為ALL時(shí),將導(dǎo)出對(duì)象定義及其所有數(shù)據(jù).為DATA_ONLY時(shí),只導(dǎo)出對(duì)象數(shù)據(jù),為METADATA_ONLY時(shí),只導(dǎo)出對(duì)象定義
- DUMPFILE
用于指定轉(zhuǎn)儲(chǔ)文件的名稱,默認(rèn)名稱為expdat.dmp
DUMPFILE=[directory_object:]file_name [,….]
Directory_object用于指定目錄對(duì)象名,file_name用于指定轉(zhuǎn)儲(chǔ)文件名.需要注意,如果不指定directory_object,導(dǎo)出工具會(huì)自動(dòng)使用DIRECTORY選項(xiàng)指定的目錄對(duì)象
導(dǎo)出步驟
- 創(chuàng)建DIRECTORY
create directory dir_dp as 'D:/Oracle/dir_dp';
- 授權(quán)
Grant read,write on directory dir_name to user_name;
查看目錄及權(quán)限
SELECT privilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d
WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;
- 執(zhí)行導(dǎo)出
expdp zftang/zftang@fgisdb schemas=zftang directory=dir_dp dumpfile =expdp_test1.dmp logfile=expdp_test1.log;
備注:
- directory=dir_dp必須放在前面,如果將其放置最后空凸,會(huì)提示 ORA-39002: 操作無效
ORA-39070: 無法打開日志文件嚎花。
ORA-39087: 目錄名 DATA_PUMP_DIR無效- 在導(dǎo)出過程中,DATA DUMP 創(chuàng)建并使用了一個(gè)名為SYS_EXPORT_SCHEMA_01的對(duì)象呀洲,此對(duì)象就是DATA DUMP導(dǎo)出過程中所用的JOB名字紊选,如果在執(zhí)行這個(gè)命令時(shí)如果沒有指定導(dǎo)出的JOB名字那么就會(huì)產(chǎn)生一個(gè)默認(rèn)的JOB名字啼止,如果在導(dǎo)出過程中指定JOB名字就為以指定
名字出現(xiàn)
如下改成:expdp zftang/zftang@fgisdb schemas=schema_name directory=dir_name dumpfile =dmp_name.dmp
logfile=log_name.log,job_name=myjob_name;
- 導(dǎo)出語句后面不要有分號(hào),否則如上的導(dǎo)出語句中的job表名為‘my_job1;’兵罢,而不是my_job1献烦。因此導(dǎo)致expdp zftang/zftang attach=zftang.my_job1執(zhí)行該命令時(shí)一直提示找不到j(luò)ob表
數(shù)據(jù)泵導(dǎo)出模式
- 按表模式導(dǎo)出:
expdp zftang/zftang@fgisdb tables=zftang.b$i_exch_info,zftang.b$i_manhole_info dumpfile =expdp_test2.dmp logfile=expdp_test2.log directory=dir_dp job_name=my_job
- 按查詢條件導(dǎo)出:
expdp zftang/zftang@fgisdb tables=zftang.b$i_exch_info dumpfile =expdp_test3.dmp logfile=expdp_test3.log directory=dir_dp job_name=my_job query='"where rownum<11"'
- 按表空間導(dǎo)出:
Expdp zftang/zftang@fgisdb dumpfile=expdp_tablespace.dmp tablespaces=GCOMM.DBF logfile=expdp_tablespace.log directory=dir_dp job_name=my_job
- 導(dǎo)出方案:
Expdp zftang/zftang DIRECTORY=dir_dp DUMPFILE=schema.dmp SCHEMAS=zftang,gwm
- 導(dǎo)出整個(gè)數(shù)據(jù)庫:
expdp zftang/zftang@fgisdb dumpfile =full.dmp full=y logfile=full.log directory=dir_dp job_name=my_job
數(shù)據(jù)泵導(dǎo)入模式
- 按表導(dǎo)入:
p_street_area.dmp文件中的表,此文件是以gwm用戶按schemas=gwm導(dǎo)出的:
impdp gwm/gwm@fgisdb dumpfile =p_street_area.dmp logfile=imp_p_street_area.log directory=dir_dp tables=p_street_area job_name=my_job
- 按用戶導(dǎo)入(可以將用戶信息直接導(dǎo)入卖词,即如果用戶信息不存在的情況下也可以直接導(dǎo)入):
impdp gwm/gwm@fgisdb schemas=gwm dumpfile =expdp_test.dmp logfile=expdp_test.log directory=dir_dp job_name=my_job
- 不通過expdp的步驟生成dmp文件而直接導(dǎo)入的方法:
--從源數(shù)據(jù)庫中向目標(biāo)數(shù)據(jù)庫導(dǎo)入表p_street_area
impdp gwm/gwm directory=dir_dp NETWORK_LINK=igisdb tables=p_street_area logfile=p_street_area.log job_name=my_job
igisdb是目的數(shù)據(jù)庫與源數(shù)據(jù)的鏈接名巩那,dir_dp是目的數(shù)據(jù)庫上的目錄
- 更換表空間
采用remap_tablespace參數(shù)
--導(dǎo)出gwm用戶下的所有數(shù)據(jù)expdp system/orcl directory=data_pump_dir dumpfile=gwm.dmp SCHEMAS=gwm
注:
如果是用sys用戶導(dǎo)出的用戶數(shù)據(jù),包括用戶創(chuàng)建此蜈、授權(quán)部分即横,用自身用戶導(dǎo)出則不含這些內(nèi)容
--以下是將gwm用戶下的數(shù)據(jù)全部導(dǎo)入到表空間gcomm(原來為gmapdata表空間下)下:
impdp system/orcl directory=data_pump_dir dumpfile=gwm.dmp remap_tablespace=gmapdata:gcomm