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