使用手工建立實體standby 多少有些費事,利用oracle提供的duplicate 可以簡單的完成建立實體standby 的工作!
一 環境:同一台主機
主庫 orcl 備庫 orcldg
二 使用rman 備份主庫
c:\documents and settings\administrator>rman target /
複管理器: release 11.1.0.6.0 - production on 星期一 9月 20 10:56:30 2010
copyright (c) 1982, 2007, oracle. all rights reserved.
連接配接到目标資料庫: orcl (dbid=1256563399)
rman>backup database format 'f:\backup\full_%u.bak';
......
rman>sql 'alter system switch logfile'
rman>backup archivelog all;
rman>
三 為備庫建立參數檔案,密碼檔案 ,配置監聽檔案
1 備庫的參數檔案:
orcl.__db_cache_size=339738624
orcl.__java_pool_size=12582912
orcl.__large_pool_size=4194304
orcl.__oracle_base='f:\orcl'#oracle_base set from environment
orcl.__pga_aggregate_target=209715200
orcl.__sga_target=473956352
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=109051904
orcl.__streams_pool_size=0
*.audit_file_dest='f:\orcl\admin\orcldg\adump'
*.audit_trail='db'
*.compatible='11.1.0.0.0'
*.control_files='d:\oracle\orcldgdata\control01.ctl','d:\oracle\orcldgdata\control02.ctl','d:\oracle\orcldgdata\control03.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_unique_name='orcl'
*.log_archive_config='dg_config=(orcl,orcldg)'
*.log_archive_dest_1='location=f:\orcl\archive1'
*.log_archive_dest_2='service=orcldg arch vaild_for=(online_logfiles,primary_role) db_unique_name= orcl'
*.log_archive_dest_state_2=defer
*.db_recovery_file_dest='f:\orcl\flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.diagnostic_dest='f:\orcl'
*.dispatchers='(protocol=tcp) (service=orclxdb)'
*.memory_target=681574400
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='exclusive'
*.sga_max_size=471859200
*.undo_management='auto'
*.undo_tablespace='undotbs1'
#------- 角色轉變-------
*.fal_server=orcldg
*.fal_client=orcl
*.db_file_name_convert='f:\orcl\oradata\orcl','d:\oracle\orcldgdata'
*.log_file_name_convert='f:\orcl\oradata\orcl','d:\oracle\orcldgdata'
*.standby_file_management=auto
2 密碼檔案這裡使用的是主庫拷貝。這樣儲存所有的密碼一緻
3 監聽檔案:
# listener.ora 的配置
sid_list_listener=
( sid_list=
(sid_desc=
(glogbal_dbname=orcl)
(orcl_home= f:\orcl\product\11.1.0\db_1)
(sid_name=orcl)
)
(sid_desc =
(global_name = orcldg)
(oracle_home = f:\orcl\product\11.1.0\db_1)
(sid_name= orcldg)
)
listener =
(description_list =
(description =
(address = (protocol = ipc)(key = extproc1521))
(address = (protocol = tcp)(host = yql)(port = 1521))
)
# tnsnames.ora 的配置
orcl =
(description =
(address = (protocol = tcp)(host = yql)(port = 1521))
(connect_data =
(server = dedicated)
(service_name = orcl)
orcldg =
(service_name = orcldg)
四 啟動備庫到nomount
orcldg>startup nomount pfile='f:\initorcldg.ora'
oracle 例程已經啟動。
total system global area 472887296 bytes
fixed size 1333956 bytes
variable size 184550716 bytes
database buffers 281018368 bytes
redo buffers 5984256 bytes
五 利用duplicate建立standby 資料庫
c:\documents and settings\administrator>set oracle_sid=orcl
恢複管理器: release 11.1.0.6.0 - production on 星期一 9月 20 10:56:30 2010
已連接配接到輔助資料庫: orcl (未裝載)
rman> duplicate target database for standby;
啟動 duplicate db 于 20-9月 -10
使用目标資料庫控制檔案替代恢複目錄
配置設定的通道: ora_aux_disk_1
通道 ora_aux_disk_1: sid=152 裝置類型=disk
記憶體腳本的内容:
{
restore clone standby controlfile;
sql clone 'alter database mount standby database';
}
正在執行記憶體腳本
啟動 restore 于 20-9月 -10
使用通道 ora_aux_disk_1
通道 ora_aux_disk_1: 正在開始還原資料檔案備份集
通道 ora_aux_disk_1: 正在還原控制檔案
通道 ora_aux_disk_1: 正在讀取備份片段 f:\orcl\flash_recovery_area\orcl\autobacku
p\2010_09_20\o1_mf_s_730205638_69fm6gn0_.bkp
通道 ora_aux_disk_1: 段句柄 = f:\orcl\flash_recovery_area\orcl\autobackup\2010_0
9_20\o1_mf_s_730205638_69fm6gn0_.bkp 标記 = tag20100920t105358
通道 ora_aux_disk_1: 已還原備份片段 1
通道 ora_aux_disk_1: 還原完成, 用時: 00:00:01
輸出檔案名=d:\oracle\orcldgdata\orcldg01.ctl
輸出檔案名=d:\oracle\orcldgdata\orcldg02.ctl
輸出檔案名=d:\oracle\orcldgdata\orcldg03.ctl
完成 restore 于 20-9月 -10
sql 語句: alter database mount standby database
set newname for tempfile 1 to "d:\oracle\orcldgdata\temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to "d:\oracle\orcldgdata\system01.dbf";
set newname for datafile 2 to "d:\oracle\orcldgdata\sysaux01.dbf";
set newname for datafile 3 to "d:\oracle\orcldgdata\undotbs01.dbf";
set newname for datafile 4 to "d:\oracle\orcldgdata\users01.dbf";
set newname for datafile 5 to "d:\oracle\orcldgdata\example01.dbf";
restore clone database;
正在執行指令: set newname
臨時檔案 1 在控制檔案中已重命名為 d:\oracle\orcldgdata\temp01.dbf
通道 ora_aux_disk_1: 正在指定從備份集還原的資料檔案
通道 ora_aux_disk_1: 将資料檔案 00001 還原到 d:\oracle\orcldgdata\system01.dbf
通道 ora_aux_disk_1: 将資料檔案 00003 還原到 d:\oracle\orcldgdata\undotbs01.dbf
通道 ora_aux_disk_1: 将資料檔案 00004 還原到 d:\oracle\orcldgdata\users01.dbf
通道 ora_aux_disk_1: 正在讀取備份片段 f:\backup\full_0lloc0io_1_1.bak
通道 ora_aux_disk_1: 段句柄 = f:\backup\full_0lloc0io_1_1.bak 标記 = tag20100920
t100511
通道 ora_aux_disk_1: 還原完成, 用時: 00:00:45
通道 ora_aux_disk_1: 将資料檔案 00002 還原到 d:\oracle\orcldgdata\sysaux01.dbf
通道 ora_aux_disk_1: 将資料檔案 00005 還原到 d:\oracle\orcldgdata\example01.dbf
通道 ora_aux_disk_1: 正在讀取備份片段 f:\backup\full_0mloc0j0_1_1.bak
通道 ora_aux_disk_1: 段句柄 = f:\backup\full_0mloc0j0_1_1.bak 标記 = tag20100920
switch clone datafile all;
資料檔案 1 已轉換成資料檔案副本
輸入資料檔案副本 recid=6 stamp=730205918 檔案名=d:\oracle\orcldgdata\system01.dbf
資料檔案 2 已轉換成資料檔案副本
輸入資料檔案副本 recid=7 stamp=730205918 檔案名=d:\oracle\orcldgdata\sysaux01.dbf
資料檔案 3 已轉換成資料檔案副本
輸入資料檔案副本 recid=8 stamp=730205918 檔案名=d:\oracle\orcldgdata\undotbs01.dbf
資料檔案 4 已轉換成資料檔案副本
輸入資料檔案副本 recid=9 stamp=730205918 檔案名=d:\oracle\orcldgdata\users01.dbf
資料檔案 5 已轉換成資料檔案副本
輸入資料檔案副本 recid=10 stamp=730205918 檔案名=d:\oracle\orcldgdata\example01.dbf
完成 duplicate db 于 20-9月 -10
六 驗證是否能夠應用日志
主庫上:
orcl>select max(sequence#) from v$archived_log;
max(sequence#)
--------------
21
orcl>alter system switch logfile;
系統已更改。
max(sequence#)
--------------
22
在備庫上
orcldg>alter database recover managed standby database disconnect from session;
資料庫已更改。
orcldg>select max(sequence#) from v$archived_log;
max(sequence#)
--------------
22