暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle容灾库部署方案

IT那活儿 2025-09-08
71
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!


部署背景

根据工作要求,需要搭建4A容灾库容灾库版本和源库一致,且升级Oracle官网最新补丁,搭建完成后,采用ADG方式同步数据

环境准备:

1)IP规划

Public IP

VIP

SCANIP

*.*.*.166

*.*.*.168

*.*.*.170

*.*.*.167

*.*.*.169

2)主机资源规划

名称

配置

CPU

24

内存

128GB

硬盘

本地目录:110GB
集中存储:10TB

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文件

注:必须配置静态监听,库为多个节点时,所有节点都需要配置静态监听。

#Standby1

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)
    )
 )

#Standby2

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文件,主库为多个节点时,所有主库都需要配置

#gz4adb1

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)
    )
  )

#gz4adb2

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文件,备库为多个节点时,所有备库都需要配置

#Standby1

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)
    )
  )

#Standby2

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
selectnametypevalue
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 提供的一种灾难恢复和高可用性解决方案,通过在主数据库和一个或多个备用数据库之间复制数据,实现数据保护和故障转移。


END


本文作者:事业二部(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论