Oracle Database
Oracle Database는 세계에서 가장 널리 사용되는 엔터프라이즈급 RDBMS다. 높은 신뢰성·확장성·보안성을 바탕으로 금융·통신·정부 등 미션 크리티컬 환경에서 사용된다.
아키텍처 개요
Oracle 인스턴스는 SGA(공유 메모리)와 백그라운드 프로세스들로 구성된다. 하나의 데이터베이스는 RAC 환경에서 여러 인스턴스로 운영할 수 있다.
Client App
└── User Process
└── Server Process
├── SGA (공유 메모리)
│ ├── Buffer Cache
│ ├── Shared Pool
│ └── Redo Log Buffer
├── PGA (프로세스 전용 메모리)
└── Background Processes (DBWn, LGWR, CKPT ...)
SGA (System Global Area)
SGA는 모든 서버 프로세스와 백그라운드 프로세스가 공유하는 메모리 영역이다.
| 구성 요소 | 역할 |
|---|---|
| Buffer Cache | 디스크에서 읽은 데이터 블록을 캐싱, 반복 I/O 감소 |
| Shared Pool | SQL 실행 계획, 파싱된 SQL, PL/SQL 코드 저장 |
| Redo Log Buffer | 변경 이력(redo entry)을 디스크 기록 전 임시 보관 |
| Large Pool | 백업/복구, 병렬 실행, 공유 서버 프로세스용 대용량 메모리 |
| Java Pool | JVM 기반 Java 코드 실행 영역 |
PGA (Program Global Area)
PGA는 각 서버 프로세스에 고유하게 할당되는 메모리로, SGA와 달리 다른 프로세스와 공유되지 않는다.
- 정렬(sort) 영역, 해시 조인 작업 공간
- 세션 정보, 커서 상태
- 인스턴스 PGA = 모든 개별 PGA의 합계
MEMORY_TARGET설정 시 SGA ↔ PGA 간 자동 재분배
프로세스 구조
백그라운드 프로세스
| 프로세스 | 역할 |
|---|---|
| DBWn | 더티 버퍼를 데이터 파일에 기록 (Database Writer) |
| LGWR | Redo Log Buffer를 Redo Log 파일에 기록 (Log Writer) |
| CKPT | 체크포인트 발생 시 데이터 파일 헤더 갱신 |
| SMON | 인스턴스 복구, 임시 세그먼트 정리 |
| PMON | 실패한 사용자 프로세스 정리, 자원 반환 |
| ARCn | Redo Log를 아카이브 로그로 복사 (아카이브 모드 시) |
RAC (Real Application Clusters)
RAC는 여러 노드의 인스턴스가 단일 데이터베이스를 공유하는 클러스터 솔루션이다. 수평 확장성과 고가용성을 동시에 제공한다.
[Node 1 Instance] ──┐
├── Shared Storage (ASM)
[Node 2 Instance] ──┘
↕ Cache Fusion (inter-node 메모리 공유)
- Cache Fusion: 노드 간 고속 interconnect로 버퍼 캐시 데이터를 직접 전달, 디스크 I/O 없이 블록 공유
- 자동 페일오버 및 로드 밸런싱
- 노드 추가로 선형에 가까운 성능 확장
Data Guard
Data Guard는 물리적 또는 논리적 스탠바이 데이터베이스를 구성해 재해 복구(DR)와 고가용성을 제공한다.
| 구성 | 설명 |
|---|---|
| Physical Standby | Redo Apply로 블록 단위 완전 복제, 읽기 전용 오픈 가능 |
| Logical Standby | SQL Apply로 논리적 변환, 스탠바이에서 다른 구조 허용 |
| Active Data Guard | Physical Standby를 읽기 전용으로 열어 리포팅 오프로드 |
- 자동 블록 손상 복구 (프라이머리 ↔ 스탠바이 간 양호한 블록 복제)
- RAC + Data Guard 조합: 프라이머리와 스탠바이 모두 RAC 구성 가능
- Data Guard Broker로 설정·전환 자동화
ASM (Automatic Storage Management)
ASM은 Oracle 커널에 통합된 파일 시스템 겸 볼륨 매니저다. OS 파일 시스템 없이 데이터베이스 파일을 직접 관리한다.
- Disk Group: 여러 디스크를 묶어 스트라이핑·미러링 적용
- 파일 레벨 미러링으로 선택적 보호 (전체 디스크 단위 아님)
- RAC 환경에서 모든 노드가 동일한 ASM 디스크 그룹 공유
- Data Guard 스탠바이 리두 로그도 ASM에 위치 권장
-- ASM 디스크 그룹 조회 (ASM 인스턴스에서 실행)
SELECT name, state, total_mb, free_mb FROM v$asm_diskgroup;주요 버전
| 버전 | 출시 | 특징 |
|---|---|---|
| 19c | 2019 | LTS(~2027), 자동 인덱싱, SODA JSON API, Hybrid Partitioned Tables |
| 21c | 2021 | Innovation Release, 블록체인 테이블, 네이티브 JSON 타입, AutoML |
| 23c | 2023 | LTS, JSON Relational Duality, 네이티브 Vector 타입, AI 벡터 검색 |
자주 쓰는 쿼리
세션 및 실행 중인 SQL 확인
-- 현재 활성 세션
SELECT sid, serial#, username, status, sql_id
FROM v$session
WHERE status = 'ACTIVE' AND username IS NOT NULL;
-- 실행 중인 SQL 텍스트 확인
SELECT s.sid, s.sql_id, q.sql_text
FROM v$session s
JOIN v$sql q ON s.sql_id = q.sql_id
WHERE s.status = 'ACTIVE';실행 계획 확인
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE department_id = 10;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);테이블스페이스 사용량
SELECT tablespace_name,
ROUND(used_space * 8192 / 1024 / 1024, 1) AS used_mb,
ROUND(tablespace_size * 8192 / 1024 / 1024, 1) AS total_mb
FROM dba_tablespace_usage_metrics;락 확인 및 해제
-- 락 걸린 세션 확인
SELECT l.sid, s.username, l.type, l.mode_held
FROM v$lock l
JOIN v$session s ON l.sid = s.sid
WHERE l.block = 1;
-- 세션 강제 종료
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;