- exp/imp簡單方便,適用於跨db版本、跨os平臺、異地備份等情況,是大家最常用的一種備份方式。
- expdp/impdp是10g以後推出的備份方式,其特點就是效率的大幅改善,據eygle報告,impdp相比與傳統imp有20倍速度提升,其最大的缺點是不能跨數據庫版本,連小版本號也不行(例如11.1到11.2)。
- rman相比前兩種備份方式,相對配置複雜,一般是DBA作爲前兩種方案的備份。
先看看exp/imp的用法:
1.基本的exp寫法
-
exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log
-
user: oracle用戶名
-
passwd:數據庫用戶密碼
-
infodb81: 數據庫的連接字符串
-
file:備份後的文件名
- log: 備份日誌文件
2.exp的參數
-
exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log buffer=4096000000
-
-
注意:buffer的單位是bytes,例如要設置1M,則是1024000,上面的例子設置的是400M。
-
根據我們測試的結果,加入buffer參數後,約有40%的性能提升。
-
經過反覆驗證:合理的buffer值是10240000-1024000之間,再大了反而效率更低。
環境:aix 6.1 16c 32G,sga信息如下
SQL> show sga
Total System Global Area 2.0043E+10 bytes
Fixed Size 2153336 bytes
Variable Size 1.3690E+10 bytes
Database Buffers 6174015488 bytes
Redo Buffers 176394240 bytes -
性能對比:
-
加入buffer參數前(數據約9G,共31分鐘)
-
========== 備份用戶sinosybak
11-02-21 02:08:16 ====================
-
========== 備份用戶shyang
11-02-21 02:35:49 ====================
-
加入Buffer參數後(約18分鐘)
-
========== 備份用戶sinosybak
11-02-28 02:25:04 ====================
- ========== 備份用戶shyang 11-02-28 02:43:52 ====================
-
exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log direct=y
recordlength=65536
-
direct : 直接導出,數據從磁盤讀入到高速緩存,直接寫入到最終文件,所以沒有數據行檢查與匹配的過程。據不權威的評測結果,性能有50%到70%的提升。
同樣的環境,實測結果,有70%的性能提升
約70G數據,普通exp模式,未加buffer,約2小時40分
========== 備份用戶sinosy 11-02-22 22:30:00 ====================
========== 開始傳輸sinosy 11-02-23 01:10:39 ====================
exp buffer=102400000,約2小時
========== 備份用戶sinosy 11-02-28 22:30:01 ====================
========== 開始傳輸sinosy 11-03-01 00:39:58 ====================
exp direct模式,約1個小時 -
========== 備份用戶sinosy 11-03-01 22:30:00 ====================
========== 開始傳輸sinosy 11-03-01 23:05:43 ==================== -
注意:
-
1.recordlength參數(IO緩衝大小),與direct參數配對使用,默認該參數爲1024bytes,上面的例子爲64K(最大值也爲64K)。
-
2.使用direct後,buffer參數失效;
-
3.使用direct,不支持query子句(沒有行匹配的過程),不支持帶Blob類型字段的表,但是系統會自動判斷、自動切換,也就是說不會因爲一張表的問題,導致整個schema不能使用direct備份;
- 4.direct不支持表空間導出。
參數三:consistent
-
exp userid/passwd@infodb81 file=user_$DATE.dmp log=user_$DATE.log consistent=y
-
-
consistent : 交叉一致性,用在序列值小於表中最大值的情況。
-
- 例如:exp默認情況下,先導出序列,後導出表,如果序列導出之後,表又使用序列插入了新的數據,就會導致數據不一致。
其他參數:
-
USERID 用戶名/口令
-
FULL 導出整個文件 (N) BUFFER 數據緩衝區的大小
-
OWNER 所有者用戶名列表
-
FILE 輸出文件 (EXPDAT.DMP)
-
TABLES 表名列表
-
COMPRESS 導入一個範圍 (Y)
-
RECORDLENGTH IO 記錄的長度
-
GRANTS 導出權限 (Y)
-
INCTYPE 增量導出類型
-
INDEXES 導出索引 (Y)
-
RECORD 跟蹤增量導出 (Y)
-
ROWS 導出數據行 (Y)
-
PARFILE 參數文件名
-
CONSTRAINTS 導出限制 (Y)
-
CONSISTENT 交叉表一致性
-
LOG 屏幕輸出的日誌文件
-
STATISTICS 分析對象 (ESTIMATE)
-
DIRECT 直接路徑 (N)
-
TRIGGERS 導出觸發器 (Y)
-
FEEDBACK 顯示每 x 行 (0) 的進度
-
FILESIZE 各轉儲文件的最大尺寸
-
QUERY 選定導出表子集的子句
-
下列關鍵字僅用於可傳輸的表空間
-
TRANSPORT_TABLESPACE 導出可傳輸的表空間元數據 (N)
- TABLESPACES 將傳輸的表空間列表