介绍RAC环境的安装的文章很多,但是介绍RAC环境卸载的并不多见,如果RAC环境卸载的不彻底,很可能会影响RAC环境的再次搭建。

这一篇介绍数据库的删除和数据库软件的卸载。


这是一个三节点的RAC环境,数据库版本是10.2.0.3:

SQL> SELECT * FROM V$VERSION;

BANNER

----------------------------------------------------------------

Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi

PL/SQL Release 10.2.0.3.0 - Production

CORE??? 10.2.0.3.0????? Production

TNS for Solaris: Version 10.2.0.3.0 - Production

NLSRTL Version 10.2.0.3.0 - Production

SQL> SELECT INSTANCE_NUMBER, INSTANCE_NAME, HOST_NAME, STATUS

? 2? FROM GV$INSTANCE;

INSTANCE_NUMBER INSTANCE_NAME??? HOST_NAME? STATUS

--------------- ---------------- ---------- ------------

????????????? 1 testrac1???????? racnode1?? OPEN

????????????? 3 testrac3???????? racnode3?? OPEN

????????????? 2 testrac2???????? racnode2?? OPEN

SQL> SELECT NAME FROM V$DATABASE;

NAME

---------

TESTRAC

首先关闭数据库和监听:

bash-2.03$ srvctl stop db -d testrac

bash-2.03$ srvctl stop listener -n racnode1

bash-2.03$ srvctl stop listener -n racnode2

bash-2.03$ srvctl stop listener -n racnode3

确认没有数据库服务启动:

bash-2.03$ srvctl status service -d testrac

Service PRE_TESTRAC is not running.

Service mytest is not running.

根据需要,可以选择是否使用DBCA删除数据库。使用图形方式删除Oracle数据库非常简单。

下面关闭ASM实例:

bash-2.03$ srvctl stop asm -n racnode1

bash-2.03$ srvctl stop asm -n racnode2

bash-2.03$ srvctl stop asm -n racnode3

然后可以利用runInstaller来卸载Oracle数据库软件:

$ cd $ORACLE_HOME/oui/bin

$ ./runInstaller

Starting Oracle Universal Installer...

No pre-requisite checks found in oraparam.ini, no system pre-requisite checks will be executed.

Preparing to launch Oracle Universal Installer from /tmp/OraInstall2010-04-22_05-00-41PM. Please wait ...$ Oracle Universal Installer, Version10.2.0.3.0 Production

Copyright (C) 1999, 2006, Oracle. All rights reserved.

在图形界面上选择Deinstall Products。

选择当时安装的Oracle的Software的路径名称,这里是OraDb10g_home1,然后点击Remove。

Oracle会弹出所有卸载的组件,点击确认后开始删除。

Oracle软件的删除过程出了一个错误,似乎是删除远端节点的软件时的报错,检查$ORACLE_BASE/oraInventory/log目录,找到对应的trace文件,发现了下面的信息:

INFO: Running command '/tmp/OraInstall2010-04-22_05-00-41PM/oui/bin/runInstaller -jreLoc ../../jre -paramFile /tmp/OraInstall2010-04

-22_05-00-41PM/oui/clusterparam.ini? -silent -ignoreSysPrereqs -removeHome -noClusterEnabled ORACLE_HOME=/data/oracle/product/10.2/d

atabase LOCAL_NODE=racnode3 -remoteInvocation -invokingNodeName racnode2 -logFilePath "/data/oracle/oraInventory/logs" -timestamp 20

10-04-22_05-00-41PM' on the nodes 'racnode3'.

INFO: Invoking OUI on cluster nodes racnode3

INFO: /tmp/OraInstall2010-04-22_05-00-41PM/oui/bin/runInstaller -jreLoc ../../jre -paramFile /tmp/OraInstall2010-04-22_05-00-41PM/ou

i/clusterparam.ini? -silent -ignoreSysPrereqs -removeHome -noClusterEnabled ORACLE_HOME=/data/oracle/product/10.2/database LOCAL_NOD

E=racnode3 -remoteInvocation -invokingNodeName racnode2 -logFilePath "/data/oracle/oraInventory/logs" -timestamp2010-04-22_05-00-41

PM

SEVERE: Remote 'RemoveHome' failed on nodes: 'racnode1'. Refer to '/data/oracle/oraInventory/logs/installActions2010-04-22_05-00-41P

M.log' for details.

You can manually re-run the following command on the failed nodes after the installation:

?/data/oracle/product/10.2/database/oui/bin/solaris/runInstaller -removeHome -noClusterEnabled ORACLE_HOME=/data/oracle/product/10.2

/database LOCAL_NODE=<node on which command is to be run>.

INFO: User Selected: Yes/OK

INFO: The flags set for this home (/data/oracle/product/10.2/crs) are:clean

INFO: Home:/data/oracle/product/10.2/crs oraclehomeproperties.xml is not saved because the flags indicate no changes to this file.

INFO: The flags set for this home (/data/oracle/product/10.2/database) are:localnode|nodelist|removed

INFO: Home:/data/oracle/product/10.2/database oraclehomeproperties.xml is not saved because the flags indicate no changes to this fi

le.

INFO: Saving serialized component list for /data/oracle/product/10.2/database

INFO: Updating XML inventory.

INFO: Current Inventory:

??????? Oracle Home: OraCrs10g_home1

??????????????? This Oracle Home has not been changed in this session.

INFO: This deinstallation was successful

根据错误信息,节点racnode1上的软件卸载出现了错误,而racnode2和racnode3卸载成功。

但是当前节点就是racnode1,而且通过操作系统上检查ORACLE_HOME,发现racnode1和racnode3上已经被成功卸载,而racnode2上没有被卸载。

再次检查log信息,发现:

Configuration assistant "Oracle Net Configuration Assistant - Deinstall Script" succeeded

INFO: All the tools have been executed Successfully

INFO: Beginning deinstalls

INFO: Setting variable 'ORACLE_HOME' to '/data/oracle/product/10.2/database'. Received the value from a code block.

INFO: Setting variable 'CLUSTER_NODES' to 'racnode1,racnode2,racnode3'. Received the value from a code block.

INFO: Local node 'racnode2' is derived from the Oracle home properties.

INFO: Setting variable 'LOCAL_NODE' to 'racnode2'. Received the value from a code block.

INFO: Setting variable 'REMOTE_NODES' to 'racnode1,racnode3'. Received the value from a code block.

m_asNodeArray:racnode2,racnode1,racnode3

m_sLocalNode:racnode2

INFO: Deinstalling? Oracle Database10gPatch10.2.0.3.0

INFO: Setting variable 'ORACLE_HOME' to '/data/oracle/product/10.2/database'. Received the value from a code block.

INFO: Deinstalling? Oracle Database10g10.2.0.1.0

INFO: Calling Action fileActions10.2.0.0.0? createDirRecurse

??????? destination = /data/oracle/product/10.2/database/oc4j/opmn/lib

??????? selectedNodes = null

??????? permissions = null

??????? wner = null

??????? group = null

发现Oracle认为当前节点是racnode2,因此当前节点和racnode3被清除。这就解释了为什么节点2被保留,而节点1和3被清除。

那么为什么当前节点racnode1被当作racnode2呢,这是由于当时创建RAC环境后,racnode1上的Oracle安装目录所在磁盘损坏,为了更快的恢复RAC环境,当时将racnode2的ORACLE_HOME目录整个打包,拷贝到racnode1上,当时改了一个CLUSTERWARE上的一个配置,使得RAC服务可以正常的启动,但是ORAINVENTORY等其他的配置并没有修改,因此Oracle的RAC可以正常运行,但是使用DBCA卸载软件的时候,当前节点被错误的认为是racnode2。

根据Oracle提供的命令,在racnode2上执行:

bash-2.03$ /data/oracle/product/10.2/database/oui/bin/solaris/runInstaller -removeHome -noClusterEnabled ORACLE_HOME=/data/oracle/product/10.2/database LOCAL_NODE=racnode2

bash: /data/oracle/product/10.2/database/oui/bin/solaris/runInstaller: No such file or directory

bash-2.03$ /data/oracle/product/10.2/database/oui/bin/runInstaller -removeHome -noClusterEnabled ORACLE_HOME=/data/oracle/product/10.2/database LOCAL_NODE=racnode2

Starting Oracle Universal Installer...

No pre-requisite checks found in oraparam.ini, no system pre-requisite checks will be executed.

The inventory pointer is located at /var/opt/oracle/oraInst.loc

The inventory is located at /data/oracle/oraInventory

'RemoveHome' was successful.

这样,Oracle的软件就被成功的卸载。


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html