cat /etc/hosts
## Public : 외부 클라이언트들이 노드로 접속할때 사용하는 IP주소
192.168.56.126 rac1
192.168.56.127 rac2
## Private : 노드간의 통신을 하기 위해서 사용되는 IP주소
192.168.55.126 rac1-priv
192.168.55.127 rac2-priv
## Virtual : Failover를 지원하기 위해서 사용되는 IP주소
192.168.56.128 rac1-vip
192.168.56.129 rac2-vip
## grid scan : Failover를 지원하기 위해서 사용되는 IP주소, 많은 Virtual 주소들을 grid scan IP가 관리한다.
192.168.56.130 rac-scan
여러대의 컴퓨터들이 연결되어 하나의 컴퓨터처럼 동작하는 기능의 소프트웨어
9i 버전까지는 OS의 클러스터 소프트웨어 서비스를 이용해야 했다.
SUN : SUN Cluster
HP : HP - serviceGuard
IBM AIX : HACMP(High Availability Cluster MultiProcessing)
10g 버전부터 Oracle Cluster 소프트웨어를 지원한다.
RAC 구성의 전체 정보를 저장하고 있는 디스크로 RAC에 핵심 역할을 담당한다.
RAC를 시작하려면 OCR에 저장되어 있는 정보를 보고 RAC를 구성해야 하는데 10g RAC까지는 RAC 시작후에 ASM instance를 시작하기 때문에 OCR를 ASM에 저장할 경우 RAC를 시작할 수 없게 되었다.
단 11g 에서는 이 부분이 개선되어 ASM 디스크를 사용 가능하다.
오라클에서 권장하는 OCR최소 크기는 100MB입니다.
OCR이 장애가 나면 RAC 전체가 중단된다.
OCR 정보 확인
cat /etc/oracle/ocr.loc

ocrcheck
ocrconfig -showbackup
RAC는 여러개의 instance node들로 구성이 되어 있으며 각 node들이 문제가 있는지 없는지를 실시간으로 파악하고 있어야한다. 그래야 클라이언트들이 요청하는 서비스를 정확하게 연결해 줄 수 있기 때문이다.
cssd프로세스 : 각 node들이 정상적으로 작동하고 있는지 interconnect을 통해서 매초마다 heartbeat를 보내고 각 node들은 그에 대한 응답을 다시 보내어서 자신이 정상적으로 동작하고 있다는 것을 알려 주게 된다. 이런 정보를 vote disk에 저장한다.
오라클에서 권장하는 vote disk 최소크기는 20MB
11g RAC부터는 OCR과 vote disk를 모두 ASM Storage에 저장할 수 있다.
vote disk 정보 확인
crsctl query css votedisk

crsctl check crs



crs_stat -t

watch -n 5 crs_stat -tsrvctl status database -d racdb(db이름)

srvctl status instance -d racdb -i racdb1

srvctl status instance -d racdb -i racdb2

srvctl status nodeapps

srvctl stop database -d racdb(db이름) -o immediatesrvctl start database -d racdb(db이름)instance -> asm -> application 순서로 종료
instance 종료
srvctl stop instance -d racdb -i racdb1
srvctl stop instance -d racdb -i racdb2
asm 종료
srvctl stop asm -n rac1
srvctl stop asm -n rac2
application 종료
srvctl stop nodeapps -n rac1
srvctl stop nodeapps -n rac2
작업을 한번에 종료 해주는 명령어
crs_stop -all
application -> asm -> instance 순서로 시작
application 시작
srvctl start nodeapps -n rac1
srvctl start nodeapps -n rac2
asm 시작
srvctl start asm -n rac1
srvctl start asm -n rac2
instance 시작
srvctl start instance -d racdb -i racdb1
srvctl start instance -d racdb -i racdb2
작업을 한번에 시작 해주는 명령어
crs_start -all
srvctl status listener -n rac1

srvctl status listener -n rac2

lsnrctl status

srvctl stop listener -n rac1
srvctl stop listener -n rac2

srvctl start listener -n rac1
srvctl start listener -n rac2

local에 있는 xe버전 tns 파일 수정
C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN
rac1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.126)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
rac2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.127)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
cmd 창
rac1 node로 접속
sqlplus sys/oracle@rac1 as sysdba

인스턴스 이름과 데이터베이스 이름 확인

rac2 node로 접속
sqlplus sys/oracle@rac2 as sysdba

인스턴스 이름과 데이터베이스 이름 확인

Application Failover는 Oracle RAC 환경에서 데이터베이스 세션에 장애가 발생할 경우, 애플리케이션이 자동으로 다른 가용한 노드로 전환하여 지속적으로 작업을 수행할 수 있도록 해주는 기능입니다.
LOAD_BALANCE=YES 추가racdb =
(DESCRIPTION =
(LOAD_BALANCE=YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.128)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.129)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)

RAC1 노드에 장애가 있어 접속이 안될경우 관리자의 간섭이나 별다른 조치 없이 자동으로 RAC2 노드로 찾아서 접속하게 만들어서 데이터베이스에 저장된 데이터 접근할 수 있도록 만들어 주는 기능이다.
새롭게 접속한 사용자들 입장에서는 장애를 알 수 없고 서비스를 받을 수 있다.
단 기존에 RAC1 노드에 접속되어 있던 사용자는 접속이 끊어지고 재접속을 할 경우 자동으로 RAC2노드로 연결이 되며 작업중이였던 transaction은 자동 rollback;
tnsnames.ora에서 구현해야한다.
racdb =
(DESCRIPTION =
(LOAD_BALANCE=YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.128)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.129)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)

putty rac1 노드로 접속후 sqlplus 접속

select * from all_objects;


select count(*) from all_objects;

startup

FAILOVER=YES(ON) | NO(OFF)
TYPE=SESSION | SELECT | NONE
SESSIONSELECTMETHOD=BASIC | PRECONNECT
racdb_taf =
(DESCRIPTION =
(LOAD_BALANCE=YES)(FAILOVER=YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.128)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.129)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
(FAILOVER_MODE=(TYPE=SESSION)(METHOD=BASIC))
)
)

putty rac2 노드로 접속후 sqlplus 접속

select * from all_objects;

select count(*) from all_objects;

racdb_taf =
(DESCRIPTION =
(LOAD_BALANCE=YES)(FAILOVER=YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.128)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.129)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC))
)
)

putty rac1 노드로 접속후 sqlplus 접속

select * from all_objects;

select instance_name from v$instance;
