Oracle 11gR2 Data Guard 搭建 (一主一从)

一、环境规划

项目主库 Primary备库 Standby
操作系统CentOS Linux 7.9.2009CentOS Linux 7.9.2009
数据库版本11.2.0.411.2.0.4
IP地址192.168.10.101192.168.10.102
db_nameorclorcl
instance_nameorclorcl
db_unique_nameorcl_priorcl_sby
tnsnameorcl_priorcl_sby
service_names(服务名)orclorcl
提前准备安装数据库软件、DBCA建库、监听只安装数据库软件

‌DataGuard主从库的命名通常遵循以下规则‌(参考): ‌

主库(Primary Database)‌:通常命名为primary或pri。 ‌

备库(Standby Database)‌:通常命名为standby或sby。

说明

  • 主库和备库建议采用相同服务器配置。
  • 主库和备库建议采用相同操作系统版本。
  • 主库和备库需要采用相同数据库版本(含 PSU)。
  • db_name 相同。
  • db_unique_name 不同。

二、主库参数配置

1. 启用强制记录日志 (Force Logging)

  • 查看

    SELECT log_mode, force_logging FROM v$Database;
    
  • 启用

    ALTER DATABASE FORCE LOGGING;
    

2. 启用归档模式

  • 查看

    ARCHIVE LOG LIST;
    SELECT log_mode FROM v$database;
    
  • 启用

    SHUTDOWN IMMEDIATE;
    STARTUP MOUNT;
    ALTER SYSTEM SET log_archive_dest_1='location=/u01/archivelog/orcl';
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
    

3. 配置主库监听和 TNS

监听器配置
  • 监听文件默认路径$ORACLE_HOME/network/admin/listener.ora

  • 配置静态监听,增加 SID_LIST_LISTENER 部分,然后使用 lsnrctl reload 重新加载监听器配置。

  • 示例配置

    LISTENER =
    (DESCRIPTION_LIST =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.101)(PORT = 1521))
      )
    )
    SID_LIST_LISTENER =
    (SID_LIST =
      (SID_DESC =
        (GLOBAL_DBNAME = orcl) -- GLOBAL_DBNAME 对应监听里的服务名
        (SID_NAME = orcl)
        (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      )
    )
    ADR_BASE_LISTENER = /u01/app/oracle
    
TNS 配置
  • TNS 文件默认路径$ORACLE_HOME/network/admin/tnsnames.ora

  • 方便主备切换服务名设置相同,配置如下:

    orcl_pri =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.101)(PORT = 1521))
      (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = orcl)
      )
    )
    
    orcl_sby =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.102)(PORT = 1521))
      (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = orcl)
      )
    )
    

4. 配置主库参数

  • 修改归档文件名后缀为 .arc(可选)

    ALTER SYSTEM SET log_archive_format='%t_%s_%r.arc' SCOPE=SPFILE;
    
  • 检查 db_unique_name

    SHOW PARAMETER db_unique_name;
    ALTER SYSTEM SET db_unique_name='orcl_pri' SCOPE=SPFILE;
    
  • 修改 log_archive_config 参数,括号中为主备库的 db_unique_name

    ALTER SYSTEM SET log_archive_config='DG_CONFIG=(orcl_pri,orcl_sby)' SCOPE=BOTH;
    
  • 配置 log_archive_dest_1,主库归档位置

    ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/archivelog/orcl VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_pri' SCOPE=BOTH;
    
  • 配置 log_archive_dest_2,备库归档位置,采用 LGWR 异步传输方式:

    ALTER SYSTEM SET log_archive_dest_2='SERVICE=orcl_sby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_sby' SCOPE=BOTH;
    
  • 修改归档日志进程的最大数量(可选)

    ALTER SYSTEM SET log_archive_max_processes=30 SCOPE=BOTH;
    SHOW PARAMETER log_archive_max_processes;
    
  • 检查数据库口令文件的使用模式

    SHOW PARAMETER remote_login_passwordfile;
    ALTER SYSTEM SET remote_login_passwordfile=EXCLUSIVE SCOPE=SPFILE;
    
  • 修改 /etc/hosts 文件,追加主备库 IP 与主机名对应关系,备库同样配置:

    echo "192.168.10.101 db1" >> /etc/hosts
    echo "192.168.10.102 db2" >> /etc/hosts
    
  • 修改 db_file_name_convert 参数,主备库数据文件名称和路径对应关系:

    ALTER SYSTEM SET db_file_name_convert='/oracle/app/oracle/oradata/orcl_sby', '/oradata/datafile/orcl/' SCOPE=SPFILE;
    
  • 修改 log_file_name_convert 参数,主备库日志文件名称和路径对应关系:

    ALTER SYSTEM SET log_file_name_convert='/u01/app/oracle/oradata/orcl_sby', '/oradata/datafile/orcl/' SCOPE=SPFILE;
    
  • 设置 standby_file_management 为自动

    ALTER SYSTEM SET standby_file_management=auto;
    
  • 修改 fal_clientfal_server

    ALTER SYSTEM SET fal_client='orcl_pri' SCOPE=BOTH; -- 本地 TNS
    ALTER SYSTEM SET fal_server='orcl_sby' SCOPE=BOTH; -- 备库 TNS
    

三、备库配置

1. 密码文件

  • 主库和备库的 SYS 密码必须一致

    • 方式 1:使用 orapwd 设置相同密码:

      orapwd file=orapworcl password=<password>
      
    • 方式 2:将主库密码文件复制到备库 $ORACLE_HOME/dbs 目录下,并修改密码文件名为 orapworcl

      scp <主库密码文件> <备库用户>@<备库IP>:/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl
      

2. 设置 pfile 文件并启动到 nomount 状态

  • dbs 目录下创建 initorcl.ora 并参考主库添加参数:

    db_name='orcl'
    service_names='orcl'
    db_unique_name='orcl_sby'
    pga_aggregate_target=191889408 -- 设置跟主库一样
    sga_target=575668224 -- 设置跟主库一样
    audit_file_dest='/u01/app/oracle/admin/orcl/adump' -- 创建这个路径
    compatible='11.2.0.4.0' -- 兼容性参数 主备库要保持一致
    log_archive_format='%t_%s_%r.arc'
    control_files='/u01/app/oracle/oradata/orcl/control01.ctl', '/u01/app/oracle/oradata/orcl/control02.ctl' -- 注意修改文件路径中的实例名
    log_archive_config='DG_CONFIG=(orcl_pri,orcl_sby)'
    log_archive_dest_1='LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_sby'
    log_archive_dest_2='SERVICE=orcl_pri LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_pri' -- 日志传输为 LGWR ASYNC 异步传输
    db_file_name_convert='/oradata/datafile/orcl/', '/u01/app/oracle/oradata/orcl' -- 前面是对方的,后面是本地的
    log_file_name_convert='/oradata/datafile/orcl/', '/u01/app/oracle/oradata/orcl'
    fal_client='orcl_sby' -- 该参数与主库设置相反
    fal_server='orcl_pri' -- 该参数与主库设置相反
    standby_file_management='AUTO'
    
  • 使用刚才编辑的 pfile 创建 spfile:

    STARTUP NOMOUNT PFILE='/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora';
    CREATE SPFILE FROM PFILE;
    
  • 关闭数据库正常启动到 nomount 状态:

    SHUTDOWN IMMEDIATE;
    STARTUP NOMOUNT;
    
  • 查看是否使用 spfile 启动:

    SHOW PARAMETER spfile;
    

3. 备库配置监听与 TNS

监听器配置
  • 监听文件默认路径$ORACLE_HOME/network/admin/listener.ora

  • 配置静态监听,增加 SID_LIST_LISTENER 部分,然后使用 lsnrctl reload 重新加载监听器配置。

  • 示例配置

    LISTENER =
    (DESCRIPTION_LIST =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.102)(PORT = 1521))
      )
    )
    SID_LIST_LISTENER =
    (SID_LIST =
      (SID_DESC =
        (GLOBAL_DBNAME = orcl)
        (SID_NAME = orcl_sby)
        (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
      )
    )
    ADR_BASE_LISTENER = /u01/app/oracle
    DIAG_ADR_ENABLED_LISTENER = OFF
    
TNS 配置
  • TNS 文件默认路径$ORACLE_HOME/network/admin/tnsnames.ora

  • 方便主备切换服务名设置相同,配置如下:

    ORCL_PRI =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.101)(PORT = 1521))
      (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = orcl)
      )
    )
    
    ORCL_SBY =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.102)(PORT = 1521))
      (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = orcl)
      )
    )
    

4. 测试 TNS

  • 主库和备库分别测试

    tnsping orcl_pri
    tnsping orcl_sby
    sqlplus sys/oracle@orcl_pri as sysdba
    sqlplus sys/oracle@orcl_sby as sysdba
    
  • 注意:如果出现 TNS-12543 错误,关闭防火墙再试。如果 tnsping 出现 ORA-12541 错误,检查一下 hosts 文件里面是否配置正常,备库也要配置好。

四、使用 Duplicate 创建物理 Standby

备库执行

  • 连接 RMAN 并连接辅助(auxiliary)实例,备库目前是 nomount 状态

    rman target sys/oracle@orcl_pri auxiliary sys/oracle@orcl_sby
    
  • 执行复制

    DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE NOFILENAMECHECK;
    
  • 注意

    1. 第一次 duplicate 时遇到 ORA-17628 错误,排查后发现为需要提前创建的文件夹没有创建。
    2. 之前设置过 db_file_name_convertlog_file_name_convert,这里就会按照设置的地址拷贝。

五、添加 Standby 日志组并开启同步

1. 主备库添加 Standby 日志组

  • standby 日志组数量:redo 日志组数量 + 1

  • 添加前需要查看已有的日志组号

    SELECT * FROM v$log;
    
  • 主库添加

    ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/oradata/datafile/orcl/sby_redo05.log') SIZE 500M;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/oradata/datafile/orcl/sby_redo06.log') SIZE 500M;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/oradata/datafile/orcl/sby_redo07.log') SIZE 500M;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 8 ('/oradata/datafile/orcl/sby_redo08.log') SIZE 500M;
    
  • 备库添加

    ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/oracle/app/oracle/oradata/orcl/sby_redo05.log') SIZE 500M;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/oracle/app/oracle/oradata/orcl/sby_redo06.log') SIZE 500M;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/oracle/app/oracle/oradata/orcl/sby_redo07.log') SIZE 500M;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 8 ('/oracle/app/oracle/oradata/orcl/sby_redo08.log') SIZE 500M;
    
  • 查看 standby 日志

    SELECT * FROM v$standby_log;
    
  • 打开备库

    ALTER DATABASE OPEN;
    

2. 设置同步

  • 开启实时同步(启动 MRP 进程),备库操作

    -- 开启 real time apply
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; -- 简写
    
  • 开启同步,日志切换才会同步

    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
    
  • 停止同步(关闭 MRP 进程)

    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    

3. 主备库检查模式

  • 查询主备库状态

    SELECT open_mode, database_role, protection_mode, protection_level FROM v$database;
    
  • 备库显示

    • open_mode:备库标识为 READ ONLY WITH APPLY,表示应用了日志。如果关闭同步则这里只有 READ ONLY
    • database_role:标识为主库还是备库,此时为物理备库。
    • protection_modeprotection_level 此时标识都是最大性能模式。

六、总结

通过以上步骤,可以成功搭建一个稳定的 Data Guard 环境,确保数据的一致性和高可用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/924719.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP 去掉特殊不可见字符 “\u200e“

描述 最近在排查网站业务时&#xff0c;发现有数据匹配失败的情况 肉眼上完全看不出问题所在 当把字符串 【M24308/23-14F‎】复制出来发现 末尾有个不可见的字符 使用删除键或左右移动时才会发现 最后测试通过 var_dump 打印 发现这个"空字符"占了三个长度 &#xf…

【C#设计模式(15)——命令模式(Command Pattern)】

前言 命令模式的关键通过将请求封装成一个对象&#xff0c;使命令的发送者和接收者解耦。这种方式能更方便地添加新的命令&#xff0c;如执行命令的排队、延迟、撤销和重做等操作。 代码 #region 基础的命令模式 //命令&#xff08;抽象类&#xff09; public abstract class …

使用zabbix监控k8s

一、 参考文献 小阿轩yx-案例&#xff1a;Zabbix监控kubernetes云原生环境 手把手教你实现zabbix对Kubernetes的监控 二、部署经验 关于zabbix监控k8s&#xff0c;总体来说是分为两块内容&#xff0c;一是在k8s集群部署zabbix-agent和zabbix- proxy。二是在zabbix进行配置。…

ThingsBoard规则链节点:GCP Pub/Sub 节点详解

目录 引言 1. GCP Pub/Sub 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 数据传输 3.2 数据分析 3.3 事件通知 3.4 任务调度 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0…

10.机器学习--集成学习

机器学习领域有一个强大的思路&#xff1a;集成学习&#xff0c;该方法在诸多机器学习竞赛中往往能够获得最优的结果。集成学习的基本思想实际上非常简单&#xff1a;三个臭皮匠顶一个诸葛亮&#xff0c;即将多个模型组合在一起获得的效果往往要强于单一模型。 目录 集成学习…

结构体详解+代码展示

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…

深度解析猎板 PCB树脂塞孔工艺

PCB 的树脂塞孔工艺是一种在印制电路板制造过程中广泛应用的重要技术&#xff0c;以下是猎板PCB批量工厂对PCB树脂塞孔该工艺的详细介绍&#xff1a; 猎板 PCB树脂塞孔工艺目的 防止短路&#xff1a;在 PCB 制造中&#xff0c;若过孔未被有效封堵&#xff0c;锡膏可能会从孔内…

扫雷-完整源码(C语言实现)

云边有个稻草人-CSDN博客 在学完C语言函数之后&#xff0c;我们就有能力去实现简易版扫雷游戏了&#xff08;成就感满满&#xff09;&#xff0c;下面是扫雷游戏的源码&#xff0c;快试一试效果如何吧&#xff01; 在test.c里面进行扫雷游戏的测试&#xff0c;game.h和game.c…

当前就业形势下C++方向后端开发学习指南

文章目录 1. C后端开发的职业方向1.1 C的应用领域1.2 后端开发的职业选择 2. 当前就业形势分析2.1 C开发者的市场需求2.2 C开发者的薪资水平 3. 学习路线3.1 入门阶段&#xff1a;掌握基础知识3.2 进阶阶段&#xff1a;掌握后端开发的核心技术3.2.1 数据库与C3.2.2 网络编程 3.…

FFmpeg 简介与编译

1. ffmpeg 简介&#xff1a; FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec&#xff0c;为了保证高可移…

【论文复现】BERT论文解读及情感分类实战

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ BERT论文解读及情感分类实战 简介BERT文章主要贡献BERT模型架构技术细节任务1 Masked LM&#xff08;MLM&#xff09;任务2 Next Sentence P…

Flink高可用配置(HA)

从Flink架构中我们可以看到,JobManager这个组件非常重要,是中心协调器,负责任务调度和资源管理。默认情况下,每个Flink集群只有一个JobManager实例。这会产生单点故障(SPOF):如果JobManager崩溃,则无法提交新程序,正在运行的程序也会失败。通过JobManager的高可用性,…

【Rabbitmq篇】高级特性----事务,消息分发

目录 事务 消息分发 应用场景 1. 限流 2.负载均衡 事务 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制.SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,要么全部成功,要么全部失败. 何为原…

优先算法 —— 双指针系列 - 有效三角形的个数

1. 有效三角形的个数 题目链接&#xff1a; 611. 有效三角形的个数 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/valid-triangle-number/description/ 2. 题目解析 以示例1为例&#xff1a; 3. 优化 我们都知道&#xff0c;判断三角形的方法就是两边相…

【H2O2|全栈】Node.js(2)

目录 前言 开篇语 准备工作 npm 概念 常见指令 项目中的包 创建项目 启动项目 服务器搭建 express 基本步骤 搭建应用 创建路由 监听端口 启动服务器 面试相关 结束语 前言 开篇语 本系列博客分享Node.js的相关知识点&#xff0c;本章讲解npm与服务器的简单…

Android 13 Aosp 默认允许应用动态权限

图库 frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java 修改 public void grantDefaultPermissions(int userId) {DelayingPackageManagerCache pm new DelayingPackageManagerCache();grantPermissionsToSysCompon…

【NLP高频面题 - LLM架构篇】LLM对Transformer都有哪些优化?

【NLP高频面题 - LLM架构篇】LLM对Transformer都有哪些优化&#xff1f; ⚠︎ 重要性&#xff1a;★★★ &#x1f4af; NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、…

DAY139权限提升-Linux系统权限提升篇Vulnhub辅助项目SUID权限SUDO指令版本漏洞

Linux提权 1、内核溢出提权 2、suid、sudo、nfs、path、ld_preload、cron、lxd、capability、rbash等 3、数据库类型提权 Linux&#xff1a; 系统用户&#xff1a;UID(0-999) 普通用户&#xff1a;UID(1000-*) root用户&#xff1a;UID为0&#xff0c;拥有系统的完全控制…

notepad++文件github下载

1、github下载网址&#xff1a;Releases notepad-plus-plus/notepad-plus-plus GitHub 2、找到操作系统支持的软件&#xff1a; 3、CSDN下载链接&#xff1a;https://download.csdn.net/download/u013083576/90046203

无人机应用板卡详解!

一、核心技术 无人机板卡的核心技术主要包括但不限于以下几种&#xff1a; 通信技术&#xff1a;无人机板卡通常集成了各种通信技术&#xff0c;如无线电通信、卫星通信等&#xff0c;以实现远程控制和数据传输。这些技术确保了无人机能够在复杂环境中保持稳定的通信连接。 …