- ★★★ RAC를 깔때의 중요 포인트를 중요 현상
1. High Availability 방식
배경: DB server 을 무중단으로 만들기 위해서 하는 기법으로 같은 데이터 베이스, Instance 를 1개 더 구성(예비)해서
처음에는 그냥 두었다가 문제가 있을때 예비를 쓰자 → 아무문제가 없으면 낭비
목표: 서버를 똑같이 만들자 (1 DATA Guaurd (HA))
24 * 7 : 1주일간 안끔
down time 을 0으로 만드는 것이 목표
구성: Active(사용중), Standby(예비)
문제: 데이터가 일관되지 않을 수 있음 (어떻게 동기화를 할것인가)
- 돈이 많이 듬
- 평소에는 예비는 안씀
- DataBase의 동기화를 지속해서 해주어야함
- Data Gard 프로그램 : 동기화를 해주는 프로그램
※ HA : 고가용성

2. OPS oracle parallel server ( ~ 8i)
목적 : 서버를 3개로 (node1, node2, Database Server)
인스 턴스(작업) 인스턴스(작업)
스토리지(저장, 디스크, 파워 등 전부 2중화)
- 데이터를 동기화 할 필요가 없음
- 들어오는 문이 2개
- 인스턴스가 2개여서 부하를 나눈다고 예상했음 (생각보다 덜함)
- 공유하는 Database 는 1개
- 이론적으로는 확장에 제한이 없음
문제
- 데이터는 메모리에서 바뀌는데 저장되는곳은 Disk , dml 명령의 경우
- RAC Ping 현상: node1에서 변경한 데이터를 가져오기 위해서는 Disk에 먼저 저장을 한뒤에
해당데이터를 node2 에서 복사해오는 현상 (시간이 오래걸림→ 성능저하 )
, 변경하는 node에게 저장해달라고 요청하는 현상

3. RAC Real Application Cluster (9i ~)
- 인스턴스 간에 통신(캐쉬 퓨전)을 해서 데이터의 변환을 바로 알려줌
- interconnect 를 통해서 연결
- 별도의 프로그램을 통해서 여러 인스턴스를 하나의 인스턴스 처럼 만들어줌
- Clusterware 역할은 여러 인스턴스간의 변경사항을 조정하고 관리하는 역할





□ 설정 방법(큰 부분만)
1. 하드웨어 설정 ( node 1, node 2 만듬 , 저장 폴더()를 1개 생성할것 )
ip 설정
- public 망은 유지 보수 용으로 만든 망 (외부에서 public ip로 접속 할 수 있도록 )
사용자가 접속하는 ip (외부에서 접속가능한 ip)
- private 망은 node1 ,node2 간의 전용 통신을 만듬 (interConnect -> private, 내부망)
vmware에서 host-only로 해줌 (vipca 단계에서 설정할것)
- virtuar 망은: CRS 데몬의 아이피피는 virtuar ip(뒷문), public ip 예비망의 개념
public IP, virtuar IP(뒷문 같은 개념) 같은 데역으로
2. egu 설정
- 양쪽 노드에 설정해서 암호를 안묻도록 설정해줌
3. clusterware (10g)설정
Grid Infrastructure(11g egu + clustarwre)
- 여러개의 node를 관리 해주는 프로그램
□ 용어
- OCR(Oracle Cluster Repository) : RAC 구성의 전체 정보를 저장하는 디스크 레지스터
- Vote Disk : 매 초마다 vote disk 에 자신이 정상적으로 동작하고 있다고 표시 (2차확인)
-CRS :데몬 Instance를 체크하기 ,hert beat (살아있는지 ping 확인 1차확인)
RAC 에서는 어떤 Instance 에서 작업을 해도 마치 하나의 서버에서 작업을 하는 것과 같은 효과
-GES(Global Enqueue Service): 데이터 변경작업 ( 트랜잭션 )을 하든 하나의 Instance 에서 데이터 변경
작업을 하는 것과 같이 관리하는 기능, 즉 작업을 할때 그작업을 lock
- LMD(Lock Monitor Daemon Process) :GES 기능을 수행하는 RAC 용 백그라운드 프로세스,
여러 Instance 끼리 Lock 관련 정보를 전송하고 혹시 발생할 지 모를 DeadLock 등을 관리
-GCS(Global Cache Service): Cache Fusion 기능이 구현되기 위한 필수 서비스로서 어떤 사용자가
자신의 Instance 에서 원하는 데이터를 찾지 못해서 다른 Instance 에 있는 데이터를 요청했을 때
Interconnect 를 통해서 데이터를 전달해 주는 서비스
- GCS의 블럭 관리 모드
1 건의 데이터를 여러 Instance 에서 동시에 변경하거나 삭제할 수도 있기 때문에 늘 해당 데이터가
어떤 상태인지 관리 해야함
- Null (N) 모드 : 해당 블록을 사용중인 사용자가 없다는 것을 뜻합니다.
- Share (S) 모드 : 해당 블록을 select 하고 있는 세션이 있다는 뜻입니다.
- Exclusive (X) 모드 : 해당 블록을 누군가가 변경하고 있다는 뜻입니다. (1개 Instance 밖에 안됨)
- Master node Instance(최초접속?) : RAC에서 특정 데이터에 대한 모드를 관리하는 Instance
- eviction?
-GES, GCS
- cssd : 각노드들이 정상작동을 하고 있는지 확인
① Interconnect 를 통해 매 초마다 각node에 heartbit 보내고 각노드는 답해줌
② ①하지 못한경우 Vote Disk를 체크해줌
③ ①, ② 모두 실패하는 경우 해당 node를 Cluster에서 제외함
※11 g 부터 clinet 에 대표 IP (Scan IP) ,
※ 중요한건 메모리에서 작업을 계속해줌 , node에 Instance의 내용이 바뀌는 것은 아님.
□ RAC 구현 방법 (4가지) ★★★
10g RawDevice
10g ASM
11g RawDevice
11g ASM
저장방식
종류
- FileSystem
OS에 의존적임
프로그램 <---> OS <----> disk
- RawDevice 로우디바이스 (10g 의경우 무조건임)
RAC를 할때
커널을 거치지만 파일시스템 보다 빠름
oracle <----> disk
11g 부터는 rawdevice 를 공식적으로 제공 안하지만 메뉴얼에 있음
- ASM 기술 (11g )
프로그램을 통해 하드디스크를 관리해줌
oracle <----> ASM <-----> disk
rac란 무엇인가?
★★★★★ 면접질문
1. RAC 스펠링
2. 주요 용어 : interconnect , 캐시퓨젼 , ip 용도 (Scan ip (11g) ),
CTF : 한쪽 노드가 죽으면 다른 노드로 접속할수있도록 (자동)
TAF : 작업하던 인스턴스가 죽어도
crs 데몬
HA :
3. 설치 (10g, 11g)
4. 명령어 crs_stat -t , node 1, 껏다가 키기 ,
CRS, Grid , ClustarWare 개념
- 여러개의 장비를 묶어주는것
- 1개의 작업이 여러 장비에서 돌거나 (하나의 장비처럼 작동)
- 여러개의 작업이 여러 장비에서 독자적으로 작동
※ SMP: 하나의 프로그램을 여러개의 노드에서 운영
Cluster의 구성
Node : 실제 작업을 처리하는 하드웨어 시스템
Cluster Manager : application 들이 작업할 수 있도록 해주는 소프트웨어
Node 관리, 클러스터내 노드 추가, 삭제, 자원 모니터링 , Failover 처리기능
※ Cluster Manager 를 작동할 수 있도록 Node와의 설정을 잘 맞추어야함
Oracle Cluster 구성
①Service: RAC 에서 작업하는 작업 (ex 학사 서비스),
하나의 Instance 에서 여러 서비스를 제공할 수 있고,
여러개의 Instance에 걸쳐서 하나의 서비스가 제공될 수 있음
②Node Application : 각 Node 별로 다르게 운영되는것
-Oracle Listener,
-Global Services Daemon (GSD),
-Oracle Enterprise
-Manager Agent (OEM Agent),
-Virtual IP Address (VIP)
③Cluster Ready Services: logical하게 node를 묶어주는 Cluster Manager (핵심★★★)
④Cluster Resources : Oracle Cluster Service에 의해 관리되는 Resource들이며 데이터베이스 인스턴스,
서비스, Listener 및 VIP 등이 포함됩니다.
※ Rolling patch : 운영을 중단하지 않고 DB를 패치하는것
(Node 1개 서비스를 옮기고, 끄고, 패치하고, 다시 node 추가하고)
※ 알아야함
디스크 별로 저장되는 프로그램 각 node 별, Stroge에
- node 사양이 다르면 , 각노드에대한 pfile의 설정을 해야함 (권장은 아님)
Service 명령어 관련 (면접질문)
CRS(Cluster Ready Service)
3개의 구성
CSS:
EVM :
CRS(OCR) : resource를 관리하는 process
동작원리(모두 OS의 init 에 의해서 동작이됨)
-oprocd (Processor Monitor Daemon) :상대방 노드가 응답이없다(정해진 시간)면 재부팅
시키는것 (IO fencing solution)
※ 리눅스: hangcheck time
-evmd(Event Forwardig Daemon) :cluster내의 event발생시 이 event를 전파하는 기능(프로세스가 알아서 운영)
①Cevm: cluster EVM(cluster 정보)
②Levm : local EVM()
사건에 대한 log 기록
-cssd(cluster synchronization service daemon) : 새로운 노드 추가, 빠져나간 노드 삭제 하는 데몬 ★★★
클러스터 동기화 서비스 종류
①node information service : 어떤 node가 cluster에 join을 했는지 떠났는지 monitor 하는 기능
②Group service:
③lock service: mode를 관리해줌
crs_stat -t
crs_stat -p
※
※ iinittab 파일 ?
OCR : 전체 중요한 정보가 OCR에 들어있다.
local node에
master chache 실제 ocr
Eviction 노드를 버린다.
Logfiles 가 여려개 존재
- 자신만의 확실한 무기
Load Balancing / Failover
Load Balancing : 서버에 걸리는 부하를 나누는 이유
(서버에 걸리는 업무량) 을 Balancing (균형이 맞게 배분) 하는 것을 의미
방법
① clinet 단에서 설정하기
- 문제점은 client 별로 설정을 해주어야함 .
① rac1 /etc/hosts vip 확인하기
② clinent 에서 C:\app\stu\product\11.2.0\client_1\network\admin 에가서 tnsname.ora 수정
③
④
⑤
② server 쪽에서 설정하는 방법 ★★★


※ Dynamic Register : Listener 끼리 부하정보를 넘겨주는것
local_listener 파라미터: node 간에 instance 정보교환을 위한 listener 설정을 위한 파라미터
서비스이름= DB SID
Failover
CTF : Node 가 죽으면 죽은 Node로 접속 안함
★★TAF : 에러난 작업을 연속해서 가능하게 하는것(select 만 가능, DML은 불가)
rac 운영하기
□ 현재 상태 확인하기
* Target : 목표 상태
* State : 현재 상태
* Host : 작동 노드
◎ crs_stat명령어 확인하기
[oracle@rac1 ~]$crs_stat -h
◎ 전체 확인
[oracle@rac1 ~]$ crs_stat -t
[Full name ]
ora.rac.db (ra1 +rac2 instance)
ora.rac.rac1.inst (rac1 DB instance)
ora.rac.rac2.inst (rac2 DB instance)
ora.rac1.LISTENER_RAC1.lsnr
ora.rac1.gsd
ora.rac1.ons
ora.rac1.vip
ora.rac2.LISTENER_RAC2.lsnr
ora.rac2.gsd
ora.rac2.ons
ora.rac2.vip
◎1초마다 확인하기
[oracle@rac1 ~]$ watch -n 1 'crs_stat -t'
◎ 데이터베이스 상태, 모든인스턴스와 서비스 상태 확인
[oracle@rac1 ~]$ srvctl status database -d rac -v
◎세부명령어 조회
[oracle@rac1 ~]$ srvctl
◎ 데이터베이스의 상태, 모든 인스턴스와 모든 서비스의 상태 확인
[oracle@rac1 ~]$ srvctl status database -d rac -v
◎ 특정 인스턴스의 상태와 현재 서비스의 상태 확인
[oracle@rac1 ~]$ srvctl status instance -d rac -i rac1,rac2
◎ 모든 node의 상태를 확인합니다
[oracle@rac1 ~]$ srvctl status nodeapps -n rac1
□ RAC 중단하기
순서
RAC 끄기 중단 순서가 중요함
① DB instante 종료
◎ rac1, rac2 종료하기
[oracle@rac1 ~]$ srvctl stop instance -d rac -i rac1
[oracle@rac2 ~]$ srvctl stop instance -d rac -i rac2
② ASM 종료 (없으면 생략하기)
③ node application 종료하기
[oracle@rac1 ~]$srvctl stop nodeapps -n rac1
[oracle@rac2 ~]$srvctl stop nodeapps -n rac2
◎ 전체 시작, 종료하기
[oracle@rac2 raw]$ crs_start -all
[oracle@rac2 raw]$ crs_stop -all
※ rac1관련 명령은 rac1 에서 , rac2관련 명령은 rac2 에서
tnsname 에 서비스를 넣음 운용
node application
vip, 리스너
□ RAC 시작하기
① node application 시작하기
[oracle@rac1 ~]$srvctl start nodeapps -n rac1
[oracle@rac2 ~]$srvctl start nodeapps -n rac2
② ASM 종료 (없으면 생략하기)
③ DB instante 시작
[oracle@rac1 ~]$ srvctl start instance -d rac -i rac1
[oracle@rac2 ~]$ srvctl start instance -d rac -i rac2
□ RAC에 자원 추가 & 제거 하기
★★서비스를 추가 &
① 인사 관리를 위한 서비스를 추가할때
데이터베이스 이름은(-d) rac 이고
서비스를 추가하되 (-s)insa
rac2 에서 운영 하고(-r),
rac1 대기상태로(-a)
[oracle@rac1 ~]$ srvctl add service -d rac -s insa -r rac2 -a rac1
② 서비스 실행하기
[oracle@rac1 ~]$ srvctl start service -d rac -s insa
생성할때 만들어짐....
ora.rac.insa.cs
ora.rac.insa.rac2.srv
- 서비스 stop 후 제거하기
◎ 그냥 제거 하려고 하면 안됨
[oracle@rac1 ~]$ srvctl remove service -d rac -s insa
insa PREF: rac2 AVAIL: rac1
rac 데이터베이스에서 insa 서비스를 제거하겠습니까? (y/[n]) y
PRKP-1024 : insa 서비스는 아직 실행 중입니다.
◎ 제거 과정
① 먼저 Stop 시킨다음
[oracle@rac1 ~]$ srvctl stop service -d rac -s insa
② 서비스를 제거한다
[oracle@rac1 ~]$ srvctl remove service -d rac -s insa
insa PREF: rac2 AVAIL: rac1
rac 데이터베이스에서 insa 서비스를 제거하겠습니까? (y/[n]) y
□ srvctl 명령을 사용하여 rac service 관련 설정 변경하기
-srvctl modify database
-srvctl modify instance
-srvctl modify service
-srvctl modify nodeapps
□ Service 재배치 하기
[상황 설정하기]
[oracle@rac2 ~]$ srvctl add service -d rac -s insa -r rac1 -a rac2
[oracle@rac2 ~]$ srvctl start service -d rac -s insa
◎ rac1 → rac2로 서비스 이동 위치를 바꿈 ★★★
[oracle@rac2 ~]$ srvctl relocate service -d rac -s insa -i rac1 -t rac2
□ CRS 자원의 일시적인 활성화 / 비활성화 설정하기
※ 실행중인 서비스는 비활성화 할 수 없음
◎ 서비스 활성화 하기
① 서비스 stop를 한뒤
[oracle@rac1 ~]$ srvctl stop service -d rac -s insa
② 서비스 비활성화 해줌
[oracle@rac1 ~]$ srvctl disable service -d rac -s insa
◎ 서비스 비활성화 하기
① 서비스 활성화 한다음
[oracle@rac1 ~]$ srvctl enable service -d rac -s insa
② 서비스 start
[oracle@rac1 ~]$ srvctl start service -d rac -s insa
□ Log 확인하기
◎ $ORA_CRS_HOME/crs/log : CRS resources 와 관련된 주요 내용이 저장됩니다
/home/oracle/product/10g/crs/crs/init/
◎ $ORA_CRS_HOME/crs/init :CRS daemon 이 시작될 때부터 관련 내용을 기록합니다
/home/oracle/product/10g/crs/crs/init
◎ $ORA_CRS_HOME/css/log 만약 CSS 데몬에 문제가 발생해서 재부팅을 할 경우
/home/oracle/product/10g/crs/css/log
◎ $ORA_CRS_HOME/log : Oracle Clusterware 관련된 일반적 내용이 저장되는 log file 입니다. 가장 일반적으로 많이 모니터링 됩니다.
★★ (중요, 패치할때 사용)서비스 재배치하기