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; ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b8c4440dff4b484891d73a43739dacd3.png) ## 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; } ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7e70e9fec3d444bdb7752dc0411d8fd9.png) ## 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; ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/eb4843e2af204932acdd5b58e467a256.png)

相关推荐
jiayou6415 小时前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤1 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区2 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号33 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏3 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐3 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再3 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest3 天前
数据库SQL学习
数据库·sql
jnrjian3 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle