部署背景
根据工作要求,需要搭建4A容灾库,容灾库版本和源库一致,且升级Oracle官网最新补丁,搭建完成后,采用ADG方式同步数据。
环境准备:
1)IP规划
Public IP | VIP | SCANIP |
*.*.*.166 | *.*.*.168 | *.*.*.170 |
*.*.*.167 | *.*.*.169 |
2)主机资源规划
名称 | 配置 |
CPU | 24 |
内存 | 128GB |
硬盘 | 本地目录:110GB |
3)自行安装容灾集群软件及数据库软件
配置容灾
2.1 前期条件
1)主库是生产库,备库只安装数据库软件,利用duplicate复制命令将主库生成备库
2)主库和备库的db_name必须一样,db_unique_name是唯一区分每个节点表示,不能一样
3)备库不能开启闪回
select flashback_on from v$database;
4)主备库必须开启归档,强制日志
select log_mode,force_logging from v$database;
2.2 添加standby logfile
1)主库添加standby logfile
注:此操作为了主备切换进行,要求备库standby log file比主库log file多一组,且大小一样。
select a.group#,b.member,a.bytes/1024/1024||'M' from v$log a,v$logfile b where a.group#=b.group#;
2)添加standby logfile(5组)
alter databaseaddstandbylogfile'+DATA'size200M;
alterdatabaseaddstandbylogfile'+DATA'size200M;
alterdatabaseaddstandbylogfile'+DATA'size200M;
alterdatabaseaddstandbylogfile'+DATA'size200M;
alterdatabaseaddstandbylogfile'+DATA'size200M;
2.3 配置主备库静态监听
1)添加主库listener.ora文件
注:必须配置静态监听,主库为多个节点时,所有节点都需要配置静态监听。
#vga4adb1
LISTENER_DG =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.145)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.147)(PORT = 1522))
(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_LISTENER_DG =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = gz4adb)
(ORACLE_HOME = /home/db/app/product/12.2.0)
(SID_NAME =gz4adb1)
)
)
#vga4adb2
LISTENER_DG =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.146)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.148)(PORT = 1522))
(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_LISTENER_DG =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = gz4adb)
(ORACLE_HOME = /home/db/app/product/12.2.0)
(SID_NAME =gz4adb2)
)
)
2)添加备库listener.ora文件
注:必须配置静态监听,备库为多个节点时,所有节点都需要配置静态监听。
LISTENER_DG =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.166)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.168)(PORT = 1522))
(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_LISTENER_DG =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = gz4adb)
(ORACLE_HOME = /home/db/app/product/12.2.0)
(SID_NAME =gz4adbdg1)
)
)
LISTENER_DG =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.166)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.168)(PORT = 1522))
(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC1522))
)
)
SID_LIST_LISTENER_DG =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = gz4adb)
(ORACLE_HOME = /home/db/app/product/12.2.0)
(SID_NAME =gz4adbdg2)
)
)
3)添加主库tnsnames.ora文件,主库为多个节点时,所有主库都需要配置
gz4adbdg1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.166)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.168)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =gz4adbdg)
)
)
gz4adbdg1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.166)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.168)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =gz4adbdg)
)
)
4)添加备库tnsnames.ora文件,备库为多个节点时,所有备库都需要配置
gz4adb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.145)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.147)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =gz4adb)
)
)
gz4adb1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.146)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.*.148)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME =gz4adb)
)
)
2.4 配置主库DG参数
alter systemset LOG_ARCHIVE_CONFIG='DG_CONFIG=(gz4adb,gz4adbdg)'scope=bothsid='*';
altersystemset LOG_ARCHIVE_DEST_1='LOCATION=+ARCH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=gz4adb'scope=bothsid='*';
altersystemset LOG_ARCHIVE_DEST_2='SERVICE=gz4adbdg1 LGWR ASYNC NET_TIMEOUT=30 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=gz4adbdg'scope=bothsid='*';
altersystemset FAL_SERVER='gz4adbdg'scope=bothsid='*';
altersystemset fal_client='gz4adb'scope=bothsid='*';
altersystemset
DB_FILE_NAME_CONVERT='+DATA','+DATA1'scope=spfilesid='*';
altersystemset
LOG_FILE_NAME_CONVERT='+ARCH','+DATA1'scope=spfilesid='*';
altersystemset standby_file_management=AUTOscope=bothsid='*';
2.5 同步主库相关文件至备库
1)将主库参数文件、密码文件传至备库
2)修改参数文件db_unique_name ,主备的db_name一样,db_unique_name不一样
*.control_files='+DATA1'
*.db_block_size=8192
*.db_create_file_dest='+DATA1'
*.db_domain=''
*.db_file_name_convert='+DATA','+DATA1'
*.db_name='gz4adb'
*.db_unique_name='gz4adbdg'
*.db_recovery_file_dest='+DATA1'
*.db_recovery_file_dest_size=4621074432
*.fal_client='gz4adb'
*.fal_server='gz4adbdg'
*.log_archive_config='DG_CONFIG=(gz4adb,gz4adbdg)'
*.log_archive_dest_1='LOCATION=+DATA1 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=gz4adb'
*.log_archive_dest_2='SERVICE=gz4adb1 LGWR ASYNC NET_TIMEOUT=30 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=gz4adb'
*.log_archive_format='%t_%s_%r.dbf'
*.log_file_name_convert='+DATA1','+ARCH'
*.remote_login_passwordfile='exclusive'
*.standby_file_management='AUTO'
3)启动容灾实例到nomount状态
startup nomount pfile='/home/oracle/initgz4adbdg.ora';
4)生成spfile
create spfile from pfile;
使用RMAN 复制容灾库
3.1 Rman登录主备库
#在主库上操作,主库为open状态,备库为nomount 状态,监听为启动状态。
#!/bin/bash
nohup sh `rman target sys/paasword@gz4adb auxiliary sys/paasword@gz4adbdg>/home/oracle/rman.log <<EOF
run{
duplicate target database for standby from active database nofilenamecheck;
}
EOF ` &
3.2 待复制完成备库后备库会启动成open状态
主备同步检查
4.1 启动备库日志应用
recover managed standby database using current logfile disconnect;
4.2 查看主备库状态
select name,open_mode,protection_mode,database_role,switchover_status from gv$database;
4.3 检查DG参数
set lines300
set pages 300
colnamefor a30
colvaluefor a100
selectname, type, value
from v$parameter
wherenamein ('db_file_name_convert',
'log_file_name_convert',
'log_archive_config',
'log_archive_dest_1',
'log_archive_dest_2',
'log_archive_dest_3',
'log_archive_dest_state_1',
'log_archive_dest_state_2',
'log_archive_dest_state_3',
'log_archive_format',
'log_archive_max_processes',
'standby_file_management',
'fal_server',
'fal_client',
'db_name',
'service_names',
'db_unique_name',
'db_file_name_convert',
'log_file_name_convert',
'remote_login_passwordfile',
'dg_broker_config_file1',
'dg_broker_config_file2',
'dg_broker_start',
'db_create_file_dest');
4.4 日志应用对比
select 'Primary :'"DB Role",thread#,max(sequence#)
from v$archived_log
where standby_dest='NO'
groupbythread#
union
select'Standby :'"DB Role",thread#,max(sequence#)
from v$archived_log
where standby_dest='YES'and applied='YES'
groupbythread#
orderbythread#;
配置DG Broker
DG Broker 是 Oracle 数据库中的 Data Guard Broker 的简称,是一种管理和监控 Oracle Data Guard 高可用性解决方案的工具。
Data Guard 是 Oracle 提供的一种灾难恢复和高可用性解决方案,通过在主数据库和一个或多个备用数据库之间复制数据,实现数据保护和故障转移。

本文作者:事业二部(上海新炬中北团队)
本文来源:“IT那活儿”公众号





