WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606
全部博文(599)
分类: Oracle
2009-12-31 09:36:45
前面几篇文章介绍了在Oracle 10203 for Solaris sparc的RAC双节点环境中,新增一个节点的过程。这里描述删除节点的操作。
这一篇介绍Oracle数据库实例的删除。
这篇介绍手工删除节点的方面。删除节点虽然和添加节点相比要简单很多,但是还是有一些地方需要注意。
比如这个删除节点的操作是临时的还是永久的。如果是临时的操作,那么不需要修改任何的初始化参数,只需要关闭数据库实例就可以了,以后随时可以将删除的节点添加回来,而且由于初始化参数不需要修改,添加过程都不会导致数据库的重启。对于CLUSTER的设置,也可以考虑保留。唯一需要修改的是节点1和节点2上TNSNAMES.ORA中,对于整个RAC环境的设置,要去掉已删除的节点。另外,如果使用srvctl来管理RAC环境,还应该从srvctl的配置中去掉被删除节点的信息。
而如果要彻底删除节点,就要彻底清除所有节点3的信息,对这个例子而言,就意味着要将RAC环境恢复到初始两个节点运行的状态。这里需要执行的操作包括了临时去掉节点的所有修改,因此这里介绍永久删除节点的方法。
bash-3.00$ srvctl status db -d testrac
实例 testrac1 正在节点 racnode1 上运行
实例 testrac2 正在节点 racnode2 上运行
实例 testrac3 正在节点 racnode3 上运行
bash-3.00$ srvctl stop inst -d testrac -i testrac3
bash-3.00$ srvctl status db -d testrac
实例 testrac1 正在节点 racnode1 上运行
实例 testrac2 正在节点 racnode2 上运行
实例 testrac3 没有在 racnode3 节点上运行
首先需要修改的是数据库的实例,对于节点3而言,只需要简单的关闭实例即可。
下面关闭ASM实例:
bash-3.00$ srvctl status asm -n racnode3
ASM 实例 +ASM3 正在节点 racnode3 上运行。
bash-3.00$ srvctl stop asm -n racnode3
bash-3.00$ srvctl status asm -n racnode3
ASM 实例 +ASM3 不在节点 racnode3 上运行。
由于数据库使用的是共同的SPFILE:
SQL> show parameter spfile
NAME TYPE VALUE
-------------------- ----------- -------------------------------
spfile string +DISK/testrac/spfiletestrac.ora
因此只需要将SPFILE中实例3的初始化参数去掉就可以了:
SQL> select name, value
2 from v$spparameter
3 where sid = 'testrac3';
NAME VALUE
------------------------------ ------------------------------------------------------------
thread 3
instance_number 3
undo_tablespace UNDOTBS3
service_names TESTRAC, testrac
local_listener (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.198.227)(PORT = 1521))
SQL> alter system reset thread scope = spfile sid = 'testrac3';
系统已更改。
SQL> alter system reset instance_number scope = spfile sid = 'testrac3';
系统已更改。
SQL> alter system reset undo_tablespace scope = spfile sid = 'testrac3';
系统已更改。
SQL> alter system reset service_names scope = spfile sid = 'testrac3';
系统已更改。
SQL> alter system reset local_listener scope = spfile sid = 'testrac3';
系统已更改。
下面设置其他两个节点的CLUSTER_DATABASE_INSTANCES初始化参数,将其修改为2:
SQL> select sid, name, value
2 from v$spparameter
3 where name = 'cluster_database_instances';
SID NAME VALUE
---------- ------------------------------ --------------------------------------------
* cluster_database_instances 3
SQL> alter system set cluster_database_instances = 2 scope = spfile;
系统已更改。
至此,数据库级的修改已经完成,等到其他两个实例重启的时候,就会自动去掉当前加载的实例3相关的初始化参数。