【故障处理】DBCA建库诡异问题处理--rac环境不能创建rac库

【故障处理】DBCA建库诡异问题处理--rac环境不能创建rac库

  1. BLOG文档结构图

  1. 前言部分

  1. 导读和注意事项

各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:

① dbca静默创建rac库

② Inventory目录作用及其2种重建方法(重点)

③ rac环境dbca工具不能创建rac库的解决办法

④ dbca静默建库常见问题处理

⑤ 重建CRS集群环境执行root.sh脚本

Tips:

① 本文在ITpub(http://blog.itpub.net/26736162)和博客园(http://www.cnblogs.com/lhrbest)有同步更新

② 文章中用到的所有代码,相关软件,相关资料请前往小麦苗的云盘下载(http://blog.itpub.net/26736162/viewspace-1624453/

③ 若文章代码格式有错乱,推荐使用搜狗、360或QQ浏览器,也可以下载pdf格式的文档来查看,pdf文档下载地址:http://blog.itpub.net/26736162/viewspace-1624453/

④ 本篇BLOG中命令的输出部分需要特别关注的地方我都用灰色背景和粉红色字体来表示,比如下边的例子中,thread 1的最大归档日志号为33,thread 2的最大归档日志号为43是需要特别关注的地方;而命令一般使用黄色背景和红色字体标注;对代码或代码输出部分的注释一般采用蓝色字体表示。

本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力。

  1. 故障分析及解决过程

  1. 故障环境介绍


项目


source db


db 类型


RAC


db version


11.2.0.4


db 存储


ASM


OS版本及kernel版本


AIX 64位 6.1.0.0

  1. 故障发生现象及报错信息

小麦苗采用dbca -silent+nodeinifo创建rac库,原来用的好好的命令,结果在这个rac环境上创建出来的库成了单实例的,很是郁闷,,,,且看故障发生的现象:

大家看到这里的安装百分比是1%->3%->10%-17%.....,而rac库创建的时候进度百分比应该是1%->3%->9%-15%.....,如下图所示:

接下来小麦苗尝试了如下的几种方式:①dbca采用响应文件的形式,②dbca图形界面的方式,都是同样的情况。

我的环境dbca图形界面的第一张图:

而正常rac环境下dbca图形界面的第一步图应该是:

以上都是目前出现的问题,初步预估是哪个配置文件出错了,dbca不能判断集群环境。

  1. 故障分析及解决过程

起初小麦苗以为是集群出现了问题,在万般无奈的情况下执行root.sh重建了集群,按照以前的经验,这个终极大招执行后集群肯定可以恢复到正常的情况下,结果呢?结果还是令小麦苗很伤心,情况依旧没有解决。重新执行root.sh的命令如下(注:重新执行root.sh并不会清掉db的数据):

ocrconfig -showbackup

ocrconfig -manualbackup

$ORACLE_HOME/crs/install/rootcrs.pl -deconfig -force -verbose

ls -l $ORACLE_BASE/Clusterware/ckptGridHA*

find $ORACLE_HOME/gpnp/* -type f

find $ORACLE_HOME/gpnp/* -type f -exec rm -rf {} \;

$ORACLE_HOME/crs/install/rootcrs.pl -deconfig -force -verbose -lastnode -keepdg

ls -l $ORACLE_BASE/Clusterware/ckptGridHA*

find $ORACLE_HOME/gpnp/* -type f

find $ORACLE_HOME/gpnp/* -type f -exec rm -rf {} \;

ipcs

$ORACLE_HOME/root.sh

/oracle/app/11.2.0/grid/perl/bin/perl -I/oracle/app/11.2.0/grid/perl/lib -I/oracle/app/11.2.0/grid/crs/install /oracle/app/11.2.0/grid/crs/install/rootcrs.pl

ipcs

$ORACLE_HOME/root.sh

---crs的配置文件

---$ORACLE_HOME/crs/install/crsconfig_params

-- GRID

export DISPLAY=22.188.216.132:0.0

$ORACLE_HOME/crs/config/config.sh

这个终极大招已经使用过了,问题没有解决只能说明不是权限的问题,也不是集群的问题,而是DB环境的问题。

于是硬着头皮分析分析dbca的日志,dbca创建库的时候日志在:11g:$ORACLE_BASE/cfgtoollogs/dbca , 10g:$ORACLE_HOME/cfgtoollogs/dbca

里边有trace.log文件,拿到手,搜了下cluster,发现一个错误:

[main] [ 2016-07-05 17:37:30.694 GMT+08:00 ] [HAUtils.getDefaultListenerProperties:1666] PRCR-1001 : Resource ora.LISTENER.lsnr does not exist
PRCR-1001 : Resource ora.LISTENER.lsnr does not exist
    at oracle.cluster.impl.common.SoftwareModuleImpl.crsResource(SoftwareModuleImpl.java:776)
    at oracle.cluster.impl.nodeapps.ListenerImpl.crsResource(ListenerImpl.java:1107)

ora.LISTENER.lsnr该资源不存在,那就手动创建该资源:

报错了,应该是监听已经存在了,重新添加进crs中:

原本以为就是这个原因导致的,结果添加完ora.LISTENER.lsnr后还是单实例的,郁闷。。。更郁闷的是第二次创建后,trace文件中已经没有任何错误了,无论搜error或fail都搜不到,但是创建的数据库还是单实例,,,第二次创建的日志:

有种深深的挫败感,于是解决同事碰到的那个DG问题,参考:http://blog.itpub.net/26736162/viewspace-2121688/时间就这样过了2天,到了7月8号,手头又没什么事情了,想起来dbca这个问题,想来想去还是得从日志入手,老子一行一行的看,总能看出点东西来,但这次我比对的看,就是找一个dbca可以创建rac的环境,生成日志来分析差异,结果令我震惊了。

当小麦苗看到第5行的日志的时候,发现一个null的问题,Current Version From Inventory: null,截图如下:

错误环境截图:

而正常环境的rac是这个样子的:

可以看到正常环境下,可以获取到Homeinfo和Current Version From Inventory的值,当看到Inventory这个词的时候我就想我已经找到问题的答案了。应该是Inventory这个目录出现了问题,标准点的说法应该是/oracle/app/oraInventory/ContentsXML/inventory.xml这个文件的内容有问题了。Inventory目录存放的是Oracle软件安装的目录信息,Oracle升级也需要这个目录,执行opatch lspatches也需要这个目录。oraInventory目录的位置在/etc/oraInst.loc中记录,11g中我们可以通过$ORACLE_HOME/oui/bin/attachHome.sh来重建这个目录。

在其中的1个节点上分别用oracle和grid来执行:

[ZFLHRDB1:root]:/oracle/app/oraInventory>$ORACLE_HOME/oui/bin/attachHome.sh

The user is root. Oracle Universal Installer cannot continue installation if the user is root.

A file or directory in the path name does not exist.
[ZFLHRDB1:root]:/oracle/app/oraInventory>su - grid  
[ZFLHRDB1:grid]:/home/grid>$ORACLE_HOME/oui/bin/attachHome.sh
Starting Oracle Universal Installer...
 
Checking swap space: must be greater than 500 MB.   Actual 8192 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
The inventory is located at /oracle/app/oraInventory
'AttachHome' was successful.
[ZFLHRDB1:grid]:/home/grid>cd /oracle/app/oraInventory/ContentsXML
[ZFLHRDB1:grid]:/oracle/app/oraInventory/ContentsXML>more inv*
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2013, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
   <SAVED_WITH>11.2.0.4.0</SAVED_WITH>
   <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="Ora11g_gridinfrahome1" LOC="/oracle/app/11.2.0/grid" TYPE="O" IDX="1" CRS="true">
   <NODE_LIST>
      <NODE NAME="ZFLHRDB1"/>
      <NODE NAME="ZFLHRDB2"/>
   </NODE_LIST>
</HOME>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>
[ZFLHRDB1:grid]:/oracle/app/oraInventory/ContentsXML>exit
[ZFLHRDB1:root]:/oracle/app/oraInventory>su - oracle
[ZFLHRDB1:oracle]:/oracle>$ORACLE_HOME/oui/bin/attachHome.sh
Starting Oracle Universal Installer...
 
Checking swap space: must be greater than 500 MB.   Actual 8192 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
The inventory is located at /oracle/app/oraInventory
'AttachHome' was successful.
[ZFLHRDB1:oracle]:/oracle>cd /oracle/app/oraInventory/ContentsXML
[ZFLHRDB1:oracle]:/oracle/app/oraInventory/ContentsXML>more inv*
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2013, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
   <SAVED_WITH>11.2.0.4.0</SAVED_WITH>
   <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="Ora11g_gridinfrahome1" LOC="/oracle/app/11.2.0/grid" TYPE="O" IDX="1" CRS="true">
   <NODE_LIST>
      <NODE NAME="ZFLHRDB1"/>
      <NODE NAME="ZFLHRDB2"/>
   </NODE_LIST>
</HOME>
<HOME NAME="DbHome1" LOC="/oracle/app/oracle/product/11.2.0/db" TYPE="O" IDX="2">
   <NODE_LIST>
      <NODE NAME="ZFLHRDB1"/>
      <NODE NAME="ZFLHRDB2"/>
   </NODE_LIST>
</HOME>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>

重建Inventory这个目录后重新执行建库脚本:

已经正常了,唉,o(︶︿︶)o 唉,折腾了这么久原来是这个文件的问题,至于新环境为啥这个目录的配置文件不全,这个估计得追溯到rac的安装过程了,这个就不去纠结了。

  1. 模拟让故障重现

我们再来看看/oracle/app/oraInventory/ContentsXML/inventory.xml文件的内容:

对了,看仔细了,文件中有2个部分,若把蓝色字体的部分删掉,或者把/oracle/app/oraInventory/ContentsXML/inventory.xml的权限修改为root用户,那么执行dbca的时候将又回到单库的时代,原来dbca会从这里去获取是否集群环境,小麦苗阅读了dbca这个shell脚本,无奈最后发现是调用的java,但java这是个二进制文件不是shell脚本,所以就无法知道到底从哪里获取的集群环境信息。

小麦苗已亲自测试过,各位朋友测试过了吗????

  1. 关于重建Inventory目录的2种办法

重建Inventory目录的时候,生成的log文件在/oracle/app/oraInventory/logs下。

  1. 方法一:$ORACLE_HOME/oui/bin/attachHome.sh

这篇文档中提到有一个脚本$ORACLE_HOME/oui/bin/attachHome.sh可以重建Inventory目录,但是我们可以看到在不同的用户下(grid和oracle),其OHOME的变量值不同,所以若单独创建可以执行该脚本即可。

备份2个节点的Inventory目录,并重建空的Inventory目录,然后分别在grid和oracle用户下执行$ORACLE_HOME/oui/bin/attachHome.sh命令即可,注意只需要在其中的一个节点上执行即可。

  1. 方法二:集群下统一创建

可以去小麦苗的云盘下载该文档:

根据MOS(MOS:413939.1)的介绍,重建Inventory的步骤:

接下来分别备份2个节点的Inventory目录,并重建空的Inventory目录:

以下命令用grid用户在节点一执行即可,节点二自动创建:

注意的2点:

a-Do not try attachHome in all the nodes, which may corrupt the inventory and it results in OUI-10197:Unable to create a new Oracle Home at /u01/app/oracle/product/10.2.0/crs_1. Oracle Home already exists at this location. Select another location. Attaching Home in one node will be propagated to other nodes.

b-Make absolutely sure you are have backed up the original inventory before starting this procedure, so that you can revert if necessary.

  1. 故障处理总结

    1. rac环境不能创建rac库

在集群环境中, dbca不能创建rac库,那很可能就是/oracle/app/oraInventory/ContentsXML/inventory.xml文件中丢失了db部分的内容,我们可以使用$ORACLE_HOME/oui/bin/attachHome.sh来重建该目录,或手动修改该文件。

若执行attachHome.sh报如下的错误,那么删除/oracle/app/oraInventory/ContentsXML下的3个文件后继续执行即可。

org.xml.sax.SAXParseException: : XML-20108: (Fatal Error) Start of root element expected.

at oracle.xml.parser.v2.XMLError.flushErrorHandler(XMLError.java:415)

  1. 其它dbca静默建库常见错误的解决办法

    1. The Oracle system identifier(SID) "xxx" already exists. Specify another SID

用root用户编辑/etc/oratab,删除相应的记录: xxx:/u01/oracle:N ,保存退出问题解决。

  1. The cluster database(DB_NAME) "racdb" already exists. Please specify another DB_NAME.

原因:说明集群环境中已经有racdb这个数据库了。

解决办法:若数据库无用了,可以dbca -silent -deleteDatabase -sourceDB racdb来删除数据库,若数据库不能启动,则可以直接从crs中删除数据库的注册信息:srvctl remove db -d racdb -f后重新运行脚本即可。

  1. DBCA建库报错CRS-2566 PRCR-1071 PRCR-1006

PRCR-1006 : Failed to add resource ora.lhrdg.db for lhrdg

PRCR-1071 : Failed to register or update resource ora.lhrdg.db

CRS-2566: User 'oracle' does not have sufficient permissions to operate on resource 'ora.LISTENER_LHRDG.lsnr', which is part of the dependency specification.

DBCA_PROGRESS : 100%

权限不对,应该用grid来创建监听:srvctl config listener -l LISTENER_LHRDG -a

具体参考我的blog:http://blog.itpub.net/26736162/viewspace-2114484/

用到的SQL集合

RAC建库脚本:

dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \

-gdbname racdb  -sid racdb \

-sysPassword lhr -systemPassword lhr \

-datafileDestination 'DATA/' -recoveryAreaDestination 'DATA/' \

-redoLogFileSize 50 \

-storageType ASM -asmsnmpPassword lhr  -diskGroupName 'DATA' \

-characterset ZHS16GBK -nationalCharacterSet AL16UTF16 \

-sampleSchema true \

-automaticMemoryManagement true -totalMemory 2048 \

-databaseType OLTP  \

-emConfiguration NONE \

-nodelist ZFLHRDB1,ZFLHRDB2

静默创建监听:netca -silent -responsefile $ORACLE_HOME/assistants/netca/netca.rsp

添加监听:srvctl add listener -l LISTENER -p 1521 -o $ORACLE_HOME

 

oraInventory目录:/oracle/app/oraInventory/ContentsXML/inventory.xml

重建的话,方法一: 备份2个节点的Inventory目录,并重建空的Inventory目录,然后分别在grid和oracle用户下执行$ORACLE_HOME/oui/bin/attachHome.sh命令即可,注意只需要在其中的一个节点上执行即可。方法二,在grid用户下执行:

$ORACLE_HOME/oui/bin/runInstaller -silent -ignoreSysPrereqs \

-attachHome ORACLE_HOME="/oracle/app/11.2.0/grid" ORACLE_HOME_NAME="GridHome1" \

LOCAL_NODE="ZFLHRDB1" CLUSTER_NODES="{ZFLHRDB1,ZFLHRDB2}" CRS=true

 

$ORACLE_HOME/oui/bin/runInstaller -silent -ignoreSysPrereqs \

-attachHome ORACLE_HOME="/oracle/app/oracle/product/11.2.0/db" ORACLE_HOME_NAME="DbHome1" \

LOCAL_NODE="ZFLHRDB1" CLUSTER_NODES="{ZFLHRDB1,ZFLHRDB2}"

 

 

 

重新执行root.sh脚本:

ocrconfig -showbackup

ocrconfig -manualbackup  

 

 

$ORACLE_HOME/crs/install/rootcrs.pl -deconfig -force -verbose

ls -l $ORACLE_BASE/Clusterware/ckptGridHA*

find $ORACLE_HOME/gpnp/* -type f

find $ORACLE_HOME/gpnp/* -type f -exec rm -rf {} \;

 

 

 

$ORACLE_HOME/crs/install/rootcrs.pl -deconfig -force -verbose -lastnode -keepdg

ls -l $ORACLE_BASE/Clusterware/ckptGridHA*

find $ORACLE_HOME/gpnp/* -type f

find $ORACLE_HOME/gpnp/* -type f -exec rm -rf {} \;

 

 

ipcs

$ORACLE_HOME/root.sh

/oracle/app/11.2.0/grid/perl/bin/perl -I/oracle/app/11.2.0/grid/perl/lib -I/oracle/app/11.2.0/grid/crs/install /oracle/app/11.2.0/grid/crs/install/rootcrs.pl

 

ipcs

$ORACLE_HOME/root.sh

About Me

..........................................................................................................................................................................................................
本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
本文在ITpub(http://blog.itpub.net/26736162)和博客园(http://www.cnblogs.com/lhrbest)有同步更新
本文地址:http://blog.itpub.net/26736162/viewspace-2121863/
本文pdf版:http://yunpan.cn/cdEQedhCs2kFz (提取码:ed9b) 
小麦苗分享的其它资料:http://blog.itpub.net/26736162/viewspace-1624453/
联系我请加QQ好友(642808185),注明添加缘由
于 2016-07-05 16:00~ 2016-07-08 19:00 在中行完成
【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】
..........................................................................................................................................................................................................

拿起手机扫描下边的图片来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

时间: 2024-09-20 05:29:44

【故障处理】DBCA建库诡异问题处理--rac环境不能创建rac库的相关文章

Oracle RAC环境下配置statspack

    Statspack是Oracle 9i时代的产物,对于监控与分析数据库性能有着跨里程碑的意义,是AWR的前身.在Oracle 10g后AWR取代了statspack.尽管如此,awr异常或者需要调试包license的情况下statpack依旧是不错的选择.然而在RAC环境中,statspack并不支持,需要单独的进行配置以及使用job来进行管理.本文描述的则是通过在RAC环境下创建service,以及job来达到各节点同时产生snapshot的效果.   一.演示环境 suse11a:o

Oracle RAC环境下的阻塞(blocking blocked)介绍和实例演示_oracle

RAC环境下的阻塞不同于单实例情形,因为我们需要考虑到位于不同实例的session.也就是说之前查询的v$session,v$lock相应的应变化为全局范围来查找.本文提供了2个查询脚本,并给出实例演示那些session为阻塞者,哪些为被阻塞者.有关阻塞的概念以及单实例环境下的阻塞请参考:Oracle 阻塞(blocking blocked) 1.演示环境 scott@DEVDB> select * from v$version where rownum<2; BANNER ---------

【故障处理】 DBCA建库报错CRS-2566

[故障处理] DBCA建库报错CRS-2566 PRCR-1071 PRCR-1006 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① dbca静默建库 ② 将监听加入CRS中     Tips:        ① 若文章代码格式有错乱,推荐使用搜狗.QQ或360浏览器,也可以下载pdf格式的文档来查看,pdf文档下载地址:http://

DBCA建库问题处理之-无法创建RAC实例

在安装完RAC11.2.0.4,并打上PSU后,在通过DBCA创建数据库实例是出现诡异现象: 弹出来的框为单实例创建,二并非RAC实例.反复试了几次都是同样的问题,检查安装无问题. 在metalink上查看了下,问题原因很多,同事通过sqlplus连接空实例测试出现如下报错: [oracle@zderp2vprd01 cfgtoollogs]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu Nov 17 09

【RAC】rac环境下的数据库备份与还原

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

【RAC】Oracle 11gR2 RAC 中的 Grid Plug and Play(GPnP) 是什么?

[RAC]Oracle 11gR2 RAC 中的 Grid Plug and Play(GPnP) 是什么? 一. 什么是GPnP?   Grid Plug and Play (GPnP):Foundation for a Dynamic Cluster Management    (1)GPnPeliminates the need for a per node configuration –It is an underlying gridconcept that enables the au

Git版本控制工具(一)----git的安装及创建版本库

[正文] 一.初识Git: Git是目前世界上最先进的分布式版本控制系统(没有之一).它的开发者就是大名鼎鼎的Linux操作系统的作者Linus Torvalds.Git被开发出来的初衷是为了更好的管理Linux内核,而现在却广泛应用于各种项目中.Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等. 那那什么是版本控制系统呢?如果有一个软件,不但能自动帮我记

在Xcode中创建静态库,并使用Target支持不同平台

      在项目的进行中,即使很忙的项目,花一定的时间重构项目都不失为一件必须做的事.即使没到生死攸关也和项目的健康发展和按时提交 以及老生常谈的后期维护都有很大的关系.       在iOS项目开发中,重用代码的方法有很多种.一般来说,你可以把代码以Template的方式提升成基类子类的形式或者以Strategy的方式提升成 组成的方式.但是当代码量相当大,且在多个项目中共用同一批代码文件的时候,就需要把这些代码组成静态库的方式服用了(在iOS项目中只能使用静态库). 也就是说把这些公用代码

【Oracle】 RAC 环境删除oracle 之一

oracle 11GR2提供了一个自动删除工具deinstall 在$ORACLE_HOME 的deinstall 目录下,使用此工具可以实现卸载oracle 软件,Clusterware 软件和数据库.卸载oracle 之前可以使用dbca 删除数据库,也可以不用删除,deinstall 工具会完成对数据库的删除工作,下面是在RAC环境下进行删除数据库的操作. 环境:两节点RAC:rac1,rac2 ,删除之前数据库未关闭~! oracle@rac1:/opt/rac/oracle/11.2.