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

embedded/2024/12/3 1:39:55/

一、环境规划

项目主库 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 环境,确保数据的一致性和高可用性。


http://www.ppmy.cn/embedded/142468.html

相关文章

【k8s深入理解之 Scheme 补充-4】理解资源的内外部版本(存放位置不同、版本转换函数自动生成、版本新增字段等)

附录1 | types 的存放位置&#xff08;为什么内部版本和外部版本在不同位置&#xff09; 为什么 apps 组的 internal 的 types.go 放在 k8s.io/kubernetes 项目中&#xff0c;而 v1 等版本的 types.go 放在 ks8.io/api 项目中 Kubernetes 将 API 类型划分为 internal 和外部版本…

微服务即时通讯系统的实现(服务端)----(2)

目录 1. 语音识别子服务的实现1.1 功能设计1.2 模块划分1.3 模块功能示意图1.4 接口的实现 2. 文件存储子服务的实现2.1 功能设计2.2 模块划分2.3 模块功能示意图2.4 接口的实现 3. 用户管理子服务的实现3.1 功能设计3.2 模块划分3.3 功能模块示意图3.4 数据管理3.4.1 关系数据…

YOLO系列论文综述(从YOLOv1到YOLOv11)【第7篇:YOLOv5——使用Pytorch框架、AutoAnchor、多尺度预训练模型】

YOLOv5 1 摘要2 YOLOv52.1 AutoAnchor2.2 网络架构 YOLO系列博文&#xff1a; 【第1篇&#xff1a;概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇&#xff1a;YOLO系列论文、代码和主要优缺点汇总】【第3篇&#xff1a;YOLOv1——YOLO的开山之作】【第4篇&…

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili&#xff08;哔哩哔哩&#xff09;视频的完整和详细步骤如下&#xff0c;包括使用预编译二进制文件的安装方法&#xff1a; 1. 安装依赖 确保你的系统已安装 FFmpeg&…

继上一篇,设置弹框次数以及自适应图片弹框,部分机型(vivo)老手机不显示的问题

上一篇写的本来测试好多型号都无事, 今天下午公司的战斗机vivo横空冒出… 晕 弹框直接显示都出不来了,现在还有用这种老的机型的,但是没办法咯~ 前端遇到这种兼容性的问题就要勇于解决 主要解决了这几点: // 添加图片加载事件 <imgv-if"imageUrl":src"image…

关于Spring基础了解

Spring简介 Spring框架是一个开源的Java应用框架&#xff0c;旨在简化企业级应用程序的开发。它提供了一系列强大的工具和服务&#xff0c;帮助开发者构建高质量的Java应用程序。Spring框架的核心理念是使开发过程更加模块化、可测试和可维护。 主要特性 依赖注入&#xff08…

【LeetCode】3208.交替组II

题目描述&#xff1a; 题目链接&#xff1a;https://leetcode.cn/problems/alternating-groups-ii/description/?envTypedaily-question&envId2024-11-27 思路一&#xff1a;暴力解法&#xff08;超时&#xff09; 遍历对每一个元素与其后面K-1个元素组成的K个元素均判…

题目 3209: 蓝桥杯2024年第十五届省赛真题-好数

一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位 &#xff09;上的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位 &#xff09;上的数字是偶数&#xff0c;我们就称之为“好数”。给定一个正整数 N&#xff0c;请计算从…