一、概述

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

二、实验环境介绍

主库rac(已安装rac,并已有数据库orcl)
rac1:192.168.56.11,sid1:orcl1,version:11.2.0.4
rac2: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;  # 只开启节点1
SQL> 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没什么区别,所以不做具体介绍
[oracle@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 sysdba
SQL> create spfile from pfile;
SQL> startup nomount

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

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

[oracle@oradg ~]$ vi $ORACLE_HOME/network/admin/listener.ora

SID_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.ora

orcldg =
(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@orcldg

RMAN> 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 ~]$ asmcmd
ASMCMD> lsdg  # 查看磁盘组名字
ASMCMD> cd data
ASMCMD> cd orcl
ASMCMD> 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.ora

toorcl =
(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/archivelog

SQL> 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='*';

五、总结

1. dg的切换需要停掉所有的应用,并把数据库的所有连接全部kill掉,账号全锁(此举是为了防止切换过程中有用户登录),切换完成后再解锁
2. rac在切换时,只留一个活的实例,其它全部关闭
3. 命令每执行一条,就留意返回的结果,并实时查看alert.log

Oracle - 给rac创建单实例dg,并做主从切换的更多相关文章

  1. Oracle_lhr_CentOS 7.3 ECS上搭建RAC 18c+单实例DG+EMCC+DG的FSFO快速故障转移配置

    Oracle_lhr_CentOS 7.3  ECS上搭建RAC 18c+单实例DG+EMCC+DG的FSFO快速故障转移配置 [大型连续免费公开课]Oracle 18c rac+dg+13.3的em ...

  2. oracle rac搭建单实例DG步骤(阅读全篇后再做)

    环境介绍 主库: 主机名 rac01 rac02 实体IP 10.206.132.232 10.206.132.233 私有IP 192.168.56.12 192.168.56.13 虚拟IP 10 ...

  3. oracle rac与单实例DG切换

    1.主库查看状态(RAC库) SQL> select database_role,switchover_status from v$database; DATABASE_ROLE SWITCHO ...

  4. oracle 11g r2 rac到单实例的dg

    oracle 11g r2 rac到单实例的dg 1 主备环境说明 rac环境--primary CentOS release 6.5 (Final)hostname rac1 rac2ip 10.* ...

  5. oracle rac切换到单实例DG后OGG的处理

    在RAC切换到单实例DG后,将OGG目录复制过去,在使用alter extract ext_name,begin now的时候报错 2016-04-10 11:27:03 WARNING OGG-01 ...

  6. oracle 单实例DG(搭建篇一)

    一,介绍 lodding... 二,安装前环境配置 01,依赖包的安装: yum install binutils-* yum install compat-libstdc++-* yum insta ...

  7. ORACLE11g R2【RAC+ASM→单实例FS】

    ORACLE11g R2[RAC+ASM→单实例FS] 11g R2 RAC+ASMà单实例FS的DG,建议禁用OMF. 本演示案例所用环境:   primary standby OS Hostnam ...

  8. ORACLE10g R2【RAC+ASM→单实例FS】

    ORACLE10g R2[RAC+ASM→单实例FS] 10g R2 RAC+ASMà单实例FS的DG,建议禁用OMF. 本演示案例所用环境:   primary standby OS Hostnam ...

  9. Oracle 11g RAC 环境下单实例非缺省监听及端口配置

    如果在Oracle 11g RAC环境下使用dbca创建单实例数据库后,Oracle会自动将其注册到缺省的1521端口及监听器.大多数情况下我们使用的为非缺省监听器以及非缺省的监听端口.而且在Orac ...

随机推荐

  1. 使用火狐浏览器模仿手机浏览器,附浏览器HTTP_USER_AGENT汇总

    HTTP_USER_AGENT用来获取浏览页面的访问者在用什么操作系统(包括版本号)浏览器(包括版本号)和用户个人偏好. 改变浏览器的这个参数就可以伪装成相应的浏览器. User Agent Swit ...

  2. [LC]643题 Maximum Average Subarray I(子数组最大平均数 I)

    ①英文题目 Given an array consisting of n integers, find the contiguous subarray of given length k that h ...

  3. saprk性能调优参考

    1.Tuning Spark 文档 原文:http://spark.apache.org/docs/latest/tuning.html 翻译参考:https://www.cnblogs.com/lh ...

  4. SparkSQL--数据源Parquet的加载和保存

    一.通用的load和save操作 对于Spark SQL的DataFrame来说,无论是从什么数据源创建出来的DataFrame,都有一些共同的load和save操作.load操作主要用于加载数据,创 ...

  5. java编程思想第四版第九章习题

    第三题 package net.mindview.interfaces; abstract class Base{ public Base(){ print(); } abstract void pr ...

  6. ubuntu server 1604 设置笔记本盒盖 不操作

    sudo vim /etc/systemd/logind.conf   //打开配置文件 找到 #HandleLidSwitch=suspend  改为 HandleLidSwitch=ignore  ...

  7. 携程Apollo简单入门教程这一篇就够了

    1. Apollo背景 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境.分集群管理配置,完善的权限.审核机制……   废话不多说,参考官方文档   如果不想看文档, 也没关系, 跟 ...

  8. 百度杯 black_hole复现

    在这次复现中,经历了太多挫折. 刚刚开始的时候本地调试 get不到shell,就很疑问,而且不会爆破,想学下怎么爆破出那个0x05, 后来问了位师傅 ,他说用retdl_solve 试试,我就跑去学了 ...

  9. 词袋模型(BOW,bag of words)和词向量模型(Word Embedding)概念介绍

    例句: Jane wants to go to Shenzhen. Bob  wants to go to Shanghai. 一.词袋模型 将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个 ...

  10. linux工作调度(计划任务)

    linux工作调度有两种:at,cron · at:at是一个可以处理仅执行一次就结束调度的命令.说白了就是在某个时间需要干某一件事,例如在2018年10月12日下午一点要执行一个数据库矫正脚本. · ...