千家信息网

Oracle如何给rac创建单实例dg并做主从切换功能

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下Oracle如何给rac创建单实例dg并做主从切换功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、
千家信息网最后更新 2026年11月01日Oracle如何给rac创建单实例dg并做主从切换功能

小编给大家分享一下Oracle如何给rac创建单实例dg并做主从切换功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、概述

本文将介绍如何给rac搭建单节点的dg,以及如何对其进行角色转换。预先具备的知识(rac搭建,单实例-单实例dg搭建)

二、实验环境介绍

主库rac(已安装rac,并已有数据库orcl)

rac1:192.168.56.11,sid1:orcl1,version:11.2.0.4rac2:192.168.56.12,sid2:orcl2,version:11.2.0.4

从库(已安装单实例数据库软件,无数据库实例)

oradg:192.168.56.102,sid:orcldg,version:11.2.0.4

三、搭建dg

** 以下所有主库操作都在节点1上做,如果需要在节点2上做的,我会标明

1. 主库打开归档模式,并强制写日志

先查看数据库的归档状态以及是否开启强制写日志,从下图可以看到目前数据库并没有打开归档,也没有开启强制写日志

SQL> select log_mode, force_logging from v$database;

数据库在mount状态下打开归档

SQL> alter system set log_archive_dest_1='location=+data' sid='*' scope=spfile;SQL> shutdown immediate; # 两节点都关闭SQL> startup mount; # 只开启节点1SQL> alter database archivelog;SQL> alter database open;

强制日志写,数据库在open状态就能修改

SQL> alter database force logging;SQL> startup; # 当节点1open完毕后,在节点2上打开数据库

再来查看数据库的归档状态以及是否开启强制写日志

SQL> select log_mode, force_logging from v$database;

2. 主库打开dataguard开关

SQL> alter system set log_archive_config='dg_config=(orcl,orcldg)' sid='*'; # orcl是主库的db_unique_name,orcldg是从库的db_unique_name

3. 主库设置远程归档

SQL> alter system set log_archive_dest_3='service=orcldg valid_for=(online_logfiles,primary_role) db_unique_name=orcldg' sid='*';

4. 将主库的口令文件传送给从库

[oracle@rac1 ~]$ scp $ORACLE_HOME/dbs/orapw$ORACLE_SID 192.168.56.102:$ORACLE_HOME/dbs/orapworcldg

5. 从库准备参数文件

这里参数文件跟给单实例搭建单实例dg没什么区别,所以不做具体介绍

[root@oradg ~]# vi $ORACLE_HOME/dbs/initorcldg.ora*.audit_file_dest='/u01/app/oracle/admin/orcldg/adump'*.audit_trail='db'*.compatible='11.2.0.4.0'*.control_files='/u01/app/oracle/oradata/orcldg/controlfile/control01.ctl'*.db_block_size=8192*.db_domain=''*.db_name='orcl'*.diagnostic_dest='/u01/app/oracle'*.log_archive_config='dg_config=(orcl,orcldg)'*.log_archive_dest_2='location=/u01/app/oracle/oradata/orcldg/archstdlog/ valid_for=(standby_logfiles,standby_role) db_unique_name=orcldg'*.memory_target=838860800*.open_cursors=300*.processes=150*.remote_login_passwordfile='exclusive'*.undo_tablespace='UNDOTBS1'standby_file_management=auto # 该参数默认值是manual,需要将其改为auto,表示主库的数据文件发生修改(如新建,重命名等),相应地从库也做相应修改db_unique_name='orcldg'db_file_name_convert='+DATA/orcl/datafile/','/u01/app/oracle/oradata/orcldg/datafile/','+DATA/orcl/tempfile/','/u01/app/oracle/oradata/orcldg/tempfile/'log_file_name_convert='+DATA/orcl/onlinelog/','/u01/app/oracle/oradata/orcldg/onlinelog/'

6. 从库中准备相关目录

[oracle@oradg ~]$ mkdir -p /u01/app/oracle/admin/orcldg/adump[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/orcldg/controlfile[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/orcldg/archstdlog[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/orcldg/datafile[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/orcldg/tempfile[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/orcldg/onlinelog

7. 启动从库实例

[oracle@oradg ~]$ export ORACLE_SID=orcldg[oracle@oradg ~]$ sqlplus / as sysdbaSQL> create spfile from pfile;SQL> startup nomount

8. 从库配置并启动监听程序

因为采用duplicate方式复制主库数据,所以需要将从库配置为静态注册的形式

[oracle@oradg ~]$ vi $ORACLE_HOME/network/admin/listener.oraSID_LIST_LISTENER = (SID_LIST = (SID_DESC =  (GLOBAL_DBNAME = orcldg)  (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)  (SID_NAME = orcldg) ) )LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.102)(PORT = 1521)) )[oracle@oradg ~]$ lsnrctl start

9. 主库配置服务命名

# 两个节点都要设置[oracle@rac1 ~]$ vi $ORACLE_HOME/network/admin/tnsnames.oraorcldg = (DESCRIPTION = (ADDRESS_LIST =  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.102)(PORT = 1521)) ) (CONNECT_DATA =  (SERVER = DEDICATED)  (SERVICE_NAME = orcldg) ) ) [oracle@rac2 ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora

内容跟rac1一致,略

10. 主库使用网络连接从库(测试连通性)

# 这里我的主库的sys密码是123456,从库与主库一致[oracle@rac1 ~]$ sqlplus sys/123456@orcldg as sysdba

11. 在主库启动rman复制从库

rman连接主库和从库

[oracle@rac1 ~]$ rman target / auxiliary sys/123456@orcldgRMAN> duplicate target database for standby from active database;

12. 从库添加standbylog

添加的日志大小跟主库的onlinelog保持一致,数量多两组(主库的onlinelog信息查看v$log)

group的编号不与当前的onlinelog重复即可

[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/orcldg/standbylog/  SQL> alter database add standby logfile group 21 '/u01/app/oracle/oradata/orcldg/standbylog/std01.log' size 50M;SQL> alter database add standby logfile group 22 '/u01/app/oracle/oradata/orcldg/standbylog/std02.log' size 50M;SQL> alter database add standby logfile group 23 '/u01/app/oracle/oradata/orcldg/standbylog/std03.log' size 50M;SQL> alter database add standby logfile group 24 '/u01/app/oracle/oradata/orcldg/standbylog/std04.log' size 50M;SQL> alter database add standby logfile group 25 '/u01/app/oracle/oradata/orcldg/standbylog/std05.log' size 50M;SQL> alter database add standby logfile group 26 '/u01/app/oracle/oradata/orcldg/standbylog/std06.log' size 50M;

13. 从库打开应用日志

SQL> alter database recover managed standby database disconnect from session;

14. 主库切换归档

SQL> alter system switch logfile;

15. 打开从库

当从库应用归档一段时间后,就关闭应用归档日志,打开从库。

SQL> alter database recover managed standby database cancel;SQL> alter database open;SQL> alter database recover managed standby database using current logfile disconnect from session;

16. 验证同步

主库做修改

SQL> update scott.emp set sal=2000;SQL> commit;

从库查询

SQL> select * from scott.emp;

至此,给rac搭建一个单实例的dg就已经做完了,跟单实例搭建单实例的dg没什么区别。接下来介绍如何切换。

四、主从切换准备

17. 主库添加standby logfile归档路径

使用grid账号,创建归档路径

[grid@rac1 ~]$ asmcmdASMCMD> lsdg # 查看磁盘组名字ASMCMD> cd dataASMCMD> cd orclASMCMD> mkdir ARCHSTDLOG

使用sys数据库账号,修改数据库参数

SQL> alter system set log_archive_dest_2='location=+DATA/ORCL/ARCHSTDLOG/ valid_for=(standby_logfiles,standby_role) db_unique_name=orcl' sid='*';

18. 主库添加standby logfile

添加的日志的大小跟主库的onlinelog保持一致,数量多两组(主库的onlinelog信息查看v$log)

SQL> alter database add standby logfile thread 1 group 21 ('+data') size 50M;SQL> alter database add standby logfile thread 1 group 22 ('+data') size 50M;SQL> alter database add standby logfile thread 1 group 23 ('+data') size 50M;SQL> alter database add standby logfile thread 2 group 24 ('+data') size 50M;SQL> alter database add standby logfile thread 2 group 25 ('+data') size 50M;SQL> alter database add standby logfile thread 2 group 26 ('+data') size 50M;

19. 主库修改参数文件

SQL> alter system set standby_file_management=auto sid='*';SQL> alter system set db_file_name_convert='/u01/app/oracle/oradata/orcldg/datafile/','+DATA/orcl/datafile/','/u01/app/oracle/oradata/orcldg/tempfile/','+DATA/orcl/tempfile/' sid='*' scope=spfile;SQL> alter system set log_file_name_convert='/u01/app/oracle/oradata/orcldg/onlinelog/','+DATA/orcl/onlinelog/' sid='*' scope=spfile;

到这里,主库转换为备库的准备工作已完成!

20. 从库配置tnsnames.ora

这里的配置tnsnames.ora的目的是,当原从库转变为新主库之后,原主库变为新从库,新主库需要给新从库发送归档日志,所以这里的tnsnames要指向新从库,又由于dg库应用归档只能在一个节点上, 所以toorcl只指向节点1。

[oracle@oradg ~]$ vi $ORACLE_HOME/network/admin/tnsnames.oratoorcl = (DESCRIPTION = (ADDRESS_LIST =  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.11)(PORT = 1521)) ) (CONNECT_DATA =  (SERVER = DEDICATED)  (SERVICE_NAME = orcl) ) )

21. 从库为onlinelog设置归档路径

[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/orcldg/archivelogSQL> alter system set log_archive_dest_1='location=/u01/app/oracle/oradata/orcldg/archivelog/ valid_for=(online_logfiles,primary_role) db_unique_name=orcldg';

22. 从库设置远程归档参数

SQL> alter system set log_archive_dest_3='service=toorcl valid_for=(online_logfiles,primary_role) db_unique_name=orcl';

到这里,从库转为主库的准备工作已完成!

四、主从切换

23. 查看主库的角色转换状态

SQL> select database_role,switchover_status from v$database;

24. 在节点1上主转从

集群在做角色转换时,只能有一个实例是打开状态,其余都要关闭,所以将节点2的实例关闭。
SQL> shutdown immediate; # 只在节点2上做

在节点1上执行以下命令,将主库转为从库,并且关闭实例

SQL> alter database commit to switchover to physical standby with session shutdown;

25. 在节点3上从转主

SQL> select database_role,switchover_status from v$database;

如果是"NOT ALLOWED"表示归档还没有应用完成,可以等待一段时间

如果日志全部应用了再查看角色转换状态

SQL> select database_role,switchover_status from v$database;

如果角色转换状态是TO PRIMARY,那么表示可以进行角色转换

执行从转主的命令,命令执行成功后,数据库的状态会变为mount

SQL> alter database commit to switchover to primary;SQL> alter database open;

26. 打开新从库

在节点1和节点2上

SQL> startup

节点1上应用归档

SQL> alter database recover managed standby database using current logfile disconnect from session;

节点3上切换归档

SQL> alter system switch logfile;

27. 验证同步

主库做修改

SQL> update scott.emp set sal=3000;SQL> commit;

从库查询

SQL> select * from scott.emp;

28. 错误处理

如果发现日志传不到备库的话可以在主库通过以下命令查看错误原因

SQL> select dest_id,dest_name,log_sequence,status,error from v$archive_dest;

如果报上面的错误的话,可以把归档开关重启一下即可

SQL> alter system set log_archive_dest_state_3='defer' sid='*';SQL> alter system set log_archive_dest_state_3='enable' sid='*';

以上是"Oracle如何给rac创建单实例dg并做主从切换功能"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

节点 实例 数据 数据库 日志 状态 切换 应用 参数 角色 文件 准备 强制 配置 主从 一致 命令 内容 篇文章 路径 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技怎么样 互联网科技官网 科技互联网政务服务 金诺互联网科技 互联网与科技金融数据 壕鑫互联网络科技 互联网金融科技委员会 科技大学互联网专业好不好 须眉科技是互联网公司吗 宁夏众和广鑫互联网科技有限公司 互联网校园科技培训 来此购互联网科技有限公司 佳云科技和互联网广告 互联网公司科技股 互联网科技如何创业 济南有互联网科技公司吗 无锡工业互联网科技有限公司 山东有哪些互联网科技公司 萌小萌互联网科技河南有限公司 广西科技产业互联网是什么 互联网与科技发展 壕鑫互联网络科技 互联网科技创新企业排名 济南华为互联网科技产业总部基地 荆州市昕露互联网络科技有限公司 互联网保险科技创业 中国互联网公司排名锤子科技 易租星互联网科技有限公司 互联网科技和医药行业 互联网科技创业计划的风险分析
0