主库
# rac1
192.168.56.33 rac1
192.168.56.111 rac1-vip
10.10.10.1 rac1-priv
# rac2
192.168.56.44 rac2
192.168.56.112 rac2-vip
10.10.10.2 rac2-priv
# scan-ip
192.168.56.160 scan-ip
备库
# racdg1
192.168.56.77 racdg1
192.168.56.177 racdg1-vip
10.10.0.1 racdg1-priv
# racdg2
192.168.56.88 racdg2
192.168.56.188 racdg2-vip
10.10.0.2 racdg2-priv
# scan-ip
192.168.56.199 racdg-scan
主库添加standby redo
alter database add standby logfile thread 1
group 5('+DATA') size 50M,
group 6 ('+DATA') size 50M,
group 7 ('+DATA') size 50M;
alter database add standby logfile thread 2
group 8 ('+DATA') size 50M,
group 9 ('+DATA') size 50M,
group 10 ('+DATA') size 50M;
主库修改参数
alter database force logging;
alter system set db_file_name_convert='racdg','rac' scope=spfile sid='*';
alter system set fal_server='racdg' scope=spfile sid='*';
alter system set fal_client='rac' scope=spfile sid='*';
alter system set log_archive_config='dg_config=(rac,racdg)' scope=spfile sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=+DATA/rac/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac' scope=both sid='*';
alter system set log_archive_dest_2='SERVICE=racdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=racdg' scope=spfile sid='*';
alter system set log_file_name_convert='racdg','rac' scope=spfile sid='*';
alter system set standby_file_management='auto' scope=spfile sid='*';
alter system set remote_login_passwordfile='exclusive' scope=spfile sid='*';
备库oracle用户添加临时静态监听文件
SID_LIST_LISTENER_dg =
(SID_LIST =(SID_DESC =
(GLOBAL_DBNAME = racdg)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = racdg1)
)
)LISTENER_dg =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.77)(PORT = 1522))
)
启动静态监听lsnrctl start LISTENER_dg
主库oracle两节点添加tns
rac =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS=(PROTOCOL= TCP)(HOST=192.168.56.160)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = rac)))racdg =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS=(PROTOCOL = TCP)(HOST=192.168.56.199)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = racdg)))
dup =(DESCRIPTION =(ADDRESS=(PROTOCOL = TCP)(HOST=192.168.56.77)(PORT = 1522))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = racdg)))
备库oracle用户两节点添加tns
1节点rac =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS=(PROTOCOL= TCP)(HOST=192.168.56.160)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = rac)))
racdg =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS=(PROTOCOL = TCP)(HOST=192.168.56.199)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = racdg)))
dup =(DESCRIPTION =(ADDRESS=(PROTOCOL = TCP)(HOST=192.168.56.77)(PORT = 1522))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = racdg)))
racdg_local_listener =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS=(PROTOCOL = TCP)(HOST=racdg1-vip)(PORT = 1521))))
2节点
rac =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS=(PROTOCOL= TCP)(HOST=192.168.56.160)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = rac)))racdg =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS=(PROTOCOL = TCP)(HOST=192.168.56.199)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = racdg)))
dup =(DESCRIPTION =(ADDRESS=(PROTOCOL = TCP)(HOST=192.168.56.77)(PORT = 1522))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = racdg)))
racdg_local_listener =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS=(PROTOCOL = TCP)(HOST=racdg2-vip)(PORT = 1521))))
备库创建审计目录
mkdir -p /u01/app/oracle/admin/racdg/adump
scp传密码文件
备库参数文件
vi /tmp/pfile.ora
*.audit_file_dest='/u01/app/oracle/admin/racdg/adump'
*.control_files='+DATA/racdg/controlfile/stby.ctl'
*.cluster_database=TRUE
*.compatible='11.2.0.4.0'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_file_name_convert='rac','racdg'
*.db_name='rac'
*.db_unique_name='racdg'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='racdg'
*.fal_server='rac'
racdg1.instance_number=1
racdg2.instance_number=2
*.log_archive_config='DG_CONFIG=(racdg,rac)'
*.log_archive_dest_1='LOCATION=+DATA/rac/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdg'
*.log_archive_dest_2='SERVICE=rac LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=rac'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='rac','racdg'
*.open_cursors=300
*.pga_aggregate_target=4096m
*.processes=800
*.remote_login_passwordfile='exclusive'
*.sessions=885
*.sga_max_size=8192m
*.sga_target=8192m
*.standby_file_management='AUTO'
racdg2.thread=2
racdg1.thread=1
racdg2.undo_tablespace='UNDOTBS2'
racdg1.undo_tablespace='UNDOTBS1'
*.remote_listener='racdg-scan:1521'
启动备库到nomount
SQL> startup nomount pfile='/tmp/pfile.ora';
主库 duplicate
rman target sys/oracle auxiliary sys/oracle@dup
RMAN>duplicate target database for standby from active database nofilenamecheck;
备库启动mrp
alter database recover managed standby database using current logfile disconnect from session;
备库生成spfile
create spfile='+DATA/racdg/spfileracdg.ora' from pfile='/tmp/pfile.ora';
vi initracdg1.ora
vi initracdg2.ora
spfile='+DATA/racdg/spfileracdg.ora'
归档追平后使用spfile启动
startup
alter database recover managed standby database using current logfile disconnect from session;
集群添加资源
oracle用户
srvctl add database -d racdg -o /u01/app/oracle/product/11.2.0/dbhome_1
srvctl add instance -d racdg -i racdg1 -n racdg1
srvctl add instance -d racdg -i racdg2 -n racdg2
srvctl modify database -d racdg -r physical_standby -p '+DATA/racdg/spfileracdg.ora'
root用户
./crsctl modify res ora.racdg.db -attr AUTO_START=1
oracle用户
srvctl start database -d racdg
主备切换
主备库可切换状态
select inst_id,database_role,OPEN_MODE,switchover_status from gv$database;
查看备库应用延迟状态
set linesize 120
col NAME for a25
col VALUE for a18
col UNIT for a30
col TIME_COMPUTED for a20
col DATUM_TIME for a20
select * from v$dataguard_stats;
查看备库日志应用情况
select L.thread#,max(l.sequence#) cur_seq#,max(al.sequence#) max_applied_seqs
from v$log l,V$ARCHIVED_LOG al
where l.thread#=al.thread# and
l.status='CURRENT' and al.applied='YES'
group by l.thread#
order by 1,2;
检查备库dg进程状态
select status,process from v$managed_standby;
主库切换为备库
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY with session shutdown;
备库切换为主库ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown;
启动备库
startup开启备库实时应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE using current logfile DISCONNECT FROM SESSION;主库open状态
alter database open;
---关闭备库实时应用
alter database recover managed standby database cancel;