尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Oracle 11g DataGuard主备架构搭建(集群对单库)

Oracle 11g DataGuard主备架构搭建(集群对单库)
📅 发布时间:2026/7/2 15:39:48

Oracle 11g DataGuard主备架构搭建(集群对单库)

一、环境介绍

关键项主库备库
数据库架构两节点Rac集群架构单库
IP地址192.168.11.33/34192.168.11.38
数据文件目录+DATA(ASM磁盘组)/oradata/orcl
控制文件目录+DATA(ASM磁盘组)/oradata/orcl
日志文件目录+DATA(ASM磁盘组)/oradata/orcl
归档文件目录+ARCH(ASM磁盘组)/oradata/arch
Oracle版本11.2.0.411.2.0.4
OS版本Redhat 7.9 x64Redhat 7.9 x64
主机名host33rac1/host34rac2host38
实例名orcl1/orcl2orcl
Db_nameorclorcl
Db_unique_nameorclorcl_st

前提:
1)OS,数据库软件都已经安装好
2)存储空间已经挂载完毕,挂载点/oradata
3)提前将redo log的大小和组数规划好

二、准备工作

1、配置主机名
数据库安装时已经规划并配置好 主库两节点主机名 节点一:host33rac1 节点二:host34rac2 备库主机名:host38
2、/etc/hosts配置文件
1)主库上添加备库的主机名,如下: 主库两节点服务器上执行 su - root echo "192.168.11.38 host38" >>/etc/hosts 2)备库上添加主库的主机名和VIP,如下 备库务器上执行 su - root echo "192.168.11.33 host33rac1" >>/etc/hosts echo "192.168.11.34 host34rac2" >>/etc/hosts echo "192.168.11.35 host33rac1-vip" >>/etc/hosts echo "192.168.11.36 host34rac2-vip" >>/etc/hosts
3、tnsnames.ora(主备一样),如下
su - oracle cat >>$ORACLE_HOME/network/admin/tnsnames.ora <<EOF orcl_pt = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = host33rac1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = host34rac2-vip)(PORT = 1521)) (LOAD_BALANCE = off) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) orcl_st= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = host38)(PORT = 1521)) ) (CONNECT_DATA = (SID = orcl) ) ) EOF 备注: 1)原本rac主库上想配置为orcl名称的,但是orcl默认已经自带,且使用scanip,应该是用于scan listener监听使用(负载均衡等功能),因此,维持orcl名称不变,改为orcl_pt表示主库 验证 cat $ORACLE_HOME/network/admin/tnsnames.ora
4、.bash_profile配置文件(主备一样)
数据库安装时已经配置好
5、密码文件(主备一样),将主库的copy过来
主库节点一上执行 su - oracle scp $ORACLE_HOME/dbs/orapworcl1 oracle@host38:/u01/app/oracle/product/11.2.0/db_1/dbs 备注:密码文件默认名称未orapw$ORACLE_SID,集群环境中节点一的密码文件名称为orapworcl1,备库由于时单库环境,需要调整密码文件名称 备库调整密码文件名称(备库上执行) su - oracle mv /u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl1 /u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl
6、主备参数文件配置
1)主库参数文件
主库节点一主库执行 su - oracle sqlplus "/as sysdba" alter system set log_archive_dest_1='location=+ARCH' sid='*'; alter system set log_archive_config='dg_config=(orcl,orcl_st)' sid='*'; alter system set log_archive_dest_2='service=orcl_st valid_for=(online_logfiles,primary_role) db_unique_name=orcl_st' sid='*'; alter system set standby_file_management=auto sid='*'; alter system set fal_client='orcl_pt' sid='*'; alter system set fal_server='orcl_st' sid='*'; alter system set db_file_name_convert='/oradata/','+DATA/' scope=spfile sid='*'; alter system set log_file_name_convert='/oradata/','+DATA/' scope=spfile sid='*'; alter system set log_archive_max_processes=8 sid='*'; 备注: 1)上述这种方式如果主库原有环境已经开启归档和force logging,则可以不停库搭建DG主备架构,直接将搭建主备的关键参数,通过alter system方式完成添加和修改: 2)log_file_name_convert,db_file_name_convert这两个参数只有当主库切换为备库时才起作用,所以,这里完全可以先直接修改至spfile中,下次切换时自动生效 参数验证 show parameter spfile; set lines 500 pages 999 col value for a90 col name for a50 select name,value from v$parameter where name in('db_name','db_unique_name', 'log_archive_config', 'log_archive_dest_1','log_archive_dest_2', 'log_archive_max_processes', 'fal_server','fal_client', 'db_file_name_convert', 'log_file_name_convert', 'standby_file_management');

备注:

log_file_name_convert和db_file_name_convert参数说明
(1)以前由于存放数据文件的目录都是一样,所以没有在意和理解这个参数。这一次asm到单库时,duplicate报错,突然发现,第一参数指向备库目录,第二个参数指向本库;值得注意!
(2)如果主库时ASM磁盘的OMF管理文件的方式(自动管理方式),那么设置db_file_name_convert参数的时候,必须得设置到具体目录,否则会报错。导致db_file_convert参数无法正常解析与转换相应的数据文件。修改参数,将解析目录写到datafile的真实路径。例如/oradata/orcl,+data/orcl/datafile 类似这样(+data/orcl/datafile指向具体目录)
(3)本次案例中,rac使用ASM磁盘组,但是没有使用OMF文件管理方式,创建的文件都是别名方式例如+data/orcl/system.dbf类似这样,因此,设置的参数为’/oradata/‘,’+DATA/',无需指向具体的目录。类似如下:

SQL> select file_name from dba_data_Files; FILE_NAME -------------------------------------------------------------------------------- +DATA/orcl/users01.dbf +DATA/orcl/undotbs01.dbf +DATA/orcl/sysaux01.dbf +DATA/orcl/system01.dbf +DATA/orcl/undotbs02.dbf SQL> show parameter control_files NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string +DATA/orcl/control01.ctl, +DATA/orcl/control02.ctl SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- +DATA/orcl/redo02.log +DATA/orcl/redo01.log +DATA/orcl/redo03.log +DATA/orcl/redo04.log
2)备库参数文件(备库上执行)
1、编辑init文件参数文件 su - oracle vi $ORACLE_HOME/dbs/initorcl.ora *.audit_file_dest='/u01/app/oracle/admin/orcl/adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='/oradata/orcl/control01.ctl','/oradata/orcl/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.open_cursors=300 *.pga_aggregate_target=394264576 *.processes=1500 *.remote_login_passwordfile='EXCLUSIVE' *.sessions=1655 *.sga_target=1184890880 *.undo_tablespace='UNDOTBS1' ####上面这一段,与主库完全一样,实际写入参数文件中时,这一行注释需要去掉 ####下面这一段是DG架构中备库非常关键的参数,实际写入参数文件中时,这一行注释需要去掉 *.log_archive_dest_1='location=/oradata/arch' *.db_unique_name='orcl_st' *.log_archive_config='dg_config=(orcl,orcl_st)' *.log_archive_dest_2='service=orcl_pt valid_for=(online_logfiles,primary_role) db_unique_name=orcl' *.db_file_name_convert= '+DATA/','/oradata/' *.log_file_name_convert= '+DATA/','/oradata/' *.standby_file_management=auto *.fal_client='orcl_st' *.fal_server='orcl_pt' *.log_archive_max_processes=8 备注:备库参数文件的基本内容,可以通过主库生成和传输过来,如下 主库上 sqlplus "/as sysdba" create pfile='/home/oracle/initorcl.ora' from spfile; exit scp /home/oracle/initorcl.ora oracle@host38:/u01/app/oracle/product/11.2.0/db_1/dbs 2、根据编辑的init参数文件,生成spfile参数文件 sqlplus "/as sysdba" create spfile from pfile;
7、主库必须开启归档,同时开启force logging

主库上必须提前规划好归档日志文件存放目录,本实验环境为+ARCH

主库节点一上执行

su - oracle 1)immediate方式关闭数据库 srvctl stop database -d orcl -o immediate 备注:必须immediate干净方式关闭数据库,才可以开启归档,immediate方式关闭主库的方法,可以参考我的文章《Oracle单库环境下计划内启停数据库的步骤》 2)启动一个节点的数据库实例并mount数据库 srvctl start instance -d orcl -i orcl1 -o mount 3)开启归档和force logging sqlplus "/as sysdba" alter database archivelog ; alter database force logging; exit 4)重启整个数据库 srvctl stop database -d orcl -o immediate srvctl start database -d orcl 5)验证 sqlplus "/as sysdba" select FORCE_LOGGING,LOG_MODE from v$database;
8、备库必须建立静态注册监听文件

如果为动态,监听的状态为blocked(实例nomount状态时),后续rman无法直接连接备库。

备库上执行 su - oracle cat >>$ORACLE_HOME/network/admin/listener.ora <<EOF SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) (SID_NAME = orcl) ) ) EOF 备库重启监听和验证 lsnrctl stop lsnrctl start lsnrctl status 状态类似如下 Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host38)(PORT=1521))) Services Summary... Service "orcl" has 1 instance(s). Instance "orcl", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
9、备库启动到nomount状态

备库上执行

1)创建一些必须的目录文件
su - oracle mkdir -p /u01/app/oracle/admin/orcl/adump mkdir /oradata/orcl mkdir /oradata/arch
2)启动数据库到nomount状态
su - oracle sqlplus "/as sysdba" startup nomount; 验证启动参数: show parameter spfile; //验证是否spfile文件启动 set lines 500 pages 999 col value for a90 col name for a50 select name,value from v$parameter where name in('db_name','db_unique_name', 'log_archive_config', 'log_archive_dest_1','log_archive_dest_2', 'log_archive_max_processes', 'fal_server','fal_client', 'db_file_name_convert', 'log_file_name_convert', 'standby_file_management');
10、主库上创建standby redo log,为了后续主备可以进行实时同步

添加规则:standby日志组数量为主库的日志组+1,RAC例外,每个实例的日志组+1

主库上执行(实验环境主库上3组日志,每个日志组大小50M,查看方法select group#,thread#,bytes from v$log;) alter database add standby logfile thread 1 group 11 ('+DATA/orcl/st_redo11.log') size 50m; alter database add standby logfile thread 1 group 12 ('+DATA/orcl/st_redo12.log') size 50m; alter database add standby logfile thread 1 group 13 ('+DATA/orcl/st_redo13.log') size 50m; alter database add standby logfile thread 2 group 14 ('+DATA/orcl/st_redo14.log') size 50m; alter database add standby logfile thread 2 group 15 ('+DATA/orcl/st_redo15.log') size 50m; alter database add standby logfile thread 2 group 16 ('+DATA/orcl/st_redo16.log') size 50m; 验证: select group#,thread#,bytes from v$standby_log; 备注: 1)提前在主库上创建standby日志组,from active database方式正式搭建时,备库创建过程中可以自动将standby日志组一起创建出来(无需额外手工再次创建) 2)standby日志组的group号,建议从11开始,前面的1-10序号,保留给redo log日志组使用

三、正式搭建

1、主备搭建

主库上执行

su - oracle rman target sys/oracle@orcl_pt auxiliary sys/oracle@orcl_st nocatalog duplicate target database for standby from active database nofilenamecheck;

备注:
1)需要加上nocatalog关键字,否则报错
2)主备库的连接,都必须通过sys用户名/密码的方式指定,否则报错
3)如果主库很大,可以通过并发方式,加快主备的搭建过程,类似如下

rman target sys/oracle@orcl_pt auxiliary sys/oracle@orcl_st nocatalog run{ allocate channel ch1 type disk; allocate channel ch2 type disk; allocate auxiliary channel ch3 type disk; allocate auxiliary channel ch4 type disk; duplicate target database for standby from active database nofilenamecheck; release channel ch1; release channel ch2; }

4)整个方式也可以在备库上执行,类似如下

su - oracle rman target sys/oracle@orcl_pt auxiliary sys/oracle@orcl_st nocatalog duplicate target database for standby from active database nofilenamecheck;

5)主备搭建命令执行完毕后,备库默认会启动到mount(挂载状态)

2、备库验证

备库上执行

su - orace sqlplus "/as sysdba" select open_mode,database_role,protection_level,protection_mode,switchover_status,force_logging from v$database; select group#,thread#,bytes from v$standby_log; select group#,thread#,bytes from v$log;
3、备库上启动同步(应用主库的redo日志)

两种日志应用的方式:
备库上执行

1)实时应用
su - oracle sqlplus "/as sysdba" alter database open read only; //启动备库只读打开状态,然后应用主库的redo日志,进行实时通过 //搭建完毕后,如果第一次 alter database open报错,(file 1 was not restored from a sufficiently old backup),参考后面“搭建总结”的处理方法 alter database recover managed standby database using current logfile disconnect from session; 备注:实时日志应用方式,主库上必须创建standby redo日志组才可以使用这种类型!!!
2)主库切换日志时才应用(即新归档日志过来时才应用,这是默认选项)
su - oracle sqlplus "/as sysdba" //备库保持mount挂载状态,主库切换日志时才应用同步(即新归档日志过来时才应用,这是默认选项) alter database recover managed standby database disconnect from session;

至此,Oracle主备架构搭建完毕!!

4、可选,备库上停止同步

取消日志应用的命令如下
备库上执行

su - oracle sqlplus "/as sysdba" alter database recover managed standby database cancel;

四、搭建总结

1、from active database方式搭建主备
1)需要加上nocatalog关键字,否则报错 2)主备库的连接,都必须通过sys用户名/密码的方式指定 rman target sys/oracle@orcl_pt auxiliary sys/oracle@orcl_st nocatalog 否则报错,类似如下 DBGSQL: TARGET> begin :fhdbi := dbms_rcvcat.getDbid; end; DBGSQL: sqlcode = 6550 DBGSQL: B :fhdbi = 32767 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of Duplicate Db command at 06/23/2026 11:28:45 RMAN-05501: aborting duplication of target database RMAN-03015: error occurred in stored script Memory Script ORA-06550: line 1, column 17: PLS-00201: identifier 'DBMS_RCVCAT.GETDBID' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored 3)可以并发的方式,类似如下 rman target sys/oracle@orcl_pt auxiliary sys/oracle@orcl_st nocatalog run{ allocate channel ch1 type disk; allocate channel ch2 type disk; allocate auxiliary channel ch3 type disk; allocate auxiliary channel ch4 type disk; duplicate target database for standby from active database nofilenamecheck; release channel ch1; release channel ch2; }
2、备库上默认只能以只读方式打开数据库

备库上执行startup或者alter database open命令,默认都是以open read only方式打开备库!!

[oracle@host38 ~]$ sqlplus "/as sysdba" SQL*Plus: Release 11.2.0.4.0 Production on Tue Jun 23 14:13:12 2026 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 1185853440 bytes Fixed Size 2252664 bytes Variable Size 956301448 bytes Database Buffers 218103808 bytes Redo Buffers 9195520 bytes Database mounted. Database opened. SQL> select open_mode,status from v$instance,v$database; OPEN_MODE STATUS -------------------- ------------ READ ONLY OPEN
3、搭建完毕后,如果第一次 alter database open报错(file 1 was not restored from a sufficiently old backup),参考处理方法如下:
SQL> alter database open read only ; alter database open read only ERROR at line 1: ORA-10458: standby database requires recovery ORA-01152: file 1 was not restored from a sufficiently old backup ORA-01110: data file 1: '/oradata/orcl/system01.dbf' SQL> alter database recover managed standby database disconnect from session; //这个命令会直接不打开数据库方式,应用主库的归档日志,会将数据库恢复为一致状态 Database altered. SQL> alter database recover managed standby database cancel; Database altered. SQL> alter database open read only; Database altered. SQL> alter database recover managed standby database using current logfile disconnect from session; Database altered.

相关新闻

  • Sqribble深度解析:规则驱动的PDF自动化出版流水线
  • AI测试实战:从框架选型到模型优化,打造智能测试体系
  • 用户安全,别踩坑!

最新新闻

  • 上下文工程:构建大模型的可调度信息操作系统
  • 手把手教你集成商品条码查询API:从原理到实战
  • 大模型稀疏激活机制:2%参数如何实现高效推理
  • Transformer核心原理与工程实践深度解析
  • Mismatch-first Farthest-search:融合不确定性与代表性的主动学习采样法
  • Claude语义压缩层移除:从过程可控到结果可信的架构跃迁

日新闻

  • Python Playwright录制功能:从零到一构建自动化测试脚本
  • 如何用开源工具永久保存你心爱的小说:novel-downloader全攻略
  • In-Context Learning不是教知识,而是模式对齐:从5个示例到100个工业级样本的真相

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号