步驟:
(1)建立對應standby數據庫的目錄,如$ORACLE_BASE/admin,$ORACL_EBASE/oradata下的對應目錄以及相關子目錄,歸檔日誌存放目錄,閃回區存放路徑等;創建密碼文件。
mkdir /opt/oracle/admin/standby
cd /opt/oracle/admin/standby
mkdir adump bdump cdump udump dpdump
mkdir /opt/oracle/oradata/standby
mkdir /opt/oracle/oradata/standby/archivelog
orapwd file=$ORACLE_HOME/dbs/orapwstandby password=oracle force=y
(2) 開始主庫的備份,備份包括數據文件和控制文件
rman target sys/oracle@ocp
RMAN> backup format '/oracle/bak/backup_%U' database plus archivelog;
RMAN> backup format '/oracle/bak/bk_%U' current controlfile for standby;
(3) 修改主庫的參數文件
create pfile from spfile
vim $ORACLE_HOME/dbs/initocp.ora
*.log_archive_config='dg_config=(demo,standby)'
*.fal_server=standby
*.fal_client=demo
*.standby_file_management=AUTO
*.db_unique_name=demo
*.log_archive_dest_1='LOCATION=/opt/oracle/oradata/ocp/archive/'
*.log_archive_dest_2='SERVICE=standby valid_for=(online_logfiles,primary_role) db_unique_name=standby'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
(4)關閉主庫,創建spfile
shutdown immediate;
create spfile from pfile;
(5)創建備庫的參數文件
create pfile='?/dbs/initstandby.ora' from spfile;
改變其中的相關路徑,設置如下對應參數:
*.log_archive_dest_1='LOCATION=/opt/oracle/oradata/standby/archive/'
*.log_archive_dest_2='SERVICE=ocp valid_for=(online_logfiles,primary_role) db_unique_name=ocp'
*.log_archive_config='dg_config=(ocp,standby)'
*.fal_server=ocp
*.fal_client=standby
*.standby_file_management=AUTO
*.db_unique_name=standby
*.db_file_name_convert='/opt/oracle/oradata/ocp','/opt/oracle/oradata/standby'
*.log_file_name_convert='/opt/oracle/oradata/ocp','/opt/oracle/oradata/standby'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
修改pfile完成後,創建備庫對應的spfile:
create spfile='?/dbs/spfilestandby.ora' from pfile='?/dbs/initstandby.ora';
(6) 配置監聽,將對應的db_unique_name配置進去
vim $ORACLE_HOME/network/admin/tnsnames.ora
DEMO =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.102)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = demo)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.102)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = standby)
)
)
重新啓動監聽。
(7)如果在不同的機器上實驗,則需要scp 主庫數據文件和控制文件的備份到備庫相同的目錄(因爲執行步驟9時,會讀取主庫的控制文件,然後知道備份片的位置,再restore備庫的控制文件,如果備庫的備份片位置和主庫不同,則步驟9會報錯)
如果主備庫在同一臺機器上搭建,則無需做這一步了。
(8) 啓動備庫
export ORACLE_SID=standby
startup nomount;
(9) 利用rman恢復備庫
uniread rman target sys/oracle@demo auxiliary sys/oracle@standby
connected to target database: OCP (DBID=2606671501)
connected to auxiliary database: OCP (not mounted)
RMAN> duplicate target database for standby dorecover; --如果在同一臺機器上。
RMAN> duplicate target database for standby nofilenamecheck dorecover; --如果在不同機器上
(10) 執行步驟9以後,備庫進入到mount狀態,但是此時日誌還不能傳輸過來,需要重啓備庫。
startup force mount;