不幸的是,我们看到了这样的信息:
- [oracle@ OPatch]$ ./opatch lsInventory
- Invoking OPatch 10.2.0.4.2
- Oracle Interim Patch Installer version 10.2.0.4.2
- Copyright (c) 2007, Oracle Corporation. All rights reserved.
- Oracle Home : /opt/oracle/product/10g
- Central Inventory : n/a
- from :
- OPatch version : 10.2.0.4.2
- OUI version : 10.2.0.4.0
- OUI location : /opt/oracle/product/10g/oui
- Log file location : n/a
- OPatch cannot find a valid oraInst.loc file to locate Central Inventory.
- OPatch failed with error code 104
和客户沟通了以后我们发现,这套系统不是安装的,而是开发商直接tar过来的。碰到这种情况该怎么办呢?在上面我们讲过,每个ORACLE HOME下面都有本地Inventory,在本地的Inventory中也已经注册了所有的Oracle组件的信息,那么我们就可以通过本地的Inventory来创建全局的Inventory。
重建全局Inventory的方法很简单,第一步我们首先要编辑一个oraInst.loc文件,使之指向我们要创建全局Inventory的目录。
- Inventory_loc=/opt/oracle/oraInventory
- inst_group=oinstall
然后将目录转向ORACLE_HOME下的oui/bin目录:
- $ cd $ORACLE_HOME/oui/bin
在该目录下执行下面的脚本就可以完成全局Inventory的创建:
- %./runInstaller -silent -ignoreSysPrereqs -attachHome ORACLE_HOME="<Oracle_Home_Location>" ORACLE_HOME_NAME="<Name_Of _Oracle_Home>"
下面是老白重新创建自己测试机上的Inventory的命令:
- oracle@ bin]$ ./runInstaller -silent -ignoreSysPrereqs -attachHome ORACLE_HOME="/opt/oracle/product/10g" ORACLE_HOME_NAME="ora10g"
- Starting Oracle Universal Installer...
- No pre-requisite checks found in oraparam.ini, no system pre-requisite checks will be executed.
- >>> Ignoring required pre-requisite failures. Continuing...
- The Inventory pointer is located at /etc/oraInst.loc
- The Inventory is located at /opt/oracle/oraInventory
- 'AttachHome' was successful.
这个命令支持Oracle 10.2,对于Oracle 9i和10.1的版本,如果丢失了全局Inventory,那么就需要从一个类似的平台克隆一个Inventory过来。克隆的具体方法由于篇幅有限,在这里就不做过多的描述了,有兴趣的朋友可以参考Metalink上的下面几个文档:
- Note 559299.1 "Cloning An Existing Oracle9i Release 2 (9.2.0.x) RDBMS Installation Using OUI"
- Note 559301.1 "Cloning An Existing Oracle10g Release 1 (10.1.0.x) RDBMS Installation Using OUI"
- Note 559304.1 "Cloning An Existing Oracle10g Release 2 (10.2.0.x) RDBMS Installation Using OUI"
- Note 559305.1 "Cloning An Existing Oracle11g Release 1 (11.1.0.x) RDBMS Installation Using OUI"
针对11.2以后的数据库,这个命令有所区别:
- % ./runInstaller -silent -ignoreSysPrereqs -attachHome ORACLE_HOME="<Oracle_Home_Location>"
我们不需要指定Oracle Home的名字了。
刚才的例子是单节点的,在RAC环境下要稍微复杂一些。在本小节的最后一部分,我们来简单探讨一下重建RAC环境下的全局Inventory的方法。
10g RAC引入了CRS,因此我们在重建Inventory的时候,至少需要修复两个ORACLE_HOME,一个是RDBMS的,一个是CRS的。命令如下:
- ./runInstaller -silent -ignoreSysPrereqs -attachHome ORACLE_HOME="<10g Ora_Crs_Home Path>" ORACLE_HOME_NAME="<Name of oracleCRSHome>" LOCAL_NODE='node1' CLUSTER_NODES=node1,node2 CRS=true
- ./runInstaller -silent -ignoreSysPrereqs -attachHome ORACLE_HOME="<10g Oracle_Home Path>" ORACLE_HOME_NAME="<Name of oracleHome>" LOCAL_NODE='node1' CLUSTER_NODES=node1,node2



