[Oracle][rman]快速複製資料庫-rman Duplicate
這篇算是rman的進階應用,當初在搞DG時還好以把rman duplicate練習的滾瓜爛熟,節省了大量複製datafile時間,因為利用rman duplicate可以快速create physical standby(如果你的生產DB Size快1T,你一定會說rman duplicate真是佛心來的!)。
雖然複製DB還有其他方法,如Clone,Datapump(logical expdp/impdp),每種方法各有其優缺點,只要依需求、系統環境及資源選對方法,我想每種方法都能發揮其存在的價值。
rman是oracle提供的物理備份還原工具(小弟認為相當強大,佩服Oracle開發團隊),通常用來備份或還原datafile、control file、archivelog及參數檔(*.ora),也可以執行DB完全或不完全的恢復,熟悉rman備份與還原操作算是Oracle DBA的基本課題(如同呼吸一樣親切自然阿)。
文章均為自己見解,如有錯誤還請指教
當執行DUPLICATE TARGET DATABASE TO target db運作如下圖
server session:執行rman duplicate。
1.取得rman repostiory備份相關資訊(來源可能是control file or catalog db)
2.建立channel並依repostiory資訊獲得rman backupsets實體檔案路徑開始duplicate
這裡將不說明其他rman基礎(等有空小弟在整理),我直接示範整個rman duplicate操作過程
測試平台:windows 2003 R2
Source DB Size:8.65GB
事前工作
*建立密碼檔案(target)
*建立instance and oracle services(target)
*確認Source DB已有完整備份檔案
*建立listen(target)
*check archivelog mode
事前工作都確認OK,就可以動手了
1.修改參數檔
create source DB參數檔(*.ora),修改正確後準備套用在target DB。
SQL>Create pfile=’f:\bk\duprule.ora’ from spfile(source db操作)
DUPRULE.__db_cache_size=234881024
DUPRULE.__java_pool_size=4194304
DUPRULE.__large_pool_size=4194304 #可以將large_pool_size設定大一點,避免執行過程中因large_pool_size不足導致失敗
DUPRULE.__shared_pool_size=192937984
DUPRULE.__streams_pool_size=4194304
*.audit_file_dest='D:\oracle\product\10.2.0/admin/DUPRULE/adump' #duprule=target db sid
*.background_dump_dest='D:\oracle\product\10.2.0/admin/DUPRULE/bdump'
*.compatible='10.2.0.2.0'
*.control_files='D:\oradata\duprule\control01.ctl','D:\oradata\duprule\control02.ctl','D:\oradata\duprule\control03.ctl'
*.core_dump_dest='D:\oracle\product\10.2.0/admin/DUPRULE/cdump'
*.db_block_size=8192
*.db_domain='test.com'
*.db_file_multiblock_read_count=16
*.db_name='DUPRULE'
*.db_file_name_convert=('G:\oradata\prorule1','D:\oradata\duprule') #rman duplicate 主要參數
*.log_file_name_convert=('G:\oradata\prorule1','D:\oradata\duprule') #rman duplicate 主要參數
*.db_recovery_file_dest='D:\oracle\product\10.2.0/flash_recovery_area'
*.db_recovery_file_dest_size=21474836480
*.dispatchers='(PROTOCOL=TCP) (SERVICE=sklrule1XDB)'
*.job_queue_processes=10
*.nls_language='TRADITIONAL CHINESE'
*.nls_length_semantics='CHAR'
*.nls_territory='TAIWAN'
*.open_cursors=300
*.pga_aggregate_target=147849216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=445644800
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='D:\oracle\product\10.2.0/admin/DUPRULE/udump'
修改完成並套用在target db,並將instance nomount
SQL>create spfile from pfile=’ D:\bk\duplicate\duprule.ora’;(target db 操作)
SQL>startup nomunt;
2.手動配置auxiliary channel並執行duplicate(source db操作)
Set oracle_sid=prorule1
rman target / auxiliary sys/密碼@DUPRULE (小弟將一些敏感字上了馬賽克)
(如果你無法連接到auxiliary db,可以先檢查listen status是否正常)
Rman>RUN{ALLOCATE AUXILIARY CHANNEL ax1 DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL ax2 DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL ax3 DEVICE TYPE DISK;
ALLOCATE AUXILIARY CHANNEL ax4 DEVICE TYPE DISK;
DUPLICATE TARGET DATABASE TO DUPRULE;}
(channel越多速度越快)
過程中都沒錯誤,將自動resetlogs(oracle還滿貼心的)
這樣就大功告成了
8.65GB的Source Database,花不到8分鐘就完成複製(時間就是金錢阿),相當正點