Oracle 26ai DataGuard 搭建(RAC到单机)

📢📢📢📣📣📣

作者:IT邦德

中国DBA联盟(ACDU)成员,15年DBA工作经验

Oracle、PostgreSQL ACE

CSDN博客专家及B站知名UP主,全网粉丝15万+

擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,

安装迁移,性能优化、故障应急处理

文章目录

  • [1. DG部署要求](#1. DG部署要求)
  • 2.主库相关配置
    • [2.1 强制日志模式](#2.1 强制日志模式)
    • [2.2 数据库的归档](#2.2 数据库的归档)
    • [2.3 添加standby redo](#2.3 添加standby redo)
  • 3.备库监听
  • 4.tnsnames配置
  • 5.密码文件
  • 6.参数文件
    • [6.1 主库参数](#6.1 主库参数)
    • [6.3 备库创建目录](#6.3 备库创建目录)
  • 7.创建dataguard数据库
  • [8.主备 SwitchOver 切换](#8.主备 SwitchOver 切换)
    • [8.1 主切换到备](#8.1 主切换到备)
    • [8.2. 备库切换主库](#8.2. 备库切换主库)
    • [8.3 启动主备库](#8.3 启动主备库)

1. DG部署要求

主库安装好Oracle 26ai软件,并DBCA建好的容器PDB。

备库仅安装好数据库软件即可。

确保备库的SID和主库一致,其他环境变量也保证一致,方便后期同步。

配置物理standby,使用最佳性能模式。

Data Guard是Oracle高可用性HA的重要解决方案。针对不同的系统保护需求,DG提供了三种不同类型的保护模式(Protection Mode),分别为:最大保护(Maximum Protection)、最大可用(Maximum Availability)和最大性能(Maximum performance)

依然采用使用 Duplicate 在线复制的方式搭建 ADG,无需 RMAN 备份,可以通过 RMAN Duplicate 直接在线从主库拷贝文件。

这里建议源端目标端均使用 OMF

2.主库相关配置

2.1 强制日志模式

SQL> set linesize 300

SQL> select name,open_mode,log_mode,force_logging,DATABASE_ROLE,

switchover_status from v$database;

SQL> alter database force logging;

2.2 数据库的归档

如果想开快速恢复区的设置,做如下操作

alter system set db_recovery_file_dest_size=1800g;

alter system set db_recovery_file_dest='+ARCH';

开归档的方式如下:

alter system set log_archive_dest_1='location=+ARCH';

SHUTDOWN IMMEDIATE;

STARTUP MOUNT;

ALTER DATABASE ARCHIVELOG;

ALTER DATABASE OPEN;

alter system archive log current;

2.3 添加standby redo

实际上就是与主库接收到的重做日志相对应,也就是说备库调用RFS进程将从主库接收到的重做日志按顺序写入到standby logfile,在主库创建standby logfile是便于发生角色转换后备用。

sandby redo log创建原则:

a)确保standby redo log的大小与主库online redo log的大小一致

b)如主库为单实例数据库:standby redo log组数=主库日志组总数+1

c)如果主库是RAC数据库:standby redo log组数=(每线程的日志组数+1)*最大线程数

d)不建议复用standby redo log,避免增加额外的I/O以及延缓重做传输

复制代码
SQL> set linesize 300
SQL> col member for a40
SQL> select group#,type,member from v$logfile;
SQL> select THREAD#,GROUP#,BYTES/1024/1024 MB,STATUS from v$log;
SQL> select GROUP#,THREAD#,BYTES,USED,ARCHIVED,STATUS from v$standby_log;

-- Thread 1 (假设在线日志组数=2,大小=200MB)
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
GROUP 5 ('+DATA', '+ARCH') SIZE 200M,
GROUP 6 ('+DATA', '+ARCH') SIZE 200M,
GROUP 7 ('+DATA', '+ARCH') SIZE 200M

-- Thread 2 (假设在线日志组数=2,大小=200MB)
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2
GROUP 8 ('+DATA', '+ARCH') SIZE 200M,
GROUP 9 ('+DATA', '+ARCH') SIZE 200M,
GROUP 10 ('+DATA', '+ARCH') SIZE 200M

3.备库监听

整个DG的redo传输服务,都依赖于Oracle Net,因此需要为备库配置监听,配置方法多种多样,可用netmgr,netca,以及直接编辑listener.ora文件

复制代码
cd $ORACLE_HOME/network/admin/
vi listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = PROD)
      (ORACLE_HOME = /opt/oracle/product/26ai/dbhome_1)
      (SID_NAME= PROD)
    )
   )
lsnrctl stop
lsnrctl start

4.tnsnames配置

复制代码
注意:主备库保持一致
prod_pd =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.20)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PROD)
    )
  )  
prod_st =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PROD)
    )
  )

5.密码文件

由于要求主库与备库sys使用相同的密码,在此处,我们直接复制了主库的密码文件到备库

rac 的密码文件通常存放于 ASM 盘中,查看对应的密码文件位置:

复制代码
srvctl config database -d prod | grep PASSWORD

Password file: +DATA/PROD/PASSWORD/pwdprod.256.1224113223

使用asmcmd 进入到 ASM 磁盘组:
asmcmd -p
pwcopy +DATA/PROD/PASSWORD/pwdprod.256.1224113223 /home/grid/

将密码文件拷贝到备库,并且重命名,命名规则为 orapw+sid

复制代码
chown oracle:oinstall /home/grid/pwdprod.256.1224113223
mv /home/grid/pwdprod.256.1224113223 /home/oracle/orapwPROD
scp /home/oracle/orapwPROD  oracle@192.168.2.10:/opt/oracle/product/26ai/dbhome_1/dbs

6.参数文件

6.1 主库参数

主库生成pfile文件

SQL> create pfile='/home/oracle/pfile_prod.ora' from spfile;

主库修改参数(重启生效)

复制代码
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(PROD,PRODDG)' scope=both;
alter system set 
LOG_ARCHIVE_DEST_1='LOCATION=+ARCH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD' scope=both;
alter system set 
LOG_ARCHIVE_DEST_2='SERVICE=prod_st
 LGWR ASYNC 
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PRODDG' scope=both;
alter system set FAL_CLIENT='prod_pd' scope=both;
alter system set FAL_SERVER='prod_st' scope=both;
alter system set standby_file_management=AUTO scope=both;

6.2 备库参数

主库的pfile文件拷贝至备库

oracle@primary \~$ pwd

/home/oracle

oracle@primary \~$ scp pfile_prod_new.ora 192.168.2.10:/home/oracle

利用新建的实例创建pfile,然后修改

SQL> create pfile from spfile;

备库参数:

vi /home/oracle/initPROD.ora

复制代码
*.__oracle_base='/opt/oracle'#ORACLE_BASE set from environment
*.__pga_aggregate_target=1644167168
*.__sga_target=4898947072
*.compatible='23.6.0'
*.control_files='/u01/oracle/oradata/PROD/control01.ctl','/u01/oracle/oradata/PROD/control02.ctl'
*.db_block_size=8192
*.db_unique_name='PRODDG'
*.db_name='PROD'
*.service_names='PROD'
*.log_archive_config='dg_config=(PROD,PRODDG)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/oracle/oradata/arch 
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRODDG'
*.LOG_ARCHIVE_DEST_2='SERVICE=prod_pd LGWR 
ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PROD'
*.diagnostic_dest='/opt/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLCDBXDB)'
*.enable_pluggable_database=true
*.FAL_CLIENT='prod_st'
*.FAL_SERVER='prod_pd'
*.standby_file_management=AUTO
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=1554m
*.processes=640
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=4660m
*.undo_tablespace='UNDOTBS1'
*.db_create_file_dest='/u01/oracle/oradata/PROD'
*.db_create_online_log_dest_1='/u01/oracle/oradata/PROD'

6.3 备库创建目录

mkdir -p /u01/oracle/oradata/PROD

mkdir -p /u01/oracle/oradata/arch

备库使用spfile启动库

sqlplus / as sysdba

startup pfile='/home/oracle/initPROD.ora' nomount;

创建pifle后重新启库

create spfile from pfile='/home/oracle/initPROD.ora';

shutdown immediate;

startup nomount;

7.创建dataguard数据库

备库RMAN登陆,做以下操作

复制代码
rman target sys/oracle@prod_pd AUXILIARY sys/oracle@prod_st

RMAN> run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate channel prmy5 type disk;
allocate channel prmy6 type disk;
allocate auxiliary channel aux1 type disk;
allocate auxiliary channel aux2 type disk;
allocate auxiliary channel aux3 type disk;
allocate auxiliary channel aux4 type disk;
allocate auxiliary channel aux5 type disk;
allocate auxiliary channel aux6 type disk;
duplicate target database for standby from active database dorecover nofilenamecheck;
}

8.主备 SwitchOver 切换

8.1 主切换到备

这个过程留意alert日志,然后关闭实例2,去备库确认切换信息

SQL> alter database commit to switchover to physical standby with session shutdown;

8.2. 备库切换主库

SQL> alter database commit to switchover to primary with session shutdown;

8.3 启动主备库

--打开新的主库

alter database open;

select name,open_mode,database_role from v$database;

打开新的备库:

srvctl start db -d PROD

alter database recover managed standby database using current logfile disconnect from session;

select name,open_mode,database_role from gv$database;

相关推荐
计算机安禾1 小时前
【数据库系统原理】第19篇:计算机存储层次结构与数据库文件的物理组织
数据库·oracle
JAVA面经实录9172 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
摇滚侠2 小时前
mariadb-libs 被 mysql-community-libs-5.7.28-1.el7.x86_64 取代
数据库·mysql·mariadb
DIY源码阁3 小时前
JavaSwing饮品管理系统 - MySQL版
java·数据库·mysql·eclipse
专注搞钱3 小时前
GPT-4o写设备Recipe:从3小时到10分钟
数据库·人工智能·gpt·半导体
东风破1374 小时前
达梦数据库实战:备份恢复与数据迁移全攻略(实例初始化、服务注册、路径迁移)
数据库·chrome
SelectDB技术团队4 小时前
2026 SelectDB AI 产品发布会:Agent Native 数据基础设施能力全景发布
数据库·人工智能·agent·apache doris·selectdb
爱吃羊的老虎4 小时前
【数据库】模块一:数据库基础与关系代数
数据库
dishugj5 小时前
iSCSI + Multipath + ASM:Oracle RAC 共享存储技术链详解
数据库·oracle
yoothey5 小时前
MySQL事务机制解析 - 面试高分知识点
数据库·mysql·面试