RAC 이론 수업
patch 란 ?
오라클 새로운 릴리즈 제품이 출시되고 나서 고객들이 사용하다가 발견한 버그(bug) 들을 오라클사에서 fix 프로그램을 만들어서 배포를 합니다. 배포된 프로그램으로 적용하는 것을 패치라고 합니다.
upgrde 란 ?
오라클 버젼을 올리는것입니다.
patch 와 upgrade 를 할때 인스턴스를 내렸다 올려야합니다.
다운 타임이 발생하게 됩니다. 그럼 서비스가 안됩니다.
RAC 를 사용하면 rolling patch 와 rolling upgrade를 할 수 있어서 다운타임이 발생하지 않습니다.



voting disk : 심장 박동 주기 정보가 들어있는 파일
split brain 현상을 방지하기 위한 정보가 들어있는 파일
split brain 현상 : 노드 간의 연결이 끊김 - 문제 발생
ocr file : RAC 에 응용 프로그램들의 클러스터 정보가 들어있는 파일
RAC 응용 프로그램들 - instance, listener, vip, ASM, service 등



올라오는 순서 : 클러스터 ---> ASM ---> DB 인스턴스
양쪽 노드간의 네트워크 통신이 가능한 상태가 되어야 클러스터가 제대로 올라옴
예: 1번 노드에서 ping 192.168.56.112 로 2번 노드로 ping 을 날립니다.
2번 노드에서 ping 192.168.


■ 실습
#1. 1번 인스턴스에서 thread 번호를 확인합니다.
#2. 2번 인스턴스에서 thread 번호를 확인합니다.
#3. 1번 인스턴스에서 리두로그 그룹과 상태와 thread 번호를 확인합니다.
#4. 1번 인스턴스에서 로그 스위치를 일으킵니다.
#5. 1번 인스턴스에서 리두로그 그룹과 상태와 thread 번호를 확인합니다.
#6. 2번 인스턴스에서 리두로그 그룹과 상태와 thread 번호를 확인합니다.
#7. 2번 인스턴스에서 로그 스위치를 일으킵니다.
#8. 2번 인스턴스에서 리두로그 그룹과 상태와 thread 번호를 확인합니다.



■ 구현
#1. 1번 인스턴스에서 thread 번호를 확인합니다.

#2. 2번 인스턴스에서 thread 번호를 확인합니다.

#3. 1번 인스턴스에서 리두로그 그룹과 상태와 thread 번호 : RAC 환경에서 어느 리두 로그 그룹의 번호인지를 구분해주기 위한 확인합니다.

thread 번호
: RAC 환경에서 어느 인스턴스의 리두 로그 그룹인지를 구분해주기 위한 번호
#4. 1번 인스턴스에서 로그 스위치를 일으킵니다.

#5. 1번 인스턴스에서 리두로그 그룹과 상태와 thread 번호를 확인합니다.

current 가 바뀜.
#6. 2번 인스턴스에서 리두로그 그룹과 상태와 thread 번호를 확인합니다.


#7. 2번 인스턴스에서 로그 스위치를 일으킵니다.

#8. 2번 인스턴스에서 리두로그 그룹과 상태와 thread 번호를 확인합니다.

지금 디스크 ASM 임.
지난 번에 배웠던 리두 로그 그룹 추가 명령어
SQL > alter database add logfile group 5 '/u01/app/oracle/oradata/jhs/redo05.log' size 10m; <- 파일 머시기라 가능했는데
지금은 RAC 환경에 ASM 이라서 명령어가 달라짐
SQL#1 > alter database add logfile thread 1 group 5;

디폴트는 100m
OMF 기능이 켜져있는 상태에서 file 을 추가하면 default 사이즈가 100m 이다.

문제2. 2번 인스턴스용 리두 로그 그룹을 그룹번호 6번으로 해서 추가 하시오
SQL#1 > alter database add logfile thread 2 group 6;

문제3. 1번 인스턴스와 2번 인스턴스에서 각각 로그 스위치를 일으키고 unused 상태가 아니게 하시오

문제 4 5번 리두 로그 그룹을 삭제하시오
SQL#1 > alter database drop logfile group 5;
삭제를 할 때는 상태가 current 나 active 면 안된다.

에러남

문제6. 리두 로그 그룹 6번을 삭제 하시오



변경된 더티버퍼는 디스크에 내려 쓰고
롤백버퍼, cr 버퍼는 언두테이블스페이스에 내려 씀
리두 데이터와 언두 데이터의 차이를 알아야 함.
리두 데이터 : 복구할 때 필요할 데이터
언두 데이터 : 취소할 때 필요한 데이터 (rollback)
※ rac 환경에서는 undo data를 별개의 테이블 스페이스에 따로따로 write 합니다.
쓰기는 따로따로 쓰지만 어느 인스턴스에서는 둘 다 똑같이 읽기는 가능해야 합니다.
■ 실습
#1. 1번 노드에서 사용하는 undo tablespace 가 무엇인지 확인
#2. 2번 노드에서 사용하는 undo tablespace 가 무엇인지 확인.
#3. undotbs3 이라는 undo tablespace 를 생성.
#4. undotbs3 을 1번 인스턴스용 tablespace 로 지정
■ 구현
#1. 1번 노드에서 사용하는 undo tablespace 가 무엇인지 확인
SQL#1 > show parameter undo_tablespace

#2. 2번 노드에서 사용하는 undo tablespace 가 무엇인지 확인.
SQL#2 > show parameter undo_tablespace

#3. undotbs3 이라는 undo tablespace 를 생성.
SQL#1 > select tablespace_name, file_name from dba_data_files;eate undo tablespace undotbs3 datafile '+DATA' size 50m;

SQL#1 > select tablespace_name, file_name from dba_data_files;

#4. undotbs3 을 1번 인스턴스용 tablespace 로 지정
SQL#1 > select instance_name from v$instance;
SQL#1 > alter system set undo_tablespace='undotbs3' sid='racdb1';
scope = both 아니고 sid='racdb1';
설명 : sid='racdb1' <--- 1번 인스턴스용 parameter 를 변경해라
sid='racdb2' <--- 2번 인스턴스용 parameter 를 변경
sid='*' <--- 모든 인스턴스용 parameter 를 변경.

문제 1. undotbs4 라는 언두테이블스페이스를 사이즈 50메가로 생성하고 2번 인스턴스용 언두테이블스페이스로 지정하시오.
SQL#2 > create undo tablespace undotbs4 datafile '+DATA' size 50m;
SQL#2 > alter system set undo_tablespace='undotbs4' sid='racdb2';
SQL#2 > select tablespace_name, file_name from dba_data_files;
SQL#2 > select instance_name from v$instance;
SQL#2 > show parameter undo_tablespace

문제2. 1번 인스턴스의 undo tablespace 를 다시 undotbs1 로 변경하시오
SQL#1 > alter system set undo_tablespace='undotbs1' sid='racdb1';
SQL#1 > show parameter undo_tablespace

문제3. 2번 인스턴스의 undo tablespace 를 다시 undotbs2 로 변경하시오
SQL#2 > alter system set undo_tablespace='undotbs2' sid='racdb2';
SQL#2 > show parameter undo_tablespace

문제 4. undotbs3 테이블 스페이스를 drop 하시오
alter tablespace drop undotbs3;
로 드랍하던건 뭐였더라 ???
SQL#1 > drop tablespace undotbs3 including contents and datafiles;
Tablespace dropped
문제 5
SQL#12 > drop tablespace undotbs4 including contents and datafiles;
오늘의 마지막 문제
alias ss="sqlplus / as sysdba"
alias r="rman target sys/oracle nocatalog"
alias dbs="cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs"
alias net="cd /$ORACLE_HOME/networck/admin"
@logsw alter system switch logfile
@ckpt alter system checkpoint