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)

相关推荐
惊讶的猫3 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i4 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.4 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn4 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露4 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星4 小时前
sql语言之分组语句group by
java·数据库·sql
符哥20084 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql
C++ 老炮儿的技术栈4 小时前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
怣505 小时前
MySQL子查询零基础入门教程:从小白到上手(零基础入门版)
数据库·mysql