需要说明一下,这篇文章不是介绍如何完整的删除包括CLUSTER在内的RAC环境,而只是在数据库层介绍如何删除一个实例。
和添加实例一样,这个步骤也包括手工方式和工具方式两种。
不过利用工具删除实例是非常简单的,通过dbca启动图形界面,然后选择CLUSTER选项,并选择管理实例,然后选择删除实例。输入SYS用户和密码,选择要删除实例的数据库,连接后选择要删除的实例,就可以了。工具会完成剩下所有的操作,包括实例的删除,删除这个实例对应的表空间以及重做日志,修改初始化参数,以及从srvctl命令中删除实例信息等等。
唯一需要注意的是,在选择数据库并提供SYS登陆方式时,需要确保数据库可以通过NET服务以SYSDBA权限连接到数据库上。对于RAC环境,一般监听注册的是VIP地址,这里需要手工将PUBLIC IP地址添加的监听地址中,并重启监听。
因此通过工具来删除实例是很容易的,这里主要讨论手工方式删除实例,其实这个步骤也不是很复杂,基本上是添加实例的一个逆操作而已:
bash-3.00$ export ORACLE_SID=test1
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on星期一4月20 18:45:42 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/test/spfiletest.ora
SQL> show parameter cluster_database
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cluster_database boolean TRUE
cluster_database_instances integer 2
SQL> select instance_name from gv$instance;
INSTANCE_NAME
----------------
test1
test2
首先关闭节点2上的实例:
SQL> select instance_name from gv$instance;
INSTANCE_NAME
----------------
test1
test2
SQL> host
$ srvctl stop inst -d test -i test2
$ exit
SQL> select instance_name from gv$instance;
INSTANCE_NAME
----------------
test1
取消所有实例2设置的初始化参数:
SQL> ALTER SYSTEM SET CLUSTER_DATABASE_INSTANCES = 1 SCOPE = SPFILE;
系统已更改。
SQL> ALTER SYSTEM RESET INSTANCE_NUMBER SCOPE = SPFILE SID = 'test2';
系统已更改。
SQL> ALTER SYSTEM RESET THREAD SCOPE = SPFILE SID = 'test2';
系统已更改。
SQL> ALTER SYSTEM RESET UNDO_TABLESPACE SCOPE = SPFILE SID = 'test2';
系统已更改。
去掉实例2所使用的重做日志和撤销表空间:
SQL> ALTER DATABASE DISABLE THREAD 2;
数据库已更改。
SQL> ALTER DATABASE DROP LOGFILE GROUP 4;
数据库已更改。
SQL> ALTER DATABASE DROP LOGFILE GROUP 5;
数据库已更改。
SQL> ALTER DATABASE DROP LOGFILE GROUP 6;
数据库已更改。
SQL> DROP TABLESPACE UNDOTBS2 INCLUDING CONTENTS AND DATAFILES;
表空间已删除。
至此数据库部分的实例清除已经完成。对于2节点RAC而言,删除一个实例后,可以将CLUSTER_DATABASE初始化参数设置为FALSE,不过这需要实例重启后才能生效:
SQL> EXIT从Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options断开bash-3.00$ srvctl remove instance -d test -i test2
Remove instance test2 from the database test? (y/[n]) y
清除srvctl中test2实例信息。
最后可以根据需要重新设置监听和TNSNAMES.ORA中的配置。