热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle12C双机冷备的常见问题解答

1、什么是Oracle数据库的双机冷备?双机冷备,不同于OracleRAC,是指多台物理机或虚拟机,可以挂载相同某个存储,并在每台数据库服务器上都安装好同样的数据库软件和Oracle实

1、什么是Oracle数据库的双机冷备?

双机冷备,不同于Oracle RAC,是指多台物理机或虚拟机,可以挂载相同某个存储,并在每台数据库服务器上都安装好同样的数据库软件和Oracle实例,在主服务器宕机之后,切换到备用服务器继续提供服务的功能。


2、双机冷备有什么特点?

双机冷备不能像Oracle RAC那样同步工作,效率叠加。而是一台在工作,备用服务器在关机状态或空转状态。但是这并不代表双机冷备就没有优点。

首先,在很多情景下,不能使用Oracle RAC,比如异地的灾备机房,灾备机房在正常情况下是不提供服务的,存储设备通过光纤线缆与主机房进行同步,所以存储是同步的,而数据库服务本身需要在主机房和灾备机房都搭建一套环境。一台物理主机可以给多个业务数据库作为备用服务器,实际开销也并不很大。当主机房的服务器被摧毁之后,异地机房挂载上同步后的存储马上又可以继续提供服务。

第二,Oracle RAC并不适合所有的业务类型,有些业务并不需要太强悍的性能和超高的可用性,可以容忍服务中断三十分钟到一小时左右,使得运维人员有充足的时间进行手动、人工的切换服务。比如一些办公系统,管理系统等等。而冷备这种基于单机的运维模式操作简单,对运维人员的要求也较低。只要mount上存储,然后startup就可以了,管理起来非常方便。而Oracle Rac经常会因为网络问题导致服务器自身重启,而且往往一重启就两台一起重启,除了要排查网络故障外,还需要排查RS232串行口,光纤等故障,往往把运维人员搞得焦头烂额。所以对于这些情况来说,双机冷备的方式反而更易于维护,宕机切换速度更快。


3、双机冷备有什么要件?

第一,要有两台配置相似,最好完全一样的服务器硬件,这个在虚拟化平台上非常容易实现。在物理服务器中,成本也不会特别高,因为可以好多服务的数据库共用一台备机。

第二,要有可共享的存储介质。在普通的虚拟机和PC机上,要为数据库文件和备份文件单独一块硬盘,这样在一台服务器宕机之后,可以拔下这块硬盘,插到另一台服务器上,然后启动数据库继续运行。如果是两台使用SAN存储的服务器,那么就需要通过对光纤交换机的ZONE的划分,让两台服务器都可以发现并挂载同一块存储。如果是使用基于TCP/IP的iSCSI设备,同SAN一样,要让两个服务器可以挂载同一个存储服务器上的块设备。如果是异地灾备机房,可以通过对存储网关的特殊设置,让本地机房的存储和异地的存储实时同步。从应用层面上来看,SAN这种方式挂载的速度要比硬盘来回拔插速度快多了。

第三,一个可转移的IP,可以理解成LVS集群中那样的虚拟IP,客户端通过虚拟IP连接数据库,而使用这个虚拟IP的数据库即为激活的数据库,另一台就stand by。


4、如何让多台服务器都能挂载同一VG?

在SAN和iSCSI这种网络存储方案中,只要让主备服务器都可以通过fdisk发现到共享的存储设备,一般就问题不大了。而能否发现取决于你的存储链路的规划,和光纤交换机有关。

当一个块设备在多台服务器都能发现的情况下,你使用其中一台创建PV,VG,LV在其他机器上都可以通过pvscan,vgscan,lvscan等发现。并且都可以mount。但是如果使用ext2,3,4这种非集群文件格式进行格式化,那么一方的修改其他人是看不见的,反而还会产生冲突。所以同一时间我们要人工的控制只有一台服务器mount这个块设备。

在主服务器上划分了VG和LV之后,可以在当前服务器上自由的mount,但是其他服务器需要先激活此VG,然后再mount相应的LV。未激活由其他主机建立VG里的LV之前,使用lvscan命令得到结果就是相关lv是inactive状态,如下

[root@localhost ~]# lvscan  
  inactive          '/dev/rhel/swap' [16.00 GiB] inherit  
  inactive          '/dev/rhel/tmp' [10.00 GiB] inherit  
  inactive          '/dev/rhel/home' [10.00 GiB] inherit  
  inactive          '/dev/rhel/root' [50.00 GiB] inherit  
  inactive          '/dev/rhel/rpms' [74.50 GiB] inherit  
  ACTIVE            '/dev/rootvg/LogVol01' [151.80 GiB] inherit  
  ACTIVE            '/dev/rootvg/LogVol00' [8.00 GiB] inherit  
[root@localhost ~]#  

使用

vgchange -ay lv路径的前半部分

再次查看,就会发现VG里面的lv都变成了ACTIVE状态,此时就可以挂载了,注意多台可以连接同一存储的主机可以都设置为ACTIVE状态,但是不要同时mount。

[root@localhost ~]# lvscan  
  ACTIVE            '/dev/rhel/swap' [16.00 GiB] inherit  
  ACTIVE            '/dev/rhel/tmp' [10.00 GiB] inherit  
  ACTIVE            '/dev/rhel/home' [10.00 GiB] inherit  
  ACTIVE            '/dev/rhel/root' [50.00 GiB] inherit  
  ACTIVE            '/dev/rhel/rpms' [74.50 GiB] inherit  
  ACTIVE            '/dev/rootvg/LogVol01' [151.80 GiB] inherit  
  ACTIVE            '/dev/rootvg/LogVol00' [8.00 GiB] inherit  
[root@localhost ~]#

注意,在inactive的时候,/dev/rhel/swap这个文件是不存在的,也不需要存在,使用vgchange的时候,只需要填前面部分也就是/dev/rhel/就可以激活了。


5, 哪些文件需要放到共享存储上

一般我们在安装Oracle 12c/11g的时候,都是先安装oracle软件,再部署oralce实例。在建立双机冷备也是,先在所有的机器上都安装oracle数据库,注意安装目录,参数等等都要一模一样,要安装到机器自己的硬盘上,这样才能起到备份的作用。然后只在主机上安装oralce实例,此时就要规定哪些文件要放到共享存储上。

理论上来说,在建立实例的时候,最好所有和实例有关的都放到共享存储上,总结一下,大约有一下几点

主要就是:系统表空间,用户自定义表空间,.ctl控制文件,快速恢复区

这些在安装的时候后都可以指定路径,默认为/home/数据库用户名,所以在安装的时候要仔细看好,不然安装到了/home下就不方便迁移了。主要有一下几幅图

下面是数据库文件的位置,非常重要,不要使用默认。


下面是快速恢复区的位置,用于放置RMAN产生的数据库全备增备的目录。


下面是归档日志的位置


下面是系统表空间的位置,注意以后使用create tablespace命令创建用户表空间的时候也要注意放到共享存储上,不然就无法流畅的迁移了。



6,如何将主服务器建立好的实例同步到备用服务器上

我们在主服务器上建立了一个数据库实例,还需要到每个备用服务器上再建立一遍么?其实不需要,只需要将生成好的spfile放置到备用服务器指定的位置上,再改改监听器就可以了。

在建立好数据库实例后,oracle会生成一个spfile来记录这个数据库实例的相关配置参数,其中就包含上面我们数据库表空间,控制文件,快速恢复区位置的字段,这个spfile一般放在$ORACLE_HOME/dbs/下面,如下图,在建立好数据库实例后会告诉你


一般来说,我们把dbs目录下面所有的文件(除了init.ora)全部拷贝到备用服务器相同的目录下就可以了。

然后我们还需要在备用服务器上设置Sid的环境变量,编辑~/.bashprofile,设置

export ORACLE_SID=xxxx

具体的值和主服务器上一样就可以。

然后就可以使用 sqlplus / as sysdba一样连接备份服务器上的数据库了。

假设我们此时把存储挂载到备份服务器上,执行startup,发现还是启动不了,报错

[oracle@newoadb2 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Fri Apr 13 16:41:31 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 9925

是因为除了表空间,控制文件,快速恢复区需要共享之外,还有一个数据库审计日志需要相应的路径,但是数据库审计并不需要各个服务器都同步,用的人也不多,所以可以直接建立在各个服务器自身的存储上。

在建立实例的时候,虽然没有地方设置,但是还是会贴出相关审计日志的存储路径,我们只需要保证每台数据库服务器上都有这个目录即可,里面文件不需要同步就可以让数据库正常运行。


所以,我们只需要保证{ORACLE_BASE}/admin/{数据库名}/adump这个目录存在即可


7,如何让备用服务器的监听器连接上备用服务器上的数据库实例

建立相关目录之后,我们发现数据库可以正常启动了,但是在使用JAVA客户端连接的时候还是会报错,连接主服务器就没事,是因为在备用服务器上我们没有配置监听器的原因,而主服务器在建立实例的时候已经帮你设置了监听器,所以主服务器没事



报错如下:

An error occurred while establishing the connection:

Long Message:
Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

Details:
   Type: java.sql.SQLRecoverableException
   Error Code: 12514
   SQL State: 08006

需要在监听器上添加这个SID的监听项,方法是修改$ORACLE_HOME/network/admin/listener.ora这个文件

修改成


# listener.ora Network Configuration File: /u01/product/12.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = 数据库SID)
      (ORACLE_HOME = /u01/oracle)
      (GLOBAL_DBNAME = 数据库名称)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

然后使用lsnrctl restart重启监听器,就可以使用客户端正常连接数据库了。



推荐阅读
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
author-avatar
关注前世男友
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有