RAC 목차
1. 소개
2. 관리
3. 튜닝
4. 고가용성
5. 클러스터 관리
6. 백업과 복구
7. 설치 (이수자 평가 제출)


공유디스크 5개가 있다!
⭐ 복사받은 이미지 가져오기
내가 했던 방법
1. 추가 버튼 누르고
2. 이친구 가져오기!
3. 파일> 관리> 가상미디어 관리에서 경고 표시 있으면 삭제하고 없으면 그냥 두기
4..vdi추가하기
5. 속성 일반에서 -> 공유 가능으로 변경해주기
6. RAC1 공유디스크 설정하기
: rac1 잡고, 설정 > 저장소로 들어가기
- RAC2도 같은 방법으로 설정
- 추가 네트워크 설정(rac1,rac2동일)
7. 네트워크 설정때문에 root로 시작시키기
- rac1 네트워크 설정 (시스템>기본설정>네트워크연결)
8. 터미널 열기
: 아래 명령어 써서 이미지 처럼 2개만 남기기
service network restart-> ifconfig
- rac2도 같은방법으로 하는데 네트워크 연결 들어가서 맥아이디 맞는거 두개만 남기고 모두 삭제, 이름을 (eth0,eth1) 변경해주고
eth0,eth1의 편집은 rac1과 같게 하되 eth1의 주소만192.168.56.112로, eth0을11.0.2.16하고, vi 열어 편집해주기 그리고service network restart,reboot- 푸티로 접속
ifcong 해서 ipconfig를 넣고 이름을 rac1
use system color- gsd 빼고 모두 온라인 으로 변경되어야 한다.
- reboot를 양쪽에서 동시에 쳐본다.
- crsctl start crs도 동시에 쳐본다. 커뮤니케이션 안된다? 그럼 리부트 양쪽에서 동시에 한다.
- crs_stop -all 하면 양쪽 내리기 / crs_start -all 양쪽 동시에 올리기
- 잘 된다면 푸티에서 (한쪽에서만) sys에서 startup!
명령어 재정리
💡 Real Application Cluster의 약자 (진짜 응용프로그램 집단)
응용프로그램 : database, instance, listener, ASM, service, vip등 이러한 응용 프로그램들이 마치 하나의 서버에 있는 것 처럼 느껴지게 하는 오라클 아키텍쳐 중 하나이다.

공유 스토리지 하나를 인스턴스에서 공유해서 쓰는 것이다. 원래는 이 응용 프로그램들이 여러 노드(컴퓨터)들에 분산되어져 있는데, 마치 하나의 서버에 있는 것 처럼 보이게 하는 프로그램이다.
우리는 스토리지 하나에 인스턴스가 하나이라서 컴퓨터가 꺼지면 끝! 그렇지만 RAC는 한대 컴퓨터 꺼지면 다른 컴퓨터에서 엑세스 할 수 있어서 사용자들은 컴퓨터 한대가 꺼졌는지 모른다.
고가용성 -> 24시간 끊김없는 서비스를 지원 받을 수 있다.확장성 -> 노드들을 계속 추가하몀ㄴ서 확장해 나갈 수 있다. 또 추가
컴퓨터 1대 ---- 컴퓨터 1대 ---- 컴퓨터 1대 ...
노드 1 노드2 노드3 ...
인스턴스1 인스턴스2 인스턴스3 ...
\ | /
\ | /
---------------
공유 스토리지
---------------
이론상으로 100대까지 연결이 가능하다.
✅ 회사들이 SI 프로젝트를 하는 주기가 8년 ~ 10년 주기이다.
구장비 --------------------> 신장비
노드1 노드1 -- 노드2 -- 노드3
RAC --------------------> RAC
11g 19c
SI프로젝트 순서
1. OS 설치
2. Oracle 설치
3. data 이행
4. 개발
5. 테스트
6. 오픈
💡 집단 이라는 뜻인데 여러대의 노드(서버)들의 집단을 마치 하나의 서버처럼 보이게 하는 소프트웨어를 cluster라고 한다.

이더넷 0이 퍼블릭, 이더넷1이 각퍼블릭을 연결시켜주는애 디스크는 쉐어드 스토리지
(rac1)192.168.56.111(이더넷1)이 프라이빗
(rac2)192.168.56.112(이더넷1)
✅ RAC를 운영할 때 필요한 IP가 3가지가 있다.
1.Public ip: 외부 클라이언트들이 노드로 접속할 때 사용하는 ip
2.private ip: 노드간의 통신을 하기 위해 사용하는 ip
3.virtual ip: failover를 지원하기 위해서 사용하는 ip
failover란? 내가 접속한 노드가 죽었을 때 살아있는 다른 노드로 접속되는 기능
실습 위 3가지 ip를 확인합니다
Public ip,private ipvi /etc/hosts
virtual ip

$ crsctl check crs
➡️ 이 4개가 정상!
select instance_name, status
from v$instance;
select instance_name, status
from gv$instance;
: 디비는 하나이고 인스턴스가 별개라서 같아야한다. rac1, rac2에서 보기
select file_name from dba_data_files;
✅ 오라클 설치 순서
1. grid (cluster + ASM 소프트웨어) 설치(그리드만 깔면 두개가 알아서 깔린다.)
2. DB 설치
- 오라클 클러스터 설치 -> DB 엔진 설치 -> DB 생성
문제 rac1, rac2로 sqlplus 로 접속했을때 SQL> 이 아니라 racdb1>, racdb2>로 나오게 하시오!
[oracle@racdb1 ~]$ cd $ORACLE_HOME/sqlplus/admin
[oracle@racdb1 admin]$ vi glogin.sql
define _editor='vi'
set sqlprompt "_connect_identifier > "



speedup-> 하나의 작업을 얼마나 빨리 처리할 수 있는가?
하나의 작업이 100%라면 노드1(50%), 노드2(50%) : 시간이 절반으로 줄어든다!
sacleup-> 정해진 시간에 얼마나 많은 일을 할 수 있는가?
하나의 작업이 100%라면 노드1(100%), 노드2(100%) : 정해진 시간안에 두배의 일을 할 수 있다.
💡 rac 환경에서는 내가 어느 노드로 접속하던지 간에 항상 맨 마지막에(최신데이터) commit된 일관된 데이터를 조회할 수 있다.
❓최신 데이터가 어느 노드에 있는지 어떻게 알 수 있는가???
GRD:(Global Resource directory)에 최신 데이터가 어느 노드에 있다 라는 위치정보가 존재한다.
- GRD는 각각의 노드의 shared pool에 존재한다.
(예 - emp 테이블의 최신 데이터에 대한 위치정보는 1번 노드의 GRD에 있고,
dept 테이블의 최신 데이터에 대한 위치정보는 2번 노드의 GRD에 있다.)
➡️ 그림 설명 : 유저가 접속할때 만약 30명이 들어온다하면 15명씩 나눠준다. update한 최신 데이터는 노드1에 있는데 노드 2에서 누가 scott위 월급을 조회하면 디스크가 아닌 프라이빗 네트워크로 노드1의 GRD를 확인해서 3000이 아닌 0 이 보인다.
만약, 노드1이 emp테이블을 관리하는 노드인데 사람들이 이쪽에서 dept를 자꾸 조회한다? 그럼 dept를 노드1에서 관리하게 된다.
1. GCS (Global Cache Service) : 노드간의 데이터를 전송하는 서비스
: 데이터 전송을 전문으로 하는 데몬 프로세서: LMS 데몬
[oracle@racdb1 ~]$ ps -ef | grep lms
grid 3822 1 0 15:38 ? 00:00:07 asm_lms0_+ASM1
oracle 4318 1 0 15:39 ? 00:00:05 ora_lms0_racdb1
oracle 4322 1 0 15:39 ? 00:00:05 ora_lms1_racdb1 -- 왜 또있니
oracle 5458 5054 0 16:00 pts/1 00:00:00 grep lms
lms실습 lms 프로세서의 갯수를 몇개 띄울 수 있는지 확인하고 갯수를 더 늘리기
SQL> show parameter gcs
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
gcs_server_processes integer 2
문제 gcs_server_processes를 3개로 늘리기
alter system set gcs_server_processes=3 --변경이 안된다 !
➡️ 같은 파일을 보고있다.col name for a30 select name, issys_modifiable from v$parameter where name like '%&name%'; NAME ISSYS_MOD ------------------------------ --------- gcs_server_processes FALSE col name for a20 col value for a10 select inst_id, name, value, issys_modifiable, isinstance_modifiable from gv$parameter where name like '%¶meter%'; INST_ID NAME VALUE ISSYS_MOD ISINS ---------- -------------------- ---------- --------- ----- 1 gcs_server_processes 2 FALSE FALSE -- 2 gcs_server_processes 2 FALSE FALSE alter system set gcs_server_processes=3 scope=spfile sid='*'; -- false는 바로 바꾸지 못한다는 거니까, scope=spfile을 적어줘야한다. -- 그런데 RAC는 isinstance_modifiable 가 false라는 것은 따로따로 못바꾸고 둘다 동시에 바꿔야 한다 라는 뜻이다.➡️
sid='*'은 모든 인스턴스에 다 적용하겠다 라는 뜻!sid='racdb1'이라고 하면 racbd1만 적용하겠다 라는 것
➡️v$parameter: 현재 메모리에 어떻게 적용되어져 있는지 확인
➡️v$spparameter: spfile안에 어떻게 적용되어져 있는지 확인
💡 1번노드, 2번노드 둘다 파라미터 파일 안에는 아래의 내용만 있다.
SPFILE='+DATA/racdb/spfileracdb.ora'
현재 spfile을 가지고 pfile을 생성한다!
racdb1 > create pfile from spfile;
❓ 실습하면서 문제
alter문을 실행하기 전에 pfile을 만들어서, 직접 pfile을 열어 파라미터를 수정, 디비 내렸다 올렸다. alter문을 실행하고 pfile을 만들었어야 반영이 정상적으로 되었을 것!
/u01/app/oracle/product/11.2.0/db_1/dbs [oracle@racdb1 dbs]$ vi initracdb1.ora
오늘의 마지막 문제
그럼 다시 gcs_server_processes를 1로 변경하고 인스턴스를 둘다 내렸다 올려서 반영하기
alter system set gcs_server_processes=1 scope=spfile sid='*';우리 지금 pfile이라서 명령어로는 안되고, 직접 열어서 수정해준다.
2. GES ( Global Enqueue Service)