狗血记之RAC数据库SQLPLUS启库

目录

  • 问题解决过程
  • 反思总结

1问题解决过程

 

ORACLE的RAC数据库集群现在已经被广泛应用,最近在数据集市项目中将原来AIX平台10G单节点数据库迁移升级至X86平台11R2RAC集群数据库,为了保证数据库的高可用性和可扩展性,采用了RAC的GRID大集群和数据库小集群方式(例如本次问题的环境是4节点ASM集群支撑2套2节点RAC数据库,每个实例1台主机)。部署好第一套2节点RAC数据库之后,因项目进展的需要,再添加2节点给另一个地市使用。在将GRID和DB集群软件、数据库都创建完成之后,同事告诉我新添加的2节点RAC数据库不能用SQLPLUS正常启动,必须使用集群命令启动。凭着以往的经验,RAC节点的数据库无论是用SQLPLUS还是集群命令都必须可以在任意节点进行任意顺序启动,不需要按照特定的顺序启动。

现在这套RAC节点数据库还在安装阶段,还没有投入使用,因此可以进行各种各样的操作和测试。接到这个问题请求之后,首先进行测试,按照同事的说法,先启动1节点,后启动2节点,数据库可以使用SQLPLUS正常启动;先启动2节点,后启动1节点,发现2节点可以正常启动,1节点连NOMOUNT状态都未能进入,就报错退出。退出之后,就查看数据库的ALERT日志,发现在退出前报错集群无法进行通信。

根据报错信息分析,是由于集群间无法通信,导致数据库无法启动,那么根据这一点提示信息就拼命的从集群通信方面入手。因为这2个节点是后期采用添加节点的方式添加进去,第一怀疑是不是添加节点加出了问题,反复询问同事,明确回复我在添加节点时无任何的报错信息。那么就只能从使用集群命令对整个集群进行检查。使用了crsctl status resource –t ,crsctl check cluster –all,oifcfg,olsnodes,srvctl等命令进行检查,检查的结果都无异议,从中未能发现一点蛛丝马迹。

再仔细对1节点的数据库ALERT日志向上查看,发现有打印私网通信地址为169.254.183.196,立即查看数据库的私网通信地址发现是192.168.110.12。此时就有一个疑问,数据库ALERT日志中打印的私网IP地址与规划的私网IP不一致。这个时候只好外事不决问百度,问了百度之后发现是ORACLE在11.2.0.2.0之后添加的新特性HAIP。

又因为项目赶进度,所以在内部进行商讨,看看有无遇到相似或相同的案例,结果听同事说过,他们遇到过,也是相同的问题,但没有找到根本原因。后续申请协调各种资源进行分析 ,终于有了进一步的发现。发现在2节点使用SQLPLUS启库时,ALERT日志中打印的集群IP有问题,集群间通信应该使用私网,怎么使用SQPLUS启库打印为公网IP,这点就特别疑惑了。

172.31.0.116这个IP在此套RAC数据库中定义为公网IP,那么这个问题就初步归结为2节点使用SQLPLUS启库会使用公网IP作为集群的通信网络。又再次对集群的公网、私网等网络进行核查和分析,并协调网络厂家、操作系统厂家进行核查,都没有发现问题。

到这里之后,几乎是山穷水尽,问题依然存在。再次百度,得到的答案是由于HAIP异常引起。于是分别独立启动单节点库,查看其对就的HAIP,发现1节点为169.254.183.196,2节点为172.31.0.116。

再次对2个节点的数据库ALERT日志进行对比,发现其中存在一些不同的报错信息。1节点独立启库,能够正常获取公网、私网的IP信息。2节点则提示GPNP异常,未能获取正常的私网、公网信息。后续紧接着查看GPNP的日志,发现GPNP在正常工作,未有任何的报错信息。

于是到这里,突然灵光一闪,是不是可以用TRACE的方法跟踪启动过程,能否从TRACE中分析出2节点为什么使用公网IP做为集群通信。由于是启库,只能重新启动2节点至NOMOUNT状态,然后创建PFILE,在PFILE中添加10046事件,然后使用PFILE启动数据库至NOMOUNT状态。然后到TRACE目录中去查看TRACE文件。对TRACE文件打开分析,发现TRACE文件中提示GPNP中某个文件无法访问。

使用LS命令对文件进行查看,发现的确不存该文件,再仔细一看路径,这个路径不是GRID集群的安装路径。

仔细一看这个目录,再结合操作系统为SUSE LINUX 11 SP2,初步确定为ORACLE用户的环境变量问题。如果对2个节点ORACLE的环境变量进行对比,果然不同,2节点多了2行。

看到2节点多出来的2个环境变更ORA_CRS_HOME、ORA_ASM_HOME,立即找到SUSE LINUX为ORACLE特意准备的环境变量文件/etc/profile.d/oracle.sh,立即将这个文件重命名,然后退出会话,重新登陆,环境变量消失。于是使用2个会话窗口,1个查看数据库ALERT日志,另1个使用SQLPLUS启库,ALERT日志中显示数据库正常能够获取私网、公网的IP网络,而且HAIP也是使用169网段的。待2节点使用SQLPLUS启库完成之后,再在1节点使用SQLPLUS启库,一切正常。然后再核查其他3个节点的/etc/profile.d/oracle.sh发现该文件要么被删除、要么被重命名。

2反思总结

 

至此为止,经过不断的折腾,这个问题终于被解决,但是回想整个解决过程,其实很冗长,也走了很多的弯路。

  1. 检查数据库ALERT日志,只检查出问题节点,没有立即检查未出问题节点。

     

  2. 未对操作系统及其对应的环境变量熟悉,其实/etc/profile.d/oracle.sh是SUSE专门为ORACLE定制的环境变量,加上这是第1次使用SUSE安装ORACLE数据库,经验不足,也是其一。

     

  3. 其实也曾想过是不是配置有问题,引起此次问题。在其中曾让当初部署的同事按照ORACLE的官方文档对操作系统配置进行一遍彻底的核查。但也未能核查出隐藏在/etc/profile.d/oracle.sh这个环境变量文件。这也正是SUSE为ORACLE定制的特色。

 

作者介绍:夏海雁

 

  • 新炬网络公司高级技术专家,7年Oracle数据库、TimesTen内存数据库运维管理经验。
  • 精通Oracle 10g、11g数据库管理和Linux/Unix系统管理。
  • 擅长进行数据库及集群的故障诊断与系统优化,并持续专注于故障诊断技术的研究与实践。


时间: 2024-10-27 07:59:38

狗血记之RAC数据库SQLPLUS启库的相关文章

Oracle RAC数据库的启动和关闭

RAC数据库与单实例的差异主要表现在多个实例通过集群件来统一管理共享的资源.因此原有的单实例的管理方式,如数据库.监听器等的关闭启动等可以使用原有的方式进行,也可以通过集群管理工具,命令行来集中管理,这也是推荐的管理方式.由于集群件crs位于数据库之上,即RAC数据库依赖于集群件,因此数据库的启动与关闭应该结合集群来考虑,下面以10g RAC来描述数据库启动与关闭过程,不涉及集群层的启动与关闭. 一.RAC 数据库启动与关闭顺序 1.关闭顺序 关闭OEM,关闭监听,关闭 Oracle 实例,关闭

RAC 数据库的启动与关闭

        RAC数据库与单实例的差异主要表现在多个实例通过集群件来统一管理共享的资源.因此原有的单实例的管理方式,如数据库.监听器等的关闭启动等可以使用原有的方式进行,也可以通过集群管理工具,命令行来集中管理,这也是推荐的管理方式.由于集群件crs位于数据库之上,即RAC数据库依赖于集群件,因此数据库的启动与关闭应该结合集群来考虑,下面以10g RAC来描述数据库启动与关闭过程,不涉及集群层的启动与关闭.   一.RAC 数据库启动与关闭顺序1.关闭顺序  关闭OEM,关闭监听,关闭 Or

【RAC】将单实例备份集恢复为rac数据库

[RAC]将单实例备份集恢复为rac数据库 一.1  BLOG文档结构图     一.2  前言部分   一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 单实例环境的备份集如何恢复到rac环境(重点) ② rman恢复数据库的一般步骤 ③ rac环境的简单操作   注意:本篇BLOG中代码部分需要特别关注的地方我都用黄色背景和红色字体来表示,比如下边的例子中,thread 1的最大归档日志号为33,thread

【DBCA -SILENT】静默安装之rac数据库安装

[DBCA -SILENT]静默安装之rac数据库安装   BLOG文档结构图         之前的相关文章连接:    DBCA静默方式建库 :http://blog.itpub.net/26736162/viewspace-1448220/ [DBCA -SILENT]静默安装如何启用归档模式: http://blog.itpub.net/26736162/viewspace-1585925/     之前的文章中介绍了单实例的数据库静默安装方式,今天我们来看看rac数据库的静默安装方式.

测试Oracle RAC数据库集群功能

Oracle RAC是一个集群数据库,可以实现负载均衡和故障无缝切换.如何知道RAC数据库已经实现了这些功能呢,下面就对此进行功能测试. 一. 负载均衡测试 RAC数据库的负载均衡是指对数据库连接的负载均衡,当一个新的会话连接到RAC数据库时,通过指定的分配算法将请求分配到集群的任一节点上,这就是RAC数据库完成的功能.负载均衡在RAC中分为两种:一种是基于客户端连接的负载均衡:一种是基于服务器端的负载均衡. 1. RAC客户端负载均衡 客户端连接的负载均衡配置起来非常简单,与RAC数据库的实例

oracle单实例数据库转换为RAC数据库

测试目的: 单实例数据库转换为RAC数据库 测试环境:Oracle 11.2.0.4 测试方法:手工转换 . 首先,安装一套RAC环境,并把单实例数据库通过通过rman还原到这个环境(通常如果是生产环境,我们会搭建从RAC到单实例数据库的ADG,以减少停机时间). 然后生成一个源库(单实例数据库)spfile: startup pfile=/home/oracle/lunar/spfile.lunardb.tmp 08:07:25 sys@lunardb>show parameter spfil

ebs rac 数据库更改监听端口

背景: 新克隆出来一套ebs  rac数据库,但是监听端口使用的是1521,考虑到测试环境,不想用这个端口,打算改成1531. 1.修改context file,把对应的端口改掉(两个节点). 这三个端口都改成1531 2.分别在两个节点运行autocfg 会报错,不过可以忽略,查看db 层tns_admin 下面的tnsnames.ora配置文件都被改成1531,就可以了. 3.重新修改,注册local_listener,重启监听: db用户停止当前监听: srvctl stop listen

RAC数据库启用归档和闪回的步骤

1.RAC数据库调整为归档模式步骤: SQL> alter system set cluster_database=false scope=spfile sid='orcl1'; SQL> alter system set db_recovery_file_dest='+ORAFLASH' scope=spfile; SQL> alter system set db_recovery_file_dest_size=20g scope=spfile; $ srvctl stop datab

利用srvctl管理Oracle RAC数据库

srvctl即Server Control,是Oracle提供的一个命令行工具,用以用于管理Oracle的RAC环境.srvctl在Oracle 9i中被引入,Oracle10g.11g对其功能进行了很大的增强和改进.下面介绍下此命令的简单用法. 一. 查看实例状态(srvctl status) 查询所有实例和服务的状态: [oracle@node-rac1 ~]$ srvctl status database -d racdb Instance racdb2 is running on nod