데이터와 사람들 DBA 교육 1일차 정리(오라클 아키텍처, 오라클 멀티테넌트)
오라클 아키텍처
오라클 아키텍처는 데이터베이스와 인스턴스 2가지로 구분
데이터베이스는 디스크 영역이고,
인스턴스는 DBMS 즉 메모리 영역이다.
인스턴스는 SGA(shared area, data buffer cache, redo log buffer), 백그라운드(PMON,SMON 등)로 나뉜다.
shared area 2가지
library cache -> 실행계획 + sql텍스트 정보 보관
dictionary cache -> 테이블 스키마 정보 보관
redo log buffer -> 트랜잭션 로그 -> 변경된 것만 어펜드하고 그것만 -> 소량 효율
data buffer cache -> 블록 통째로 바뀔때마다 실행 -> 소량 비효율
유저가 로그인하면 로컬에 유저 프로세스 생성
서버는 세션당 하나의 서버 프로세스가 존재
PMON -> 프로세스 모니터로 좀비 프로세스를 죽이는 것 ( 로컬에서 강제로 수행 중단하면 서버는 좀비 프로세스가 남기 때문에 그런 것들 치워주는 것 )
SMON -> 인스턴스 리커버리 ( 디비가 죽었다 살아 올라올 때 생성 )
인스턴스 리커버리 3가지
CKPT
INSERT -> 롤 포워드 시작
UPDATE
COMMIT
CHECKPOINT
SHUTDOWN
1. 롤 포워드(SMON) -> 죽었다 살아나면서 실행안된 SQL 쭉 실행, 마지막 체크포인트까지는 메모리와 디스크가 동기화 된 걸로 인식하고 그 이후 SQL부터 실행
2. 롤 백 -> 커밋 되기 전 SQL들 롤백
3. 체크포인트 -> 체크포인트 발행 시 트랜잭션 중단, 레도 로그 파일에 체크포인트가 적용되어 DB가 죽었다 살아날때 어느 시점부터 읽어야 하는지 알 수 있다.
DBWR -> 주기적으로 데이터 파일에 WRITE, DBWR이 일어나기전에 무조건 LGWR이 일어난다.
LGWR -> 바뀔 때마다 레도 로그 파일에WRITE
SGA -> 신도림 화장실 -> 문을 잠금 대기 발생 (경합 락 대기), 공통 사용 공간
PGA -> 원룸 화장실 -> 속도 빠름 경합 없음, 개인 공간을 사용하다가 부족할경우 테이블 스페이스 사용
레도 로그 파일 -> CUD 같은 트랜잭션이 작용할때마다 어펜드 된 정보를 갖고 있는 파일, 미러링도 시키고 업무에 따라 그룹별로 많이 만들기도 함.
컨트롤 파일 -> 파일 경로를 알고있는 파일
데이터 파일 -> DB 정보를 가지고 있는 파일 ( 데이터베이스 오픈시 테이블 정보 등을 불러온다)
아카이브 로그 파일 -> 레도 로그 파일이 가득차면 아카이브 로그 파일에 압축하여 보관하고 레도 로그 파일은 다시 초기화 된다.
파라미터 파일 -> 오라클 설정에 필요한 파라미터들 + 컨트롤 파일 경로도 알고 있음
패스워드 파일 -> SYS계정이 SYSTEM 계정 생성 등에 필요한 파일
TNS연결 -> 디비버, 오렌지, 토드 등
데이터베이스 오픈 과정
1. shutdown
2. no mount -> parameter file
3. mount -> control file
4. open -> 그 외 나머지 파일 다 불러옴
파라미터 파일에 문제가 있다면 no mount단계가 안될거고 컨트롤 파일에 문제가 있다면 mount단계가 안될 것이다.
즉 데이터베이스 오픈 환경설정에 문제가 있는지를 확인하려면 저 두가지를 테스트 해보면 됨.
undo_retention => select 하는 시점에 다른 프로세스로 인해 a라는 값이 100에서 500으로 바뀌었더라도 이전값 보관으로 100이 출력되게 도와주는 옵션값임.
디폴트는 900이었던 것 같음. 보통 3600까지 늘려주는거 같은데 업무에 맞게 바꾸면 될듯.
3600 == 1시간
DBA는 따라서 이 값을 개발자들에게 공지할 의무가 있고 장시간 걸리는 조회쿼리의 경우 1시간 이후에 이전값이 사라지면 ORA-1555 오류에 걸릴 수도 있다.
오라클 멀티테넌트
CDB, PDB 개념
CDB => 쉽게 얘기해서 부모님 집, DB전체 공간, 계정 생성 시 C##으로 시작해야 함
PDB => 내 방, DB전체 공간 중 일부(개발서버, 운영서버에 해당함), C##으로 만들필요 없음(굳이 CDB에 안만들고 대부분 PDB에 만들면 됨)
PDB.TABLE해봤자 CDB꺼는 못봄 반대로 CDB.TABLE하면 PDB꺼 다 볼 수 있음.
PDB는 마운트 상태가 셧다운 상태라고 이해하면 됨.
PDB에서 종료한다고 CDB가 꺼지는 것은 아니니까
그래서 PDB에서 ALTER SESSION SET CDB 하는 것은 정말 위험한 행동임.
SESSIN SET이후 혹시나 PDB인줄(개발서버)알고 CDB(데이터베이스 전체)를 종료했다가 서버 전체가 다운될 수 있기때문에 새 페이지를 열어서 서버 관리하는 것을 권장한다.