從RAC DB中移除一個node
範例環境:
Oracle 版本 : 10.2.0.3
3 nodes for RAC DB
DB name = orcl
要移除的node, node name = ora03; instance name = orcl3
在保留的node 做以下流程:
1. 先確認有 ocr 的 backups
$ocrconfig -showbackup
2. 移除ora03 並停止相關服務
$srvctl stop instance -d orcl -i orcl3
$srvctl remove instance -d orcl -i orcl3
$srvctl stop asm -n ora03 (有使用ASM的話)
$srvctl remove asm -n ora03 (有使用ASM的話)
$srvctl stop nodeapps -n ora03
3. 切換成root 執行以下指令
以下資訊可以查 #$ORA_CRS_HOME/bin/crs_stat
# srvctl remove nodeapps -n ora03
#crs_unregister ora.ora03.LISTENER_ORA03.lsnr
#crs_unregister ora.ora03.vip
4. 在所有node上, 將下面兩個檔案內,有關於要移除 ora03 相關資訊都拿掉
$ORACLE_HOME/network/admin/tnsnames.ora
$ORACLE_HOME/network/admin/listener.ora
5. login 到DB
$sqlplus / as sysdba
SQL>select * from v$log where thread#=3; (本例是3)
SQL>alter system archive log all; (確認你要移掉的log, ARC=YES, 如果不是下這個指令)
SQL>alter database disable thread 3;
SQL>alter database drop logfile group YY; (將要移除的instance 之log 移除, YY號碼可由 v$log 得知)
SQL>drop tablespace UNDOTBS3; (將第三個node的undo tablespace 移除掉)
6. 移除掉SPfile內關於此node的參數
SQL>alter system reset local_listener scope=spfile sid='orcl3';
SQL>alter system reset thread scope=spfile sid='orcl3';
SQL>alter system reset undo_tablespace scope=spfile sid='orcl3';
SQL>alter system reset instance_number scope=spfile sid='orcl3';
SQL>alter system reset "__db_cache_size" scope=spfile sid='orcl3';
SQL>alter system reset "__java_pool_size" scope=spfile sid='orcl3';
SQL>alter system reset "__large_pool_size" scope=spfile sid='orcl3';
SQL>alter system reset "__shared_pool_size" scope=spfile sid='orcl3';
SQL>alter system reset "__streams_pool_size" scope=spfile sid='orcl3';
SQL>create pfile='/tmp/pfileDB_for_checks' from spfile; (建立一個pfile檔叫pfileDB_for_checks, 可以確認內容是否還有移除的node)
-- 如果有使用ASM的話,大概就像下面這樣 ---
SQL>alter system reset local_listener scope=spfile sid='+ASM...';
SQL>alter system reset instance_number scope=spfile sid='+ASM...';
SQL>create pfile='/tmp/pfileASM_for_further_checks' from spfile;
7. 將node 從CRS移除
$olsnodes -n (確認目前node數, 要移除的node還在)
ora01 1
ora02 2
ora03 3
$ORA_CRS_HOME/install/rootdelete.sh remote nosharedvar
(用root 的身份,在要移除的那台執行這個指令,$ORA_CRS_HOME是環境變數,因個人環境設定而異,如果要移除那台已關機,就不用了)
$ORA_CRS_HOME/install/rootdeletenode.sh ora03,3
(用root 身份在其它保留的node 上下這個指令)
$$olsnodes -n (再確認是否移除)
ora01 1
ora02 2
8. 更新 Oracle inventory
執行以下指令前,可以先 cat 這個檔案,就可以大概了解. $ORACLE_BASE/oraInventory/ContentsXML/inventory.xml
更新 rdbms inventory
$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME CLUSTER_NODES=ora01,ora02
更新 crs inventory
$ORA_CRS_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORA_CRS_HOME CRS=TRUE CLUSTER_NODES=ora01,ora02
如果有 agent 的話,記得停止 agent 並更新 EM上的 nodelist
9. 把移除的node上的 oracle相關檔案刪除
主要的Oracle 安裝檔案
rm -rf /etc/oracle /etc/oratab /oraInst.loc
rm -rf $ORACLE_BASE/product $ORACLE_BASE/oraInventory
相關檔案刪除及停止服務並重開機
/etc/init.d/oracleasm stop
chkconfig --del oracleasm
rm /etc/init.d/oracleasm
service devlabel stop
chkconfig --del devlabel
rm -rf /var/tmp/.oracle
vi $HOME/.bashrc (remove entries related to Oracle instances)
rm /etc/logrotate.d/ora_*
vi /etc/modules.conf
(comment out #options qla2300 and #options hangcheck-timer)
rm /etc/qla2300.conf
rm /boot/initrd-2.4.21-37.ELsmp.img; mkinitrd /boot/initrd-2.4.21-37.ELsmp.img 2.4.21-37.ELsmp (customize with current kernel name)
rmmod qla2300
ifconfig eth1 down
ifconfig eth2 down
vi /etc/sysconfig/network-scripts/ifcfg-eth1 (edit: ONBOOT=no)
vi /etc/sysconfig/network-scripts/ifcfg-eth2 (edit: ONBOOT=no)
shutdown -r now
阅读(738) | 评论(0) | 转发(0) |