Oracle 26ai搭建ADG Far Sync日志备库

📢📢📢📣📣📣

作者:IT邦德

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

Oracle、PostgreSQL ACE

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

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

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

文章目录

  • [1.DG Far Sync概述](#1.DG Far Sync概述)
  • 2.配置环境
  • [3.Far Sync实例](#3.Far Sync实例)
    • [3.1 在主库上创建far sync实例的控制文件](#3.1 在主库上创建far sync实例的控制文件)
    • [3.2 创建Far Sync实例的pfile文件](#3.2 创建Far Sync实例的pfile文件)
    • [3.3 在主库上以pfile启动并配置standbylogfile](#3.3 在主库上以pfile启动并配置standbylogfile)
    • [3.4 生成spfile文件:](#3.4 生成spfile文件:)
    • [3.5 在far sync实例上配置pfile文件](#3.5 在far sync实例上配置pfile文件)
    • [3.6 创建监听和tnsnames.ora](#3.6 创建监听和tnsnames.ora)
    • [3.7 启动far sync到mount模式](#3.7 启动far sync到mount模式)
  • 4.备库搭建

1.DG Far Sync概述

Active Data Guard Far Sync是Oracle 12c引入的新功能(也称为Far Sync Standby)。

传统的ADG主要由主备库组成,redo数据直接传输到备库,待备库成功写入standbylog file才能保证数据的最大保护。如果主备库之间的网络带宽不足、备库性能较差等因素,不可避免会导致主备库之间的同步延迟,此时一旦出现主库宕机的情况,极易出现数据丢失。

12c开始可以在主备库之间添加一个Far Sync实例,redo数据先由主库传输到Far Sync实例,再由于Far Sync实例转发给备库。Far Sync实例只有密码文件、init参数文件和控制文件,而没有数据文件,只负责接收归档和redo而不需要应用,所以主库到Far Sync实例的同步非常迅速,基本没有延迟。

考虑到可能发生Data Guard 角色转换,即switchover/failover,可以在距离备库较近的地方也配置Far Sync实例,这个Far Sync实例只有在当前的备库切换为主库后才启用。

考虑到Far Sync实例的单点故障,可以在距离主库交近的地点配置2个Far Sync实例,起到备用的作用。

2.配置环境

强制日志、开归档

mkdir -p /u01/recovery

mkdir -p /u01/arch

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;

数据库开归档

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

alter system set db_recovery_file_dest_size=1800g;

alter system set db_recovery_file_dest='/u01/recovery';

开归档的方式如下:

alter system set log_archive_dest_1='location=/u01/arch';

SHUTDOWN IMMEDIATE;

STARTUP MOUNT;

ALTER DATABASE ARCHIVELOG;

ALTER DATABASE OPEN;

alter system switch logfile;

3.Far Sync实例

3.1 在主库上创建far sync实例的控制文件

ALTER DATABASE CREATE FAR SYNC

INSTANCE CONTROLFILE AS '/home/oracle/control01.ctl';

3.2 创建Far Sync实例的pfile文件

create pfile='/home/oracle/pfile.init' from spfile;

bash 复制代码
DB_UNIQUE_NAME=oradb
DB_FILE_NAME_CONVERT='/oradbst/','/oradb/'
LOG_FILE_NAME_CONVERT='/oradbst/','/oradb/'
FAL_SERVER=oradbst
LOG_ARCHIVE_CONFIG='DG_CONFIG=(oradb,oradbfs,oradbst)'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oradb'
LOG_ARCHIVE_DEST_2='SERVICE=oradbfs SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=oradbfs'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_3='SERVICE=oradbst ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=oradbst'
LOG_ARCHIVE_DEST_STATE_3=ALTERNATE
standby_file_management=AUTO

3.3 在主库上以pfile启动并配置standbylogfile

startup pfile='/home/oracle/pfile.init';

alter system set standby_file_management=manual;

添加standbylogfile

alter database add standby logfile group 4 ('/u01/app/oracle/oradata/ORADB/standby_redo04.log') size 200M;

alter database add standby logfile group 5 ('/u01/app/oracle/oradata/ORADB/standby_redo05.log') size 200M;

alter database add standby logfile group 6 ('/u01/app/oracle/oradata/ORADB/standby_redo06.log') size 200M;

alter database add standby logfile group 7 ('/u01/app/oracle/oradata/ORADB/standby_redo07.log') size 200M;

alter system set standby_file_management=AUTO;

3.4 生成spfile文件:

create spfile from pfile='/home/oracle/pfile.init';

将上面的控制文件和参数文件和密码文件复制到Far Sync实例所在的服务器。

将控制文件存放在/u01/app/oracle/oradata/oradbfs/control01.ctl

scp $ORACLE_HOME/dbs/orapworadb

192.168.2.12:/u01/app/oracle/product/23.26.1/dbhome_1/dbs/

scp $ORACLE_HOME/dbs/orapworadb

192.168.2.11:/u01/app/oracle/product/23.26.1/db_1/dbs/dbs

3.5 在far sync实例上配置pfile文件

bash 复制代码
DB_UNIQUE_NAME=oradbfs
DB_FILE_NAME_CONVERT='/ORADB/','/oradbfs/','/oradbst/','/oradbfs/'
LOG_FILE_NAME_CONVERT='/ORADB/','/oradbfs/','/oradbst/','/oradbfs/'
FAL_SERVER=oradb
LOG_ARCHIVE_CONFIG='DG_CONFIG=(oradb,oradbfs,oradbst)'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/arch 
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oradbfs'
LOG_ARCHIVE_DEST_2='SERVICE=oradbst 
ASYNC VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=oradbst'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
standby_file_management=AUTO
service_names=oradb

3.6 创建监听和tnsnames.ora

将备库和far sync实例创建好监听后一起写入主库的tnsnames.ora中并拷贝至每个节点

--tns配置如下:

bash 复制代码
oradb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.14)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oradb)
    )
  )
oradbfs =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.12)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oradb)
    )
  )
oradbst =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oradb)
    )
  )

--监听配置如下

bash 复制代码
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = oradb)
      (ORACLE_HOME = /u01/app/oracle/product/23.26.1/dbhome_1)
      (SID_NAME= oradb)
    )
   )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = oradb)
      (ORACLE_HOME = /u01/app/oracle/product/23.26.1/db_1)
      (SID_NAME= oradb)
    )
   )

3.7 启动far sync到mount模式

export ORACLE_SID=oradb

startup nomount pfile='/home/oracle/pfile.init';

rman target sys/oracle@oradb auxiliary sys/oracle@oradbfs

duplicate target database for farsync from active database;

4.备库搭建

在standby数据库上创建pfile文件

bash 复制代码
control_files='/u01/app/oracle/oradata/oradbst/control01.ctl'
DB_UNIQUE_NAME=oradbst
DB_FILE_NAME_CONVERT='/ORADB/','/oradbst/'
LOG_FILE_NAME_CONVERT='/ORADB/','/oradbst/'
FAL_SERVER='oradbfs','orad'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(oradb,oradbfs,oradbst)'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oradbst'
LOG_ARCHIVE_DEST_2='SERVICE=oradbfs ASYNC VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=oradb'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
standby_file_management=AUTO
service_names=oradb

恢复备库数据库

export ORACLE_SID=oradb

startup nomount pfile='/home/oracle/pfile.init';

rman target sys/oracle@oradb auxiliary sys/oracle@oradbst

duplicate target database for standby from active database dorecover nofilenamecheck;

在备库启动Managed Recovery Process

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

在主库上查询日志应用情况

set lines 300

col dest_name for a20

select dest_name,status,error from v$archive_dest;

将备库启动到ADG模式:

SQL> alter database recover managed standby database cancel;

SQL> alter database open;

SQL> alter pluggable database all open;

SQL> alter database recover managed standby database USING CURRENT LOGFILE disconnect from session;

SQL> select open_mode from v$database;

相关推荐
oradh8 小时前
Oracle闪回技术操作总结
数据库·oracle·oracle闪回技术操作总结·oracle闪回·flashback技术
ltl8 小时前
RocksDB 并发 Compaction 与 Rate Limiter
数据库
闻道且行之10 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
夏炳辉.11 小时前
PostgreSQL 高可用集群核心配置参数全解:从原生流复制到 Patroni 企业级方案
数据库·postgresql
努力的小雨12 小时前
KES 开启 SSL 前,证书、端口和客户端要一起验
数据库
DevOps老兵12 小时前
AI全栈知识07:向量数据库 - Milvus/Chroma实战
数据库·ai·milvus
这个DBA有点耶12 小时前
当数据库从“存储”走向“决策”:金仓数据库的融合架构之路
数据库·架构·aigc
smilejingwei12 小时前
Trae+SQLazy 实践 SQL 国产化移植:Oracle => 达梦
数据库·sql·oracle
意疏13 小时前
2026年远控软件安全横评:六款主流工具逐项核查——官方文档、一手实测与安全事件,全摊开
大数据·前端·数据库
名不经传的养虾人13 小时前
从0到1:企业级AI项目迭代日记 Vol.90|Agent变快了,Judge定下来了
大数据·数据库·人工智能·ai编程·企业ai