由於工程需要經常將客戶的現場數據導出到公司的開發環境中隨著客戶現場數據量的不斷增大原先使用的導出導入的方法需要花費越來越長的時間所以測試一下RMAN的效率驗證是否能用恢復RMAN備份的方法來代替以往的EXP/IMP方法原本想過用傳輸表空間的方法但是由於我們通常在創建數據庫的時候就給業務所用的表空間創建了很大的數據文件這樣在傳輸表空間的copy數據文件的步驟上會花費很長的時間所以還是決定測試一下RMAN了
測試目的
實現對於JHJKREC用戶的數據轉移在機器上測試
測試環境
PG單CPUG內存G單硬盤Windows ServerOracle跟JHJK用戶相關的數據文件的總共大小為G 其中JHJKREC用戶的對象總共大小為G
RMAN作full備份用時分鐘生成文件大小GEXP作JHJKREC用戶數據導出用時分秒生成文件大小M
RMAN作數據恢復用時分鐘(包括restore數據文件recover數據庫)IMP作JHJKREC用戶數據導入用時分鐘
RMAN備份在非歸檔模式下需要關閉數據庫然後啟動數據庫到mount狀態EXP在非歸檔模式下不需要關閉數據庫但是數據表本身是不一致的
結論
利用RMAN備份的時間明顯長於EXP的時間備份出的文件也遠大於EXP出的文件但是恢復的時間卻要少於IMP所需要的時間利用RMAN恢復還需要備份控制文件而且由於是非歸檔模式還需要檢查當前能夠恢復到的最大SCN然後在SQLPLUS中ecover database until change scn然後再alter database open resetlogs整個操作比EXP/IMP繁瑣對於現場業務人員來說可能較為困難所以使用RMAN還是使用導出導入作數據轉移還是見仁見智吧
以下為測試中RMAN和導出導入使用的命令基本上沒有作任何優化
RMAN的備份腳本
@@connectrcv
# Backup up database at full level
#
shutdown immediate;
startup mount;
run{
allocate channel d type disk;
set limit channel d kbytes ;
backup full database
format E:\rman_bak\dbfull_%d_%s_%p_%t
tag=dbfull;
release channel d;
}
alter database open;
exit;
RMAN的恢復腳本
@@connectrcv
shutdown immediate;
startup mount;
run {
sql alter session set nls_date_language=AMERICAN;
sql alter session set nls_date_format=yyyymmdd hh:mi:ss;
set until time ::;
allocate channel ch type disk;
restore database;
release channel ch;
}
exit;
EXP的腳本
userid=jhjkrec/jhjkrec
file=e:\rman_bak\jhjkrecdmp
owner=jhjkrec
direct=n
compress=n
feedback=
IMP的腳本
userid=jhjkrec/jhjkrec
file=e:\rman_bak\jhjkrecdmp
ignore=y
fromuser=jhjkrec
touser=jhjkrec
feedback=
From:http://tw.wingwit.com/Article/program/Oracle/201311/17211.html