2026. 8. 5. 13:22 오라클
10g RAC Add Node 작업
========================================================================
10g RAC Add Node 작업 rac1,rac2
RAC 10.2.0.5, RHEL 5.5
시나리오
: OS해킹 의심으로 1번노드 삭제 후 재구성
oracle_HOME: /oracle/product/10.2.0
GRID_HOME : /oracle/crs/ORCL/
========================================================================
1. 파일백업
상태 반드시 백업
ocrchek
crsctl query css votedisk
crs_stat -t > /tmp/crs_stat_t
crs_stat -p > /tmp/crs_stat_p
mkdir /tmp/backup
cp /etc/hosts /tmp/backup
cp -rp /oracle/product/10.2.0/network/admin/* /tmp/backup
cp -rp /oracle/product/10.2.0/dbs /tmp/backup
cp -rp /etc/ora* /tmp/backup
cp -rp /etc/passwd /tmp/backup
cp -rp /etc/group /tmp/backup
cd /oracle/inventory
tar cvf /tmp/backup/inventory.tar .
cp -rp /home/oracle/.bash_profile /tmp/backup
cd /etc
tar cvf /tmp/backup/etc.tar .
init 화일은 수동으로 한번 더 받는다. link 화일 확인 필요..
crs stop 후 vote,ocr 백업 !!
root 유저로
dd if=/dev/raw/raw1 /tmp/backup/raw1
dd if=/dev/raw/raw2 /tmp/backup/raw2
dd if=/dev/raw/raw3 /tmp/backup/raw3
dd if=/dev/raw/raw4 /tmp/backup/raw4
dd if=/dev/raw/raw5 /tmp/backup/raw5
========================================================================
2. 노드삭제
- crs삭제(1번노드 root에서 )
crsctl stop crs
cd /oracle/crs/ORCL/install
./rootdelete.sh local nosharedvar nosharedhome
- 노드정보 update(2번노드 root에서)
/oracle/crs/ORCL/bin/olsnodes -n
cd /oracle/crs/ORCL/install
./rootdeletenode.sh rac1,1
/oracle/crs/ORCL/bin/olsnodes -n
- inventory update (2번노드 oracle에서)
cd $oracle_HOME/oui/bin
./runInstaller -updateNodelist oracle_HOME="/oracle/product/10.2.0" CLUSTER_NODES=rac2
./runInstaller -updateNodelist oracle_HOME="/oracle/crs/ORCL" CLUSTER_NODES=rac2 crs=TRUE
이때 노드정보 삭제가 fail 되고 rollback 될수가 있는데 무시하고 진행해도 상관없다.
========================================================================
3. 노드 OS재설치
========================================================================
4. AddNode 작업
- hosts 파일 복구
cp /backup/hosts /etc/hosts
- user/group 생성
groupadd -g 501 oinstall
groupadd -g 502 dba
groupadd -g 503 oper
useradd -u 500 -g oinstall -G dba oracle
passwd oracle
- ssh key setup
./sshUserSetup.sh -user oracle -hosts "rac1 rac2" -noPromptPassphrase -advanced
- 디렉터리 생성
mkdir -p /oracle/crs/ORCL
mkdir -p /oracle/product/10.2.0
chown -R oracle:dba /oracle
- profile설정:root 및 oracle계정 profile 설정
.bash_profile 설정
========================================================================
노드 Add 작업 진행
- crs AddNode.sh 수행(2번노드 oracle계정에서)
cd /oracle/crs/ORCL/oui/bin
./addNode.sh -silent "CLUSTER_NEW_NODES={rac1}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={rac1-priv}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={rac1-vip}"
(root script수행)
- 1번노드
/oracle/oraInventory/orainstRoot.sh
- 2번노드
vi /oracle/crs/ORCL/install/rootaddnode.sh
-- Node id를 3번에서 1번으로 수정
-----------------------------------------
crs_NEW_HOST_NAME_LIST=rac1,3
crs_NEW_NODE_NAME_LIST=rac1,3
crs_NEW_PRIVATE_NAME_LIST=rac1-priv,3
-----------------------------------------
crs_NEW_HOST_NAME_LIST=rac1,1
crs_NEW_NODE_NAME_LIST=rac1,1
crs_NEW_PRIVATE_NAME_LIST=rac1-priv,1
-----------------------------------------
2번 (root)
/oracle/crs/ORCL/install/rootaddnode.sh
/oracle/crs/ORCL/bin/olsnodes -n
- 1번노드
/oracle/crs/ORCL/root.sh
-완료후 상태
[root@rac1 /]# crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....B1.lsnr application ONLINE UNKNOWN rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora....B2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2
ora.orcl.db application ONLINE ONLINE rac2
ora....l1.inst application ONLINE UNKNOWN rac1
ora....l2.inst application ONLINE ONLINE rac2
- DB Home AddNode.sh 수행(2번노드 oracle계정에서)
cd /oracle/product/10.2.0/oui/bin
./addNode.sh -silent "CLUSTER_NEW_NODES={rac1}"
(root script수행)
- 1번노드에서
/oracle/product/10.2.0/root.sh
- DB Config 복구
cp -rp /backup/network/* /oracle/product/10.2.0/network/admin
cp -rp /backup/dbs/* /oracle/product/10.2.0/dbs
-- 리스너 기동
srvctl start listener -n rac1 -l LISTENER_rac1
srvctl start listener -n rac1 -l LISTENER_ORCL2_rac1
또는
srvctl stop nodeapps -n rac1
srvctl start nodeapps -n rac1
-- DB 디렉터리 생성
mkdir -p /oracle/LOG/ORCL/adump
mkdir -p /oracle/LOG/ORCL/bdump
mkdir -p /oracle/LOG/ORCL/cdump
mkdir -p /oracle/LOG/ORCL/udump
-- DB 기동
sqlplus / as sysdba
SQL> startup
or
srvctl add instance -d ORCL -i ORCL1
srvctl add instance -d ORCL -i ORCL2
srvctl start instance -d ORCL -i ORCL1
srvctl start instance -d ORCL -i ORCL2
-- 상태체크
[root@rac1 /]# crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....B1.lsnr application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora....B2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2
ora.orcl.db application ONLINE ONLINE rac2
ora....l1.inst application ONLINE ONLINE rac1
ora....l2.inst application ONLINE ONLINE rac2
- 작업후 신규노드에서 ons, gsd 가 없으므로 등록해준다. (확장자는 반드시 .cap 이어야 함)
2번노드에서 아래의 정보로 화일 생성
crs_stat -p ora.rac2.ons > /oracle/crs/ORCL/crs/profile/ora.rac2.ons.cap
crs_stat -p ora.rac2.gsd > /oracle/crs/ORCL/crs/profile/ora.rac2.gsd.cap
해당화일의 정보를 2번에서 -> 1번으로 수정 (hastname 등)
vi /oracle/crs/ORCL/crs/profile/ora.rac2.ons.cap
vi /oracle/crs/ORCL/crs/profile/ora.rac2.gsd.cap
1번 노드에 화일 생성하여 삽입 (rac1)
vi /oracle/crs/ORCL/crs/profile/ora.rac1.ons.cap
vi /oracle/crs/ORCL/crs/profile/ora.rac1.gsd.cap
crs_register ora.rac1.ons
crs_register ora.rac1.gsd
crs_start ora.rac1.ons
crs_start ora.rac1.gsd
=============================
기타 리소스 Troubleshooting 시 사용
crs_stat -p ora.rac1.LISTENER_rac1.lsnr > /oracle/crs/ORCL/crs/profile/ora.rac1.LISTENER_rac1.lsnr.cap
crs_stat -p ora.rac2.LISTENER_rac2.lsnr > /oracle/crs/ORCL/crs/profile/ora.rac2.LISTENER_rac2.lsnr.cap
crs_stat -p ora.rac1.vip > /oracle/crs/ORCL/crs/profile/ora.rac1.vip.cap
crs_stat -p ora.rac2.vip > /oracle/crs/ORCL/crs/profile/ora.rac2.vip.cap
crs_stat -p ora.rac1.ons > /oracle/crs/ORCL/crs/profile/ora.rac1.ons.cap
crs_stat -p ora.rac2.ons > /oracle/crs/ORCL/crs/profile/ora.rac2.ons.cap
crs_stat -p ora.rac1.gsd > /oracle/crs/ORCL/crs/profile/ora.rac1.gsd.cap
crs_stat -p ora.rac2.gsd > /oracle/crs/ORCL/crs/profile/ora.rac2.gsd.cap
crs_stop ora.rac1.vip
crs_stop ora.rac2.vip
crs_stop ora.rac1.ons
crs_stop ora.rac2.ons
crs_stop ora.rac1.gsd
crs_stop ora.rac2.gsd
crs_start ora.rac1.vip
crs_start ora.rac2.vip
crs_start ora.rac1.ons
crs_start ora.rac2.ons
crs_start ora.rac1.gsd
crs_start ora.rac2.gsd
crs_register ora.rac1.vip
crs_register ora.rac2.vip
crs_register ora.rac1.LISTENER_rac1.lsnr
crs_register ora.rac2.LISTENER_rac2.lsnr
crs_register ora.rac1.ons
crs_register ora.rac2.ons
crs_register ora.rac1.gsd
crs_register ora.rac2.gsd
crs_unregister ora.rac1.LISTENER_rac1.lsnr
crs_unregister ora.rac2.LISTENER_rac2.lsnr
crs_unregister ora.rac1.vip
crs_unregister ora.rac2.vip
crs_unregister ora.rac1.ons
crs_unregister ora.rac2.ons
crs_unregister ora.rac1.gsd
crs_unregister ora.rac2.gsd
srvctl start listener -n rac1 -l LISTENER_rac1
srvctl start listener -n rac2 -l LISTENER_rac2
vi /oracle/crs/ORCL/crs/profile/ora.rac1.vip.cap
vi /oracle/crs/ORCL/crs/profile/ora.rac2.vip.cap
srvctl add nodeapps -n rac1 -o /oracle/product/10.2.0 -A 192.168.56.114/255.255.255.0/eth0
srvctl add nodeapps -n rac2 -o /oracle/product/10.2.0 -A 192.168.56.115/255.255.255.0/eth0
----------------------------
vipca silent 실행
/vipca -silent -nodelist rac1,rac1 -vipfile /oracle/crs/ORCL/vipfile -orahome /oracle/crs/ORCL
cat /oracle/crs/ORCL/vipfile
rac1-vip=192.168.56.114/255.255.255.0/eth0
rac2-vip=192.168.56.115/255.255.255.0/eth0


