[Oracle] 구조
오라클 서버 (Oracle Server)
: 메모리와 디스크에 생성되는 구조
└- 인스턴스 (Instance)
: 메모리 부분에 생성되는 구조
└- SGA (System Global Area)
: 실제 작업들이 수행되는 공간
└- Database Buffer Cache
: 데이터의 조회와 변경 등 실제 작업이 일어나는 공간
└- Redo Log Buffer
: 변경 내용을 기록하는 메모리 공간
└- Shared Pool
: 어떤 대상을 공유해서 사용하기 위한 공간
└- Library Cache
: Soft Parse시 사용, SQL과 실행계획 등이 저장된 공간
└- Data Dictionary Cache
: 구문분석이나 실행계획을 세울때 사용하는 Dictionary들이 Cache 되어진 공간
└- Server Result Cache
: 결과값을 Cache 해 두는 공간
└- Large Pool
└- Java Pool
└- Streams Pool
└- Fixed SGA
└- 백그라운드 프로세스 (Background Process)
: Oracle Server 가 잘 운영되도록 하는 역할
└- DBWR
: 데이터 파일로 저장하는 역할
└- LGWR
: Redo Log Buffer에 있는 내용을 Redo Log File로 저장하는 역할
└- PMON
: 모든 서버 프로세스들 감시
└- SMON
: Instance Clean Up 역할
: Instance Recovery 과정에서 누락된 Transaction Recovery 역할
: 비정상 종료된 Transaction이 사용 중이던 Temporary segment 를 Clean up 역할
: Dictionary Managed Tablespace 에서 Free extents들을 모아주는 역할
└- CKPT
: DBWR에게 Checkpoint 신호를 전달
└- ETC
└- PGA (Program Global Area)
: Process들이 개별적으로 사용하는 메모리 공간
└- SQL Work Area
: Sort 관련 작업을 수행하는 공간
└- Private SQL Area
└- 데이터베이스 (Database)
: 디스크 (Disk) 에 위치한 파일들의 세트
└- 데이터 파일 (Data File)
: 데이터 (Data) 를 저장하는 공간
└- 컨트롤 파일 (Control File)
: DB 운영 정보 저장
└- 리두 로그 파일 (Redo log File)
: 변경 내용을 기록하는 파일 공간
출처 오라클 구조 (Oracle Structure) 를 Tree 형식으로 쉽고 간단하게 알아보자~(?) (tistory.com)
1. 메모리
1.1 공유 메모리 영역 SGA(System Global Area)
- 운영체제가 제공해준 것. 여러 프로세스가 동시에 엑세스할 수 있는 메모리 영역
- 인스턴스가 복구 될 때마다 메모리에 할당 됨
- Lock을 걸어 베타적 제어*를 하지 않으면 데이터에 손상을 입을 수 있음
*베타적 제어 : 프로세스가 공유 데이터를 변경하고 있는 도중에 다른 프로세스가 해당 공유 데이터를 읽거나 변경하지 못하도록 하는 것
Buffer Cache : 디스크파일로부터 데이터 블록을 담는 캐시 영역.
자주 사용하는 데이터를 더 빠르게 가져오기 위해 존재. LRU 알고리즘 *사용
Buffer Cache 상태
pinned : 지금 사용 중인 상태. 다른 사람이 사용을 못하는 lock 상태
unused : startup 이후 한번도 사용하지 않은 상태
free : 변경된 내용이 Disk에 백업이 완료된 상태
dirty : 내용이 수정되었지만 아직 Disk에 백업이 되지 않은 상태. 백업이 되면 다시 free 상태가 됨.
*LRU (Lease Recently Used) 알고리즘 : 가장 최근에 사용하지 않은 데이터부터 캐시아웃
ex) 1 -> 2-> 3 순차 호출
3 → | 2 → | 1 |
2번 캐시 호출
2 → | 3 → | 1 |
캐시에 4를 새로 씀 / LRU인 1 제거
4 → | 2 → | 3 → |
Cache와 Buffer
Cache : 속도가 다른 두 장치간의 속도 차이를 줄여주기 위한 장치.
데이터 저장소로 이용되므로 데이터를 저장하여 추후에도 계속 사용 가능
Buffer : 데이터를 전송하는 상호간의 장치에서 저속의 장치가 작업을 하는 동안 고속의 장치가 기다려야 하는 현상을 줄여주는 장치. (데이터를 읽어오기 위해 디스크까지 가지 않아도 됨)
데이터 손실 방지 & 사용된 데이터는 삭제 됨
1.2 프로세스 고유 메모리 영역 PGA(Process Global Area)
- 서버 프로세스가 가진 자신만의 메모리 영역. DB에 접속하는 모든 유저에게 할당되는 각각의 서버 프로세스가 독자적으로 사용하는 오라클 메모리 영역.
- SQL의 작업 공간. 정렬 작업을 수행(sort) → PGA 메모리 용량 부족 시 TEMPORARY TABLESPACE를 사용
하나의 유저 프로세스에 하나의 서버 프로세스가 할당되며, 하나의 서버 프로세스는 하나의 PGA를 생성
PGA 구조
정렬 공간 Sort Area |
유저 프로세서 세션 정보 User Session Data |
파싱 정보가 기록된 주소 Cursor State |
변수 저장 공간 Stack Space |
1.3 RAC (Real Application Cluster)
- 하나의 Database에 여러개의 Instance를 구성하는 방식 = 하나의 Instance에 장애가 발생하여도 DB운영에 지장X
- n개의 Instance에서 동일한 datafile을 공유하여 엑세스
- CPU나 메모리 등의 자원은 공유X
- SPFILE* 권장
*SPFILE (서버파라미터 파일)
- 바이너리 형식
- PFILE을 사용해 수동으로 생성되거나, DB 생성 시 사용하는 DBCA에 의해 자동으로 생성됨
- NOMOUNT 단계 이상이라면 다시 SPFILE을 쓰기 때문에 제거하거나 이동하면 안됨
spfile$SID.ora
ALTER SYSTEM SET [파라미터명 = 값] [SCOPE]
- 수정 시 인스턴스 재기동 불필요
*SCOPE 옵션
MEMORY - 변경 즉시 적용 / 재시작 시 원래 설정 값으로 돌아감
SPFILE - SPFILE에만 변경 적용 / 현재 상태에는 영향X
BOTH - 변경 즉시 SPFILE에도 적용 / 재시작 시 변경 내용 반영
cf) PFILE (파라미터 파일)
- 텍스트 형식으로 변경 가능
- 파일 수정 시 인스턴스 재 기동으로 적용
- DB 생성이나 장애 발생 시 사용
--pfile
$ cd /ORA19/app/.../dbs
$ vi Init$SID.ora
+ RAC Ping 현상: Instance 1에서 변경 완료 된 데이터를 Instance 2 로 가져오기 위해 디스크에 저장 후 해당 데이터를 Instance 2 로 복사해오는 작업
'Database > Oracle' 카테고리의 다른 글
[Oracle] 관리자 계정(system, sys) 비밀번호 변경 (0) | 2023.03.16 |
---|---|
[Oracle] 이전 명령어 방향키로 출력 (0) | 2023.03.15 |
[Oracle] Sequence (0) | 2023.03.13 |
[Oracle] Listener & Oracel DB (0) | 2023.03.12 |
[Oracle] SCN, Checkpoint (0) | 2023.03.12 |