👇용어정리
더보기
- SGA(System Global Area) : 공유메모리 영역으로 데이터를 빠르게 처리하기 위한 공간
- PGA(Program Global Area) : 개별 메모리 공간으로 정렬 중간 데이터, 사용자 세션 정보 등 처리
- Shared Pool: 내가 방금 실행한 SQL 문장이 어떻게 실행될지 짜놓은 '계획서'를 보관합니다. 똑같은 SQL을 던지면 다시 분석 안 하고 여기서 계획서를 꺼내 씁니다
- Library Cache: SQL 문장, 실행 계획을 저장하는 곳
- Data Dictionary Cache: 메타데이터가 저장된 곳으로 테이블 정보, 권한, 통계 (설계도)를 저장하는 곳
- Database Buffer Cache: 하드디스크에서 읽어온 실제 데이터(Table 등)를 보관하는 곳입니다. 똑같은 데이터를 또 찾을 때 디스크까지 안 가고 여기서 바로 꺼내주니 속도가 엄청나게 빨라지죠.
- Redo Log Buffer: 데이터에 변화가 생겼을 때(Insert, Update 등) 그 기록을 잠시 보관합니다. 갑자기 정전이 되어도 이 기록을 보고 복구할 수 있게 해주는 보험 같은 공간입니다.
- Large Pool: 백업이나 대용량 처리처럼 메모리를 많이 잡아먹는 작업을 위해 따로 빼놓은 보조 공간입니다.
- Java Pool: 오라클 데이터베이스 내부에서 자바(Java) 코드를 실행할 때 사용하는 전용 메모리 영역입니다.
- Soft Parse: 이미 누군가 실행했던 SQL이라 실행 계획이 메모리에 있는 경우입니다. CPU를 거의 쓰지 않아 매우 빠릅니다.
- Hard Parse: 처음 들어온 SQL이라 최적화(Optimizer) 과정을 거쳐 실행 계획을 새로 짜야 합니다. CPU와 메모리를 많이 잡아먹는 '비싼' 작업입니다.
- DBWR: Data Buffer Cache의 데이터를 데이터 파일로 옮기는 프로세스 입니다.
- DBWn: DBWR 프로세스를 여러 개(n개) 운용할 때의 집합 입니다.
- LGWR: Redo Log Buffer의 내용을 Redo Log File에 옮기는 프로세스 입니다.
- CKPT: 수정된 데이터를 디스크에 작성 명령을 내리고, Control File과 Data File 헤더에 SCN을 새기는 프로세스 입니다.
- SMON: DB가 비정상 종료 시, 재기동때 Redo 로그를 보고 작업 중이던 데이터를 복구하는 프로세스 입니다.
- PMON: 클라이언트의 접속이 끊겨 서버 프로세스가 죽으면 자원을 회수하는 프로세스 입니다.
오라클 백그라운드 프로세스

5대 프로세스
1. DBWR (Database Writer)
"Buffer Cache의 데이터를 데이터 파일로 옮깁니다."
- 역할: 사용자가 수정한 데이터(Dirty Block)를 메모리에서 하드디스크(Data Files)로 실제 저장하는 역할을 합니다.
- 핵심 메커니즘: 사용자가 COMMIT을 한다고 해서 DBWR가 즉시 디스크에 쓰지 않습니다. 메모리가 부족하거나, 체크포인트(Checkpoint)가 발생했을 때 효율적으로 한꺼번에 내려씁니다. (그래서 DB가 효율적인 것입니다.)
2. LGWR (Log Writer)
"Redo Log Buffer의 내용을 Redo Log File에 옮깁니다."
- 역할: 오라클에서 변경 이력을 담은 Redo Log Buffer를 디스크(Redo Log Files)에 기록합니다.
- 핵심 메커니즘: 사용자가 COMMIT을 누르는 순간 일을 시작합니다. 데이터 파일에 쓰기 전(DBWR)에 로그부터 확실히 남겨서, 사고가 나도 복구할 수 있게 보장합니다.
👇 ★Commit
더보기
- Commit
- Commit 실행 시 Redo Log Buffer에 있는 변경 이력만 Redo Log 파일에 저장합니다.
- 발생 시점
- DDL 문장 실행 시 자동 커밋
- DCL 문장 실행 시 자동 커밋
- COMMIT; 실행 시
- DB 접속을 정상적으로 나갈때
- 최소 3초에 한번씩 발생
3. CKPT (Checkpoint Process)
"메모리와 디스크의 정보를 일치시킵니다."
- 역할: DBWR에게 "지금까지 수정된 거 다 디스크에 써!"라고 신호를 보내고, 컨트롤 파일과 데이터 파일 헤더에 "여기까지 저장 완료!"라는 번호(SCN)를 새깁니다.
- 실무 포인트: 이 번호가 서로 맞지 않으면 오라클은 "데이터가 깨졌다"고 판단하여 DB가 켜지지 않습니다.
👇 ★CheckPoint
더보기
- Checkpoint
- Checkpoint 실행 시 CKPT가 DBWn(DBWR 그룹 약어)를 호출하여 Data Buffer Cache에서 수정되었지만 디스크에 아직 작성되지 않은 데이터들을 Data File에 작성합니다. 즉, 데이터 수정이 일어나면 Data File에 옮겨는 역할을 합니다.
- Checkpoint 완료되면 Control File과 Data File Header에 SCN을 남깁니다.
- 발생 시점
- Redo Log 파일이 꽉 차서 Log Switch가 일어날 때.
- 관리자가 ALTER SYSTEM CHECKPOINT; 명령을 직접 내릴 때
- DB를 정상 종료 할 때
4. SMON (System Monitor)
"시스템 장애 후 재시작 시 자동 복구를 수행합니다."
- 역할(DB 인스턴스 전체 대상)
- 정전 등으로 DB가 비정상 종료되었다면, 다시 켤 때 Redo 로그를 보고 작업 중이던 데이터를 복구합니다.
- Control File의 SCN과 Data File의 SCN을 비교
- SCN이 서로 다르다면 Redo Log를 읽어 Data File에 적히지 않은 데이터를 메모리에 다시 작성
- 커밋되지 않은 작업들은 Roll-Back
- Temp 테이블스페이스를 쓴 후 더 이상 안 쓰는 데이터(임시 세그먼트) 정리하여 공간을 정리합니다.
- 정전 등으로 DB가 비정상 종료되었다면, 다시 켤 때 Redo 로그를 보고 작업 중이던 데이터를 복구합니다.
5. PMON (Process Monitor)
"죽은 프로세스를 감시하고 자원을 회수합니다."
- 역할(클라이언트 대상)
- 클라이언트 접속이 갑자기 끊기거나 서버 프로세스가 죽으면, 그 프로세스가 잡고 있던 Lock을 해제하고 메모리(PGA)를 다시 확보합니다.
- 비정상 적으로 클라이언트 접속이 끊기면 작업 중인 트랜잭션을 롤백을 수행하여 데이터 일관성을 유지합니다.
❗Data Buffer Cache와 Redo Log Buffer의 메모리에 기록을 남기는 역할은 Server Process라는것을 헷갈리면 안됩니다.
추가 백그라운 프로세스
1. ARCn (Archiver Process)
"꽉 찬 Redo Log 파일을 아카이브 로그 파일로 복제합니다."
- 역할: 온라인 리두 로그 파일이 다 차면, 다음 파일로 넘어가기 전에 그 내용을 별도의 공간(Archive Destination)에 복사해 둡니다.
- 실무 포인트: DB가 Archive Log Mode일 때만 작동합니다. 이 프로세스가 없으면 리두 로그가 덮어씌워져서 과거 시점으로의 복구가 불가능해집니다. 만약 아카이브 저장 경로가 꽉 차서 ARCn이 일을 못 하면, DB 전체가 멈춰버리는 무서운 상황이 발생합니다.
2. RECO (Recoverer Process)
"서로 다른 DB 간의 꼬인 매듭을 풀어줍니다."
- 역할: 여러 개의 DB가 연결된 환경(Database Link 등)에서 트랜잭션을 수행하다가 한쪽 네트워크가 끊겨서 "한쪽은 커밋, 한쪽은 미결정" 상태가 된 데이터를 찾아내어 자동으로 해결(Rollback 또는 Commit)합니다.
3. LREG (Listener Registration Process)
"리스너에게 인스턴스의 생존 신고를 합니다."
- 역할: 우리가 앞서 배운 **'동적 등록(Dynamic Registration)'**의 주인공입니다. DB가 뜨면 리스너를 찾아가 "나 지금 서비스 준비 됐어!"라고 알려줍니다.
- 실무 포인트: 예전 버전에서는 PMON이 이 일을 같이 했지만, 지금은 LREG가 전담하여 리스너와의 소통을 책임집니다.
4. MMNL / MMON (Manageability Monitor)
"DB의 건강 상태(통계 정보)를 수집합니다."
- 역할: AWR(Automatic Workload Repository) 보고서를 만들기 위해 1시간마다(기본값) 스냅샷을 찍고 통계 데이터를 보관합니다.
- 실무 포인트: 우리가 나중에 성능 튜닝을 할 때 보게 될 수많은 지표들이 다 이 녀석들이 부지런히 메모리(SGA)에서 긁어모은 데이터들입니다.
💡시나리오로 감 잡기
아래 상황을 읽어보고, 어떤 원인일지 잠시만 멈춰서 생각해보세요.
시나리오 1. COMMIT 후에도 변하지 않는 데이터 파일
- 제목: "커밋은 성공했는데, 왜 데이터 파일(.dbf) 수정 시간은 그대로일까?"
- 상황: 대량의 데이터를 UPDATE하고 COMMIT까지 완료했습니다. 하지만 OS에서 데이터 파일의 수정 시간을 확인해 보니 변경되지 않았습니다.
👇원인과 해결
더보기
- 원인: 오라클은 성능을 위해 'Lazy Writing' 전략을 사용합니다. COMMIT 시점에 무거운 데이터 파일(DBWR)을 수정하는 대신, 가벼운 리두 로그(LGWR)에만 변경 이력을 빠르게 기록하고 사용자에게 성공을 알립니다.
- 해결: 정상적인 동작입니다. 실제 데이터 파일은 나중에 체크포인트(Checkpoint)가 발생하거나 메모리가 부족할 때 DBWR가 백그라운드에서 조용히 처리하므로 기다리면 됩니다.
시나리오 2. 갑작스러운 정전과 데이터 증발 의문
- 제목: "데이터 파일에 쓰기 전 정전이 났는데, 내 데이터는 안전할까?"
- 상황: 중요한 데이터를 수정하고 COMMIT을 누른 직후, 서버 전원이 나갔습니다. 아직 DBWR가 디스크에 쓰기 전이라 데이터가 사라졌을까 봐 걱정되는 상황입니다.
👇원인과 해결
더보기
- 원인: 데이터 파일엔 기록되지 않았지만, COMMIT 순간 LGWR가 Redo Log File에 변경 이력을 이미 저장해 두었습니다. 즉, '보험'은 들어져 있는 상태입니다.
- 해결: 서버를 다시 켜면 SMON이 자동으로 가동됩니다. SMON은 리두 로그를 읽어 데이터 파일에 반영되지 않은 내용을 메모리에 복구(Roll-Forward)하여 데이터를 안전하게 살려냅니다.
시나리오 3. 강제 종료 후 풀리지 않는 자물쇠(Lock)
- 제목: "DBeaver를 강제 종료했는데, 왜 해당 로우(Row)는 수정 불가 상태일까?"
- 상황: 쿼리를 실행하다가 프로그램이 멈춰서 강제 종료했습니다. 다시 접속해 보니 아까 수정하던 데이터가 여전히 Lock이 걸려 있어 수정할 수 없습니다.
👇원인과 해결
더보기
- 원인: 클라이언트 프로그램만 꺼졌을 뿐, 서버의 Server Process는 주인을 잃은 채 여전히 메모리와 자원(Lock)을 붙잡고 있는 '고스트 세션' 상태가 되었기 때문입니다.
- 해결: PMON이 해결사로 나섭니다. PMON은 주기적으로 프로세스들을 감시하다가 연결이 끊긴 프로세스를 발견하면, 즉시 해당 작업을 롤백하고 잡고 있던 Lock을 해제하여 자원을 회수합니다.
시나리오 4. "실행 계획이 갑자기 나빠져서 쿼리가 느려졌어요"
- 제목: "어제까지 빠르던 쿼리가 오늘 갑자기 느려진 배후, MMON의 스냅샷"
- 상황: 특별한 설정 변경이 없었는데 특정 쿼리의 성능이 급격히 저하되었습니다. 확인해보니 실행 계획(Execution Plan)이 엉뚱하게 바뀌어 있습니다.
👇원인과 해결
더보기
- 원인: MMON 프로세스가 주기적으로 수집한 통계 정보 때문입니다. 데이터 양이 급격히 변한 상태에서 MMON이 새로운 통계 정보를 갱신했고, 이를 바탕으로 옵티마이저가 '더 낫다고 판단한(사실은 아닌)' 새로운 계획을 짰기 때문입니다.
- 해결: 잘못 수집된 통계 정보를 이전 시점으로 되돌리거나(Restore Statistics), 해당 SQL에 힌트(Hint)를 주어 강제로 좋은 실행 계획을 쓰도록 고정해야 합니다.
'🗄️ DB_이야기 > # 🛢️ Oracle' 카테고리의 다른 글
| [Oracle] Oracle Archtecture(6) [데이터파일&테이블스페이스] (1) | 2026.03.20 |
|---|---|
| [Oracle] Oracle Architecture (5) [물리적 저장 구조] (1) | 2026.03.19 |
| [Oracle] Oracle Architecture(3) [SQL 처리 과정] (0) | 2026.03.17 |
| [Oracle] Oracle Architecture(2) [Oracle 접속 과정] (0) | 2026.03.17 |
| [Oracle] Oracle Architecture(1) (0) | 2026.03.16 |
