前言
經(jīng)過(guò)交流群中朋友的多次要求,這次給大家分享一下 RAC to Single 的 ADG 搭建教程!
一、環(huán)境準(zhǔn)備
老規(guī)矩,測(cè)試環(huán)境實(shí)戰(zhàn)演示:
主機(jī)名 ip DB Version db_name db_unique_name 主庫(kù)節(jié)點(diǎn)一 lucifer01 10.211.55.100 11.2.0.4 orcl 主庫(kù)節(jié)點(diǎn)二 lucifer02 10.211.55.101 11.2.0.4 orcl 備庫(kù) luciferdg 10.211.55.110 11.2.0.4 orcl
📢 以下幾點(diǎn)需要注意:
db_unique_name 主備庫(kù)不能相同 db_name主備庫(kù)需保持一致 主備庫(kù)DB版本需保持一致
二、搭建過(guò)程
1、Oracle軟件安裝
使用我寫(xiě)的 Oracle 一鍵安裝腳本,快速安裝主庫(kù) RAC 和備庫(kù)單機(jī)。
cd .. /racdb
vagrant up
vagrant ssh node1
su - root
cd /soft
sh rac_install.sh
簡(jiǎn)單等待一段時(shí)間,Oracle RAC 就安裝成功了!
2、環(huán)境配置
搭建 ADG 之前,需要先配置一下環(huán)境信息,包括主機(jī)名解析以及 TNS。
1、配置 hosts
文件
主庫(kù):
##節(jié)點(diǎn)一
#dg
cat<< EOF>> /etc/hosts
10.211 .55.110 luciferdg
EOF
##節(jié)點(diǎn)二
#dg
cat<< EOF>> /etc/hosts
10.211 .55.110 luciferdg
EOF
備庫(kù):
##dg
cat<< EOF>> /etc/hosts
10.211 .55.100 lucifer01
10.211 .55.101 lucifer02
10.211 .55.105 lucifer-scan
EOF
2、配置 TNS
主庫(kù)+備庫(kù),在 root
用戶下執(zhí)行:
##tnsnames.ora
su - oracle -c "cat <<EOF >> /u01/app/oracle/product/11.2.0/db/network/admin/tnsnames.ora
##FOR DG BEGIN
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = lucifer-scan)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = lucifer01)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = lucifer02)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCLDG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = luciferdg)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
##FOR DG BEGIN
EOF"
3、主庫(kù)開(kāi)啟歸檔和強(qiáng)制日志
開(kāi)啟歸檔模式(需要停機(jī) ):
srvctl stop database -d orcl -o immediate
srvctl start instance -d orcl -i orcl1 -o mount
alter database archivelog;
alter database open ;
srvctl start instance -d orcl -i oorcl2
開(kāi)啟強(qiáng)制日志模式(可在線開(kāi)啟 ):
alter database force logging;
4、復(fù)制參數(shù)文件和密碼文件至備庫(kù)
復(fù)制參數(shù)文件至備庫(kù)(備庫(kù)執(zhí)行),要在 oracle
用戶下復(fù)制:
su - oracle
scp oracle@lucifer01:/tmp/initorcldg.ora /tmp
備庫(kù)創(chuàng)建目錄:
mkdir -p /u01/app/oracle/admin/orcl/adump
su - oracle -c "mkdir -p /oradata/orcl/datafile"
su - oracle -c "mkdir -p /oradata/orcl/onlinelog"
su - oracle -c "mkdir -p /oradata/orcl/tempfile"
mkdir -p /u01/app/oracle/fast_recovery_area/orcl
chown -R oracle:oinstall /u01/app/oracle/admin/orcl/adump
chown -R oracle:oinstall /u01/app/oracle/fast_recovery_area
備庫(kù)修改參數(shù)文件:
*._optimizer_cartesian_enabled= FALSE
*.audit_file_dest= '/u01/app/oracle/admin/orcl/adump'
*.audit_trail= 'NONE'
*.compatible= '11.2.0.4.0'
*.db_block_size= 8192
*.control_files= '/oradata/orcl/control01.ctl' ,'/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'
*.db_create_file_dest= '/oradata/orcl'
*.db_domain= ''
*.db_name= 'orcl'
*.db_recovery_file_dest= '/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size= 5501878272
*.deferred_segment_creation= FALSE
*.diagnostic_dest= '/u01/app/oracle'
*.dispatchers= '(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.event= '10949 trace name context forever:28401 trace name context forever,level 1:10849 trace name context forever, level 1:19823 trace name context forever, level 90'
*.open_cursors= 300
*.pga_aggregate_target= 196083712
*.processes= 150
*.result_cache_max_size= 0
*.sga_target= 784334848
*.db_unique_name= 'orcldg'
*.log_archive_config= 'dg_config=(ORCLDG,ORCL)'
*.log_archive_dest_1= 'location=/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=ORCLDG'
*.log_archive_dest_2= 'service=orcl async valid_for=(online_logfiles,primary_role) db_unique_name=ORCL'
*.log_archive_dest_state_2= 'ENABLE'
*.log_archive_format= '%t_%s_%r.arc'
*.log_archive_max_processes= 4
*.remote_login_passwordfile= 'exclusive'
*.fal_server= 'ORCL'
*.fal_client= 'ORCLDG'
*.db_file_name_convert= '+DATA' ,'/oradata'
*.log_file_name_convert= '+DATA' ,'/oradata'
*.standby_file_management= 'AUTO'
*.undo_tablespace= 'UNDOTBS1'
復(fù)制密碼文件至備庫(kù)(備庫(kù)執(zhí)行),要在 oracle 用戶下復(fù)制:
su - oracle
scp oracle@lucifer01:/u01/app/oracle/product/11.2.0/db/dbs/orapworcl1 /u01/app/oracle/product/11.2.0/db/dbs/orapworcl
5、主庫(kù)添加 stanby log 文件
set pagesize100
set line222
col member for a60
select * from v$logfile;
select * from v$log;
📢 注意:
stanby log 日志大小與 redo log 日志保持一致 stanby log 數(shù)量: standby logfile=(1+logfile組數(shù))*thread=(1+3)*1=4
組,需要加 4 組 standby logfile thread 要與 redo log 保持一致,如果是 rac,需要增加多個(gè) thread 對(duì)應(yīng)的 standby log
ALTER DATABASE ADD STANDBY LOGFILE thread 1
group 5 ( '+DATA' ) SIZE 120 M,
group 6 ( '+DATA' ) SIZE 120 M,
group 7 ( '+DATA' ) SIZE 120 M;
ALTER DATABASE ADD STANDBY LOGFILE thread 2
group 8 ( '+DATA' ) SIZE 120 M,
group 9 ( '+DATA' ) SIZE 120 M,
group 10 ( '+DATA' ) SIZE 120 M;
select * from v$standby_log;
6、備庫(kù)開(kāi)啟到 nomount 狀態(tài)
startup nomount pfile= '/tmp/initorcldg.ora' ;
3、RMAN DUPLICATE
rman 恢復(fù)備庫(kù):
rman target sys/oracle@orcl1 AUXILIARY sys/oracle@orcldg
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate auxiliary channel aux1 type disk;
allocate auxiliary channel aux2 type disk;
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
}
主庫(kù)設(shè)置 ADG 參數(shù):
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG= 'DG_CONFIG=(ORCL,ORCLDG)' ;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1= 'LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL' ;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2= 'SERVICE=orcldg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCLDG' ;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2= ENABLE ;
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT= '%t_%s_%r.arc' SCOPE= SPFILE;
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES= 4 ;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE= EXCLUSIVE SCOPE= SPFILE;
ALTER SYSTEM SET FAL_SERVER= ORCLDG;
ALTER SYSTEM SET FAL_CLIENT= ORCL;
ALTER SYSTEM SET DB_FILE_NAME_CONVERT= '/oradata' , '+DATA' SCOPE= SPFILE;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT= '/oradata' , '+DATA' SCOPE= SPFILE;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT= AUTO;
4、備庫(kù)開(kāi)啟日志應(yīng)用
-- 首先開(kāi)啟備庫(kù)至只讀狀態(tài)
alter database open read only;
-- 開(kāi)啟主備同步進(jìn)程
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION ;
-- 檢查備庫(kù)角色
select database_role, open_mode from v$database ;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY
-- 檢查保護(hù)模式,最大性能
SQL > SELECT protection_mode FROM v$database ;
PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCE
5、主庫(kù)開(kāi)啟 LOG_ARCHIVE_DEST_STATE_2
確認(rèn)主備之前沒(méi)有問(wèn)題,主庫(kù)開(kāi)啟同步:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2= ENABLE ;
寫(xiě)在最后
ADG 的搭建過(guò)程比較簡(jiǎn)單,有很多朋友經(jīng)常問(wèn),單機(jī)到單機(jī),RAC 到單機(jī),RAC到RAC的教程。其實(shí),這幾種搭建方式差別不大,只需要修改一些參數(shù)即可!