데이터베이스 연구실.log

서버 프로세스와 백그라운드 프로세스

Oracle을 움직이는 세 종류의 프로세스(사용자, 서버, 백그라운드)의 역할과 메모리, 프로세스 장애 시 처리, 세션과 OS 프로세스를 연결해 확인하는 SQL

사용자 프로세스서버 프로세스백그라운드 프로세스V$PROCESSTrace FileADR

#핵심 요약

사용자 프로세스는 SQL*Plus, SQL Developer, 애플리케이션처럼 사용자가 실행한 프로그램이고 Oracle 메모리를 쓰지 않음

서버 프로세스는 사용자 요청을 받아 SQL을 실행하고 결과를 돌려주며 PGA를 씀

백그라운드 프로세스는 인스턴스 전체를 위한 관리 작업을 하며 자체 PGA를 쓰고 SGA에 접근함

사용자 프로세스가 비정상 종료되면 Oracle이 남은 세션, 트랜잭션, Lock을 자동으로 정리함

#개념과 동작 원리

#세 종류의 프로세스

구분 역할 메모리
사용자 프로세스 SQL*Plus, SQL Developer, 애플리케이션 등 사용자가 실행한 프로그램 Oracle 메모리 아님
서버 프로세스 사용자 요청을 받아 SQL 실행, 데이터 처리, 결과 반환 PGA
백그라운드 프로세스 인스턴스 전체를 위한 관리 작업 수행 자체 PGA와 SGA 접근
개념도개념 도식조회만 함
사용자 프로세스
     | 요청
서버 프로세스
     |
Oracle DB

백그라운드 프로세스
-> 인스턴스 전체 관리

#연결, 세션, 서버 프로세스

구분 의미
Connection 클라이언트와 인스턴스 사이의 연결 통로
Session 로그인 후 생성되는 논리적인 사용자 상태
Server Process 세션의 실제 작업을 처리하는 프로세스

전용 서버(Dedicated Server)에서는 일반적으로 세션마다 서버 프로세스가 배정되고, 공유 서버(Shared Server)에서는 여러 세션이 서버 프로세스를 공유할 수 있음

#프로세스 장애 처리

장애 처리
SQL 실행 오류 해당 명령만 실패
사용자 프로세스 종료 Oracle이 자동 정리
미완료 트랜잭션 상태에서 종료 Rollback, Lock 해제
사용자 실수, 파일 손상, 외부 장애 DBA 개입 필요

프로세스 종료 감시와 자원 정리는 PMON 그룹이 담당함

#Trace File과 ADR

Trace File은 서버 프로세스와 백그라운드 프로세스가 남기는 진단, 성능 분석 기록임
ADR에는 Trace File과 Alert Log 같은 진단 정보가, FRA에는 백업과 복구 관련 파일이 있으며 둘은 서로 다른 저장 영역임

#주요 용어와 구성 요소

구문 의미
DBW 더티 버퍼를 데이터 파일에 기록함
LGWR 리두 버퍼의 내용을 온라인 리두 로그에 기록함
CKPT 체크포인트 정보를 컨트롤 파일, 데이터 파일 헤더에 갱신하며 DBW에 기록을 요청함
SMON 필요 시 인스턴스 복구와 시스템 수준 정리를 담당함
PMON, CLMN, CLnn PMON은 비정상 종료를 감지하고 CLMN, CLnn에 정리 작업을 위임함
RECO 분산 트랜잭션의 실패를 자동으로 해결하는 프로세스임
LREG 인스턴스, 서비스 정보를 리스너에 등록함

#필수 명령어 또는 SQL

항목 실행 조건
작업 대상 현재 세션과 서버 프로세스, 블로킹, 진단 경로, 백그라운드 프로세스
필요 권한 SYS 계정 또는 각 동적 성능 뷰의 조회 권한을 부여받은 계정
바꿀 입력값 현재 세션 조회는 입력값 없음, 조사할 SID, 프로세스명은 실제 환경에 따름
결과 해석 SID, SERIAL#, SPID, 진단 경로의 실제 조회 출력은 기재 없음

#현재 세션과 OS 서버 프로세스

SQL*Plus조회만 함
SELECT s.sid, s.serial#, s.username, p.spid os_pid
FROM v$session s, v$process p
WHERE s.paddr = p.addr
AND s.sid = SYS_CONTEXT('USERENV','SID');

결과 해석:

V$SESSION.PADDR와 V$PROCESS.ADDR를 이어 현재 세션을 처리하는 서버 프로세스의 OS 프로세스 번호(SPID)를 봄

#블로킹 세션

SQL*Plus조회만 함
SELECT sid, serial#, blocking_session, event, seconds_in_wait
FROM v$session
WHERE blocking_session IS NOT NULL;

결과 해석:

결과가 있으면 BLOCKING_SESSION이 그 세션을 막고 있는 세션 번호임
세션 진단은 성능 분야의 "세션과 블로킹 진단"에서 다룰 예정임

#진단 경로와 현재 Trace File

SQL*Plus조회만 함
SELECT name, value FROM v$diag_info;

SELECT value FROM v$diag_info
WHERE name = 'Default Trace File';

결과 해석: 개별 실행 출력은 기재 없음

#동작 중인 백그라운드 프로세스

SQL*Plus조회만 함
SELECT * FROM v$bgprocess WHERE paddr <> '00';

결과 해석:

수업 자료(인스턴스 문서)의 조회임
PADDR가 00이 아닌 행만 남겨 실제로 떠 있는 프로세스를 본다는 의도로 보이나 설명은 기재 없음

#구문과 옵션 설명

V$PROCESS의 ADDR는 프로세스 상태 객체 주소, SPID는 OS 프로세스 식별값임
멀티스레드 구성에서는 SPID만으로 Oracle 프로세스가 유일하게 구분되지 않으므로 SOSID 또는 SPID, STID를 함께 구분함
V$BGPROCESS의 NAME, DESCRIPTION은 프로세스 이름, 설명이며 PADDR는 상태 객체 주소임

#사용 조건과 주의사항

프로세스 역할과 OS 식별값은 서로 다른 정보이며 프로세스 이름만으로 현재 작업의 성공을 판정하지 않음

Windows에서는 인스턴스의 Oracle 프로세스들이 OS 스레드로 구현됨
V$BGPROCESS의 PADDR가 00이 아닌 행을 조회하는 방식과 V$PROCESS의 OS 식별값을 함께 읽되 프로세스, 스레드 실행 모델을 구분함

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기