需求:在同一個環(huán)境下新建Standby RAC庫,即和Primary RAC在相同的磁盤組。
說明:生產(chǎn)環(huán)境一般不建議這樣配置DG,因?yàn)榇鎯用媸窍嗤疟P組,災(zāi)備的實(shí)際意義不大。我這里是用作讀寫分離。

基本信息:
db_name: jyzhao
Primary RAC db_unique_name:jyzhao
Standby RAC db_unique_name:jyzhaodg
Standby RAC instance_name: jyzhaodg1, jyzhaodg2
版本:GI 11.2.0.4 + DB 11.2.0.4

第一章 準(zhǔn)備工作

第二章 源數(shù)據(jù)庫備份

第三章 參數(shù)文件

第四章 rman恢復(fù)控制文件
第五章 rman恢復(fù)數(shù)據(jù)庫
第六章 備庫開啟日志應(yīng)用
第七章 創(chuàng)建standby log
第八章 檢查資源狀態(tài)

第一章 準(zhǔn)備工作

1.1 ASM存儲

確認(rèn)RAC Standby存儲是在和RAC Primary相同的ASM磁盤組內(nèi)(PS:災(zāi)備效果不明顯),創(chuàng)建RAC Standby存儲目錄(根據(jù)db_unique_name)

mkdir +DATA/JYZHAODGmkdir +FRA/JYZHAODG

1.2 配置tnsnames.ora

cd $ORACLE_HOME/network/admin/
cat tnsnames.ora
添加主庫備庫的連接信息(所有節(jié)點(diǎn)):

JYZHAO =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oradb-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = jyzhao)
    )
  )

jyzhaodg =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oradb-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = jyzhaodg)
    )
  )

1.3 密碼文件

節(jié)點(diǎn)1:

export ORACLE_SID=jyzhaodg1
密碼文件;cd $ORACLE_HOME/dbs
orapwd file=orapwjyzhaodg1 password=oracle entries=5
或者直接copy之前的密碼文件,然后mv重命名:
cp orapwjyzhao1 orapwjyzhaodg1

節(jié)點(diǎn)2:

export ORACLE_SID=jyzhaodg2
密碼文件;cd $ORACLE_HOME/dbs
orapwd file=orapwjyzhaodg2 password=oracle entries=5
或者直接copy之前的密碼文件,然后mv重命名:
cp orapwjyzhao2 orapwjyzhaodg2

最后測試相互連接可用

sqlplus sys/oracle@jyzhao as sysdba
sqlplus sys/oracle@jyzhaodg as sysdba

第二章 源數(shù)據(jù)庫備份

vi backup.sh
備份腳本如下:

rman target / <<EOF
run {allocate channel c1 device type disk;allocate channel c2 device type disk;
backup as compressed backupset database filesperset 1 format '/u01/orabak/salehrdb_%d_%T_%s.bak';
backup current controlfile format '/u01/orabak/control.bak';
release channel c1;
release channel c2;
}
EOF

后臺執(zhí)行備份任務(wù):

nohup sh backup.sh &

注意:如果使用backup as copy database format方案,就不用再備份到磁盤后再恢復(fù)了,可以節(jié)省時間。

backup as copy 方案備份腳本 backupcp.sh內(nèi)容如下:

rman target / <<EOF
run {allocate channel c1 device type disk;allocate channel c2 device type disk;
backup as copy database format '+DATA/JYZHAODG/DATAFILE/%u.dbf';
release channel c1;
release channel c2;
}
EOF

注意:這種方式,路徑包含的目錄需手動創(chuàng)建。

mkdir +DATA/JYZHAODG/DATAFILE

第三章 參數(shù)文件

3.1 修改主庫參數(shù)文件

確認(rèn)當(dāng)前環(huán)境ORACLE_SID:

echo $ORACLE_SIDexport ORACLE_SID=jyzhao1

根據(jù)spfile文件創(chuàng)建pfile:
create pfile='/tmp/pfile.ora' from spfile;

Primary RAC 添加參數(shù)

--為不停止primary RAC,所以盡可能動態(tài)修改參數(shù):
show parameter log_archive_config
show parameter db_file_name_convert
show parameter log_file_name_convert
show parameter fal_client
show parameter fal_server
show parameter log_archive_dest_3

alter system set log_archive_config='dg_config=(jyzhao,jyzhaodg)';
alter system set db_file_name_convert='+DATA/jyzhaodg','+DATA/jyzhao' scope=spfile;
alter system set log_file_name_convert='+DATA/jyzhaodg','+DATA/jyzhao' scope=spfile;
alter system set fal_client='jyzhao';
alter system set fal_server='jyzhaodg';
alter system set log_archive_dest_3='service=jyzhaodg valid_for=(online_logfiles,primary_role) db_unique_name=jyzhaodg';
--暫時defer傳輸鏈路,防止此時主庫告警生成相關(guān)錯誤
SQL> alter system set log_archive_dest_state_3=defer;

3.2 修改Standby RAC 參數(shù)

根據(jù)主庫之前導(dǎo)出的參數(shù)文件修改備庫的參數(shù)文件:
cp /tmp/pfile.ora /tmp/pfile_std.ora
vi /tmp/pfile_std.ora

*._high_priority_processes='LMS*'*.audit_file_dest='/u01/app/oracle/admin/jyzhaodg/adump'*.audit_trail='db'*.cluster_database=true*.compatible='11.2.0.4.0'*.control_files='+DATA/jyzhaodg/controlfile/current.260.931878631','+FRA/jyzhaodg/controlfile/current.256.931878631'*.db_block_size=8192
*.db_create_file_dest='+DATA'*.db_domain=''*.db_name='jyzhao'*.db_recovery_file_dest='+FRA'*.db_recovery_file_dest_size=4621074432
*.diagnostic_dest='/u01/app/oracle'*.dispatchers='(PROTOCOL=TCP) (SERVICE=jyzhaoXDB)'jyzhaodg2.instance_number=2
jyzhaodg1.instance_number=1
*.log_archive_format='%t_%s_%r.dbf'*.memory_target=313286272
*.open_cursors=300
*.processes=150
*.remote_listener='oradb-scan:1521'*.remote_login_passwordfile='exclusive'jyzhaodg2.thread=2
jyzhaodg1.thread=1
jyzhaodg2.undo_tablespace='UNDOTBS2'jyzhaodg1.undo_tablespace='UNDOTBS1'#adddb_unique_name='jyzhaodg'log_archive_config='dg_config=(jyzhao,jyzhaodg)'#db_unique_namedb_file_name_convert='+DATA/jyzhao','+DATA/jyzhaodg'log_file_name_convert='+DATA/jyzhao','+DATA/jyzhaodg'standby_file_management=auto
fal_client='jyzhaodg'#tnsnames.orafal_server='jyzhao'#salehrdblog_archive_dest_3='service=jyzhao valid_for=(online_logfiles,primary_role) db_unique_name=jyzhao'

主要是注意后面#add之后的內(nèi)容。

3.3 在ASM中創(chuàng)建standby的spfile

在ASM中創(chuàng)建standby的spfile,并確定各節(jié)點(diǎn)的參數(shù)文件內(nèi)容指向磁盤中的spfile。
節(jié)點(diǎn)1:

echo $ORACLE_SID
export ORACLE_SID=jyzhaodg1create spfile='+DATA/jyzhaodg/spfilejyzhaodg.ora' from pfile='/tmp/pfile_std.ora';--  cat initjyzhaodg1.ora 
SPFILE='+DATA/jyzhaodg/spfilejyzhaodg.ora'

節(jié)點(diǎn)2:

echo $ORACLE_SIDexport ORACLE_SID=jyzhaodg2
cat initjyzhaodg2.ora 
SPFILE='+DATA/jyzhaodg/spfilejyzhaodg.ora'

創(chuàng)建adump目錄(所有節(jié)點(diǎn))

mkdir -p /u01/app/oracle/admin/jyzhaodg/adump

3.4 Standby RAC啟動到nomount

節(jié)點(diǎn)1:

echo $ORACLE_SIDexport ORACLE_SID=jyzhaodg1
startup nomount

節(jié)點(diǎn)2:

echo $ORACLE_SIDexport ORACLE_SID=jyzhaodg2
startup nomount

第四章 rman恢復(fù)控制文件

在Primary RAC上創(chuàng)建備庫使用的控制文件:

echo $ORACLE_SIDexport ORACLE_SID=jyzhao1
SQL> alter database create standby controlfile as '/tmp/control01.ctlbak';

在Standby RAC的節(jié)點(diǎn)1上恢復(fù)控制文件并啟動到mount:

echo $ORACLE_SID
export ORACLE_SID=jyzhaodg1restore controlfile from '/tmp/control01.ctlbak';alter database mount;
crosscheck backupset;--如果是之前copy到磁盤組的備份沒加載到控制文件中,可以手動catalogcatalog start with '+data/jyzhaodg/DATAFILE';--同樣,如果是之前的備份集沒加載到控制文件中,一樣手動catalogcatalog start with '/u01/orabak/';

查看此時standby記錄的各文件路徑是否符合預(yù)期:

SQL> select name from v$datafile;NAME--------------------------------------------------------------------------------
+DATA/jyzhaodg/datafile/system.256.931878537+DATA/jyzhaodg/datafile/sysaux.257.931878537+DATA/jyzhaodg/datafile/undotbs1.258.931878537+DATA/jyzhaodg/datafile/users.259.931878537+DATA/jyzhaodg/datafile/undotbs2.264.931878827+DATA/jyzhaodg/datafile/dbs_d_jingyu.268.9375151736 rows selected.

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
+DATA/jyzhaodg/onlinelog/group_2.262.931878637+FRA/jyzhao/onlinelog/group_2.258.931878639+DATA/jyzhaodg/onlinelog/group_1.261.931878635+FRA/jyzhao/onlinelog/group_1.257.931878637+DATA/jyzhaodg/onlinelog/group_3.265.931879021+FRA/jyzhao/onlinelog/group_3.259.931879023+DATA/jyzhaodg/onlinelog/group_4.266.931879027+FRA/jyzhao/onlinelog/group_4.260.9318790298 rows selected.

SQL> select name from v$tempfile;NAME--------------------------------------------------------------------------------
+DATA/jyzhaodg/tempfile/temp.263.931878661SQL> select name from v$controlfile;NAME--------------------------------------------------------------------------------
+DATA/jyzhaodg/controlfile/current.288.937645851+FRA/jyzhaodg/controlfile/current.275.937645851

發(fā)現(xiàn)日志文件有不符合預(yù)期的路徑,進(jìn)行修正:

SQL> show parameter convertNAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------
db_file_name_convert                 string      +DATA/jyzhao, +DATA/jyzhaodg
log_file_name_convert                string      +DATA/jyzhao, +DATA/jyzhaodg

SQL> alter system set log_file_name_convert='+DATA/jyzhao','+DATA/jyzhaodg','+FRA/jyzhao','+FRA/jyzhaodg' scope=spfile;

SQL> shutdown immediate;
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  313159680 bytes
Fixed Size                  2252824 bytes
Variable Size             222302184 bytes
Database Buffers           83886080 bytes
Redo Buffers                4718592 bytes
Database mounted.
SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
+DATA/jyzhaodg/onlinelog/group_2.262.931878637+FRA/jyzhaodg/onlinelog/group_2.258.931878639+DATA/jyzhaodg/onlinelog/group_1.261.931878635+FRA/jyzhaodg/onlinelog/group_1.257.931878637+DATA/jyzhaodg/onlinelog/group_3.265.931879021+FRA/jyzhaodg/onlinelog/group_3.259.931879023+DATA/jyzhaodg/onlinelog/group_4.266.931879027+FRA/jyzhaodg/onlinelog/group_4.260.9318790298 rows selected.

第五章 rman恢復(fù)數(shù)據(jù)庫

Standby RAC節(jié)點(diǎn)1:

確定ORACLE_SID變量:

echo $ORACLE_SIDexport ORACLE_SID=jyzhaodg1

a. 如果是使用從備份集恢復(fù)的方式
vi restore.sh

rman target / <<EOF! > db_restore.logrun {allocate channel d1 type disk;allocate channel d2 type disk;
restore database;
release channel d1;
release channel d2;
}exit;
EOF!

nohup sh restore.sh &

b. 如果是直接使用copy到磁盤組的
直接switch database to copy即可。

RMAN> switch database to copy;using target database control file instead of recovery catalog
datafile 1 switched to datafile copy "+DATA/jyzhaodg/datafile/0eru6m4s.dbf"datafile 2 switched to datafile copy "+DATA/jyzhaodg/datafile/0fru6m4s.dbf"datafile 3 switched to datafile copy "+DATA/jyzhaodg/datafile/0hru6meo.dbf"datafile 4 switched to datafile copy "+DATA/jyzhaodg/datafile/0iru6mg5.dbf"datafile 5 switched to datafile copy "+DATA/jyzhaodg/datafile/0jru6mg6.dbf"datafile 6 switched to datafile copy "+DATA/jyzhaodg/datafile/0gru6men.dbf"

第六章 備庫開啟日志應(yīng)用

確認(rèn)Primary RAC的日志傳輸鏈路打開:

echo $ORACLE_SIDexport ORACLE_SID=jyzhao1

SQL> alter system set log_archive_dest_state_3=enable;

Standby RAC節(jié)點(diǎn)1在mount狀態(tài)下開啟日志應(yīng)用:

echo $ORACLE_SIDexport ORACLE_SID=jyzhaodg1

SQL> alter database recover managed standby database disconnect from session;

第七章 創(chuàng)建standby log

停止備庫應(yīng)用:

SQL> alter database recover managed standby database cancel;

查看日志信息:

SQL> select * from v$Log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS