在集群环境中, 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: <Line 1, Column 1>: XML-20108: (Fatal Error) Start of root element expected.
at oracle.xml.parser.v2.XMLError.flushErrorHandler(XMLError.java:415)
1.2 其它dbca静默建库常见错误的解决办法
一、 The Oracle system identifier(SID) "xxx" already exists. Specify another SID
用root用户编辑/etc/oratab,删除相应的记录: xxx:/u01/oracle:N ,保存退出问题解决。
二、 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后重新运行脚本即可。
三、 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/
2 用到的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