iT邦幫忙

DAY 11
4

Oracle and MS SQL系列 第 12

[Day 11]快速複製資料庫-rman Duplicate

在分享Oracle11g ADG前,先來介紹rman duplicate,熟悉該方法會讓你在建置DG省了相當多時間。
這篇算是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分鐘就完成複製(時間就是金錢阿),相當正點

下一篇我們將真正進入11g ADG所帶來的改變,過程中會使用rman duplicate建立physicy standby,就可以感受到該技術所帶來的效率。


上一篇
[Day 10]Oracle10g DG第五章 設定資料保護模式及了解redo傳送服務
下一篇
[Day 12]Oracle11g Active Data Guard#1簡介
系列文
Oracle and MS SQL34

2 則留言

0
honjam
iT邦新手 5 級 ‧ 2009-10-15 00:30:00

前輩太利害了,請教一下,這篇只能用於11g嗎?
10g 和9i有辦法做到嗎?

0
rico
iT邦新手 2 級 ‧ 2009-10-15 11:17:22

10g是可以的
至於9i我不太確定步驟是否都相同(如果你嘗試過後在麻煩告訴我)~~~^^

我要留言

立即登入留言