title: Oracle系列之一:備份還原之:EXP把介、IMP和EXPDP勤讽、IMPDP
categories: Linux
tags:
- Oracle
timezone: Asia/Shanghai
date: 2019-02-01
環(huán)境
[root@rehl7501 oracle]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.5 (Maipo)
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
簡介
1、exp和imp是客戶端工具程序拗踢,它們既可以在客戶端使用脚牍,也可以在服務(wù)端使用。
2巢墅、expdp和impdp是服務(wù)端的工具程序诸狭,他們只能在oracle服務(wù)端使用,不能在客戶端使用砂缩。
3作谚、imp只適用于exp導(dǎo)出的文件,不適用于expdp導(dǎo)出文件庵芭;impdp只適用于expdp導(dǎo)出的文件妹懒,而不適用于exp導(dǎo)出文件。
- EXP\IMP方式在備份的時(shí)候如果備份文件已經(jīng)存在双吆,會直接覆蓋
- EXPDP\IMPDP數(shù)據(jù)泵方式如果備份文件已經(jīng)存在眨唬,會報(bào)錯
方法1:EXP\IMP方式備份和還原數(shù)據(jù)庫
1.1.EXP備份:傳統(tǒng)路徑導(dǎo)出
# 用戶模式:備份admin用戶的所有表
exp admin/xiaoliu@11.11.11.111/oracledb FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log OWNER=admin
# 表模式(只導(dǎo)出C_CONS, DATASOURCE兩個(gè)表數(shù)據(jù))
exp admin/xiaoliu@11.11.11.111/oracledb FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log TABLES=C_CONS, DATASOURCE
ROWS=N # 可以加此參數(shù)只導(dǎo)出數(shù)據(jù)庫結(jié)構(gòu)而不導(dǎo)出數(shù)據(jù)
1.2.EXP備份:直接路徑導(dǎo)出
# 用戶模式:備份admin用戶的所有表
exp admin/xiaoliu@11.11.11.111/oracledb FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log OWNER=admin \
recordlength=65535 direct=y buffer=104857600
# 表模式(只導(dǎo)出C_CONS, DATASOURCE兩個(gè)表數(shù)據(jù))
exp admin/xiaoliu@11.11.11.111/oracledb FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log TABLES=C_CONS, DATASOURCE \
recordlength=65535 direct=y buffer=104857600
ROWS=N # 可以加此參數(shù)只導(dǎo)出數(shù)據(jù)庫結(jié)構(gòu)而不導(dǎo)出數(shù)據(jù)
1.3.傳統(tǒng)路徑導(dǎo)出和直接路徑導(dǎo)出對比
1.兩者的差異
a.傳統(tǒng)路徑模式,使用SQL SELECT語句抽取表數(shù)據(jù)好乐。數(shù)據(jù)從磁盤讀入到buffer cache緩沖區(qū)中匾竿,行被轉(zhuǎn)移到評估緩沖區(qū)。
在此之后根據(jù)SQL表達(dá)式蔚万,將記錄返回給導(dǎo)出客戶端岭妖,然后寫入到dump文件。b.直接導(dǎo)出模式,數(shù)據(jù)直接從磁盤中讀取到導(dǎo)出session的PGA中昵慌,行被直接轉(zhuǎn)移到導(dǎo)出session的私有緩沖區(qū)假夺,從而跳過SQL命令處理層。
避免了不必要的數(shù)據(jù)轉(zhuǎn)換斋攀。最后記錄返回給導(dǎo)出客戶端已卷,寫到dump文件。
2.性能問題
a.直接路徑導(dǎo)出方式比傳統(tǒng)路徑方式具有更優(yōu)的性能淳蔼,速度更快侧蘸,因?yàn)槔@過了SQL命令處理部分。
b.直接路徑導(dǎo)出方式支持RECORDLENGTH參數(shù)(最大為64k)鹉梨,該參數(shù)值通常建議設(shè)置為系統(tǒng)I/O或者DB_BLOCK_SIZE的整數(shù)倍
c.影響直接路徑導(dǎo)出的具體因素(DB_BLOCK_SIZE讳癌,列的類型,I/O性能俯画,即數(shù)據(jù)文件所在的磁盤驅(qū)動器是否單獨(dú)于dump文件所在的磁盤驅(qū)動器)
d.無論是直接路徑導(dǎo)出還是傳統(tǒng)路徑導(dǎo)出產(chǎn)生的dump析桥,在使用imp方式導(dǎo)入時(shí),會耗用相同的時(shí)間
3艰垂、直接路徑導(dǎo)出的限制
- a.直接路徑導(dǎo)出不支持交互模式
- b.不支持表空間傳輸模式(即TRANSPORT_TABLESPACES=Y不被支持)泡仗,支持的是FULL,OWNER,TABLES導(dǎo)出方式
- c.不支持QUERY查詢方式,如exp scott/tige TABLES=emp QUERY="WHERE job='SALESMAN' " 不被支持
- e.直接路徑導(dǎo)出使用RECORDLENGTH設(shè)置一次可以導(dǎo)出數(shù)據(jù)的量猜憎,取代傳統(tǒng)路徑使用buffer的設(shè)置
- e.直接路徑導(dǎo)出要求NLS_LANG環(huán)境參數(shù)等于數(shù)據(jù)庫字符集娩怎,負(fù)責(zé)收到EXP-41警告及EXP-0終止錯誤
2.IMP還原:
# 用戶模式:恢復(fù)所有表
imp admin/xiaoliu FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log FROMUSER=user_pssc_sm64 TOUSER=admin
imp admin/xiaoliu FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log FULL=y
# 表模式:(只恢復(fù)C_CONS, DATASOURCE兩個(gè)表數(shù)據(jù))
imp admin/xiaoliu FILE=/home/oracle/full.dmp FROMUSER=user_pssc_sm64 TOUSER=admin TABLES=C_CONS, DATASOURCE
imp admin/xiaoliu FILE=/home/oracle/full.dmp TABLES=C_CONS, DATASOURCE
ignore=y # 表示忽略創(chuàng)建錯誤,繼續(xù)后面的操作
# Oracle不執(zhí)行CREATE TABLE語句胰柑,直接將數(shù)據(jù)插入到表中
# 假如插入的記錄違反了約束條件截亦,比如主鍵約束
# 則出錯的記錄不會插入,但合法的記錄會添加到表中柬讨。
ignore=n # Oracle不執(zhí)行CREATE TABLE語句
# 同時(shí)也不會將數(shù)據(jù)插入到表中
# 而是忽略該表的錯誤崩瓤,繼續(xù)恢復(fù)下一個(gè)表。
方法2:EXPDP\IMPDP數(shù)據(jù)泵方式備份和還原數(shù)據(jù)庫
準(zhǔn)備工作
su - oracle
mkdir -p /home/oracle/bak/
sqlplus / as sysdba
select * from dba_directories;
CREATE OR REPLACE DIRECTORY bak AS '/home/oracle/bak/';
GRANT READ, WRITE ON DIRECTORY test_dir TO scott;
1.用戶模式:備份和恢復(fù)admin的所有表
# 普通方式導(dǎo)入導(dǎo)出
expdp admin/xiaoliu SCHEMAS=admin DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log COMPRESSION=all
impdp admin/xiaoliu SCHEMAS=admin DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log
# 開啟并行模式
expdp admin/xiaoliu SCHEMAS=admin DIRECTORY=bak DUMPFILE=full_%U.dmp LOGFILE=full.log COMPRESSION=all PARALLEL=2
impdp admin/xiaoliu SCHEMAS=admin DIRECTORY=bak DUMPFILE=full_%U.dmp LOGFILE=full.log PARALLEL=2
COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
ALL:壓縮元數(shù)據(jù)和數(shù)據(jù)踩官。
DATA_ONLY:僅壓縮數(shù)據(jù)却桶。
METADATA_ONLY:僅壓縮元數(shù)據(jù)。這是默認(rèn)設(shè)置蔗牡。
NONE:什么都沒有被壓縮颖系。
PARALLEL=4 # 并行導(dǎo)入和導(dǎo)出,這里的4一般設(shè)置為CPU的個(gè)數(shù)辩越,可提高效率
CLUSTER=NO # 對于小作業(yè)嘁扼,最好指定CLUSTER = NO來約束作業(yè)在啟動它的實(shí)例上運(yùn)行。
# 使用CLUSTER參數(shù)可能會影響性能
# 因?yàn)榭鏞racle RAC實(shí)例分發(fā)導(dǎo)出作業(yè)會產(chǎn)生一些額外的開銷黔攒。
2.表模式:只備份和恢復(fù)C_CONS, DATASOURCE表
expdp admin/xiaoliu TABLES=C_CONS, DATASOURCE DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log COMPRESSION=all
impdp admin/xiaoliu TABLES=C_CONS, DATASOURCE DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log
COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
ALL:壓縮元數(shù)據(jù)和數(shù)據(jù)趁啸。
DATA_ONLY:僅壓縮數(shù)據(jù)强缘。
METADATA_ONLY:僅壓縮元數(shù)據(jù)。這是默認(rèn)設(shè)置莲绰。
NONE:什么都沒有被壓縮欺旧。
PARALLEL=4 # 并行導(dǎo)入和導(dǎo)出姑丑,這里的4一般設(shè)置為CPU的核數(shù)蛤签,可提高效率
CLUSTER=NO # 對于小作業(yè),最好指定CLUSTER = NO來約束作業(yè)在啟動它的實(shí)例上運(yùn)行栅哀。
# 使用CLUSTER參數(shù)可能會影響性能
# 因?yàn)榭鏞racle RAC實(shí)例分發(fā)導(dǎo)出作業(yè)會產(chǎn)生一些額外的開銷震肮。
3.按查詢條件
expdp admin/xiaoliu DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log COMPRESSION=all TABLES=C_CONS QUERY=WHERE ROWNUM < 1000
impdp admin/xiaoliu DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log
COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
ALL:壓縮元數(shù)據(jù)和數(shù)據(jù)。
DATA_ONLY:僅壓縮數(shù)據(jù)留拾。
METADATA_ONLY:僅壓縮元數(shù)據(jù)戳晌。這是默認(rèn)設(shè)置。
NONE:什么都沒有被壓縮痴柔。
PARALLEL=4 # 并行導(dǎo)入和導(dǎo)出沦偎,這里的4一般設(shè)置為CPU的個(gè)數(shù),可提高效率
CLUSTER=NO # 對于小作業(yè)咳蔚,最好指定CLUSTER = NO來約束作業(yè)在啟動它的實(shí)例上運(yùn)行豪嚎。
# 使用CLUSTER參數(shù)可能會影響性能
# 因?yàn)榭鏞racle RAC實(shí)例分發(fā)導(dǎo)出作業(yè)會產(chǎn)生一些額外的開銷。
附錄:EXPDP\IMPDP數(shù)據(jù)泵方式在RAC環(huán)境中使用的說明
在Oracle RAC環(huán)境中導(dǎo)出期間使用PARALLEL
在Oracle Real Application Clusters(Oracle RAC)環(huán)境中谈火,如果導(dǎo)出操作的PARALLEL = 1侈询,則所有Data Pump進(jìn)程都駐留在啟動作業(yè)的實(shí)例上。 因此糯耍,目錄對象可以指向該實(shí)例的本地存儲扔字。
如果導(dǎo)出操作將PARALLEL設(shè)置為大于1的值,則數(shù)據(jù)泵進(jìn)程可以駐留在作業(yè)啟動的實(shí)例之外的實(shí)例上温技。 因此革为,目錄對象必須指向可由Oracle RAC的所有實(shí)例訪問的共享存儲。
限制
此參數(shù)僅在Oracle Database 11g企業(yè)版中有效舵鳞。
英文:
Using PARALLEL During An Export In An Oracle RAC Environment
In an Oracle Real Application Clusters (Oracle RAC) environment, if an export operation has PARALLEL=1, then all Data Pump processes reside on the instance where the job is started. Therefore, the directory object can point to local storage for that instance.
If the export operation has PARALLEL set to a value greater than 1, then Data Pump processes can reside on instances other than the one where the job was started. Therefore, the directory object must point to shared storage that is accessible by all instances of the Oracle RAC.
Restrictions
This parameter is valid only in the Enterprise Edition of Oracle Database 11g.