DB Study

1장. Oracle 개요 — Instance와 Database

"Oracle을 켠다"는 말은 정확히 무엇을 켜는 걸까요? 메모리와 프로세스의 묶음(Instance)과 디스크 위의 파일들(Database)을 구분하는 순간, Oracle 아키텍처의 절반이 열립니다.

기초 ⏱ 약 20분 🎬 애니메이션 2개 선수 지식: 없음
🧭
이 장에서 배우는 것

① Instance(메모리+프로세스)와 Database(파일)의 구분 ② 클라이언트 접속의 여정 — 리스너와 dedicated 서버 프로세스 ③ dedicated vs shared server ④ CDB/PDB 멀티테넌트 개요와 PostgreSQL·MySQL 대비 Oracle의 위상

1.1 Oracle Database — 40년을 버틴 상용 RDBMS의 표준

Oracle Database는 1979년 첫 상용 SQL RDBMS로 출발해, 지금도 금융·통신·제조 등 대규모 기업 시스템의 표준으로 쓰이는 데이터베이스입니다. 이 파트에서 다루는 기준 버전은 Oracle Database 19c — 장기 지원(Long Term Release)으로 실무에서 가장 널리 쓰이는 버전입니다.

Oracle을 배우는 가장 좋은 방법은 "용어의 벽"을 먼저 넘는 것입니다. SGA, PGA, 리스너, undo, redo… 낯선 단어가 쏟아지지만, 사실 대부분은 다른 DB에도 있는 개념의 Oracle식 이름입니다. 예를 들어 redo는 PostgreSQL의 WAL과, buffer cache는 shared buffers와 같은 문제를 풉니다. 학습 홈의 PostgreSQL 개념 대응표를 옆에 두고 읽으면 훨씬 빠릅니다.

그 용어의 벽에서 첫 번째이자 가장 중요한 관문이 바로 이것입니다 — Instance와 Database는 다른 것이다.

1.2 Instance vs Database — 몸과 영혼의 구분

일상 대화에서는 "오라클 DB"라고 뭉뚱그려 부르지만, Oracle 공식 문서는 두 단어를 엄격히 구분합니다.

Instance (인스턴스)Database (데이터베이스)
정체메모리(SGA) + 백그라운드 프로세스의 묶음디스크 위의 파일 묶음
사는 곳RAM (휘발성)디스크 (영속성)
구성 요소SGA, DBWn·LGWR 등 백그라운드 프로세스데이터파일, 컨트롤파일, 온라인 리두 로그 파일
서버 재시작하면사라진다 (다시 기동해야 함)남아 있다
비유깨어 있는 정신과 일손서고에 보관된 장부 원본

Instance가 Database를 "열어서(open)" 서비스하는 것이 Oracle의 동작 모델입니다. 인스턴스 하나는 한 번에 데이터베이스 하나만 마운트할 수 있고, 반대로 하나의 데이터베이스를 여러 인스턴스가 동시에 여는 구성이 바로 RAC(Real Application Clusters)입니다.

Database를 이루는 세 가지 파일의 역할은 꼭 기억해 두세요.

💾 디스크 — Database 데이터파일 테이블·인덱스 본체 컨트롤파일 신분증 + 목차 리두 로그 파일 변경 기록 (복구용) 🧠 메모리 + 프로세스 — Instance SGA (공유 메모리) Buffer Cache · Shared Pool … DBWn LGWR CKPT SMON PMON …4장 OPEN! 🎉 Oracle 서버 완성 Instance가 Database를 mount → open 하면 비로소 SQL을 받을 수 있는 상태가 됩니다

기동 단계를 눈으로 확인해 봅시다. SQL*Plus에서 관리자로 접속해 조회하면 인스턴스와 데이터베이스의 상태가 각각 따로 보입니다.

-- 인스턴스 상태 확인 (메모리+프로세스 쪽)
SELECT instance_name, status, version FROM v$instance;

INSTANCE_NAME  STATUS   VERSION
-------------- -------- -----------
orcl           OPEN     19.0.0.0.0

-- 데이터베이스 상태 확인 (파일 쪽)
SELECT name, open_mode FROM v$database;

NAME   OPEN_MODE
------ ----------
ORCL   READ WRITE
💡
v$ 뷰 — Oracle 관찰의 창

v$instance, v$database처럼 v$로 시작하는 동적 성능 뷰는 인스턴스의 현재 상태를 보여주는 창입니다. PostgreSQL의 pg_stat_* 뷰에 해당하며, 이 가이드 전체에서 계속 등장합니다.

1.3 접속의 여정 — 리스너에서 서버 프로세스까지

애플리케이션이 Oracle에 접속하면 무슨 일이 일어날까요? 주인공은 두 명입니다.

💻 클라이언트 JDBC / SQL*Plus 📡 리스너 포트 1521 대기 Oracle 서버 (Instance) ⚙️ 서버 프로세스 이 세션 전담 (dedicated) 🧠 SGA 모든 서버 프로세스가 공유 ① 접속 요청 ② 서버 프로세스 생성 ③ 연결 인계 — 이후 직통! ④ SQL 처리 — 서버 프로세스가 SGA를 이용해 실행 ⑤ 리스너는 이 세션에서 손을 뗌 — 다음 접속 요청 대기 세션 유지 중: 클라이언트 ↔ 서버 프로세스 직통
⚠️
"리스너가 죽었는데 서비스는 된다?"

실무에서 종종 겪는 상황입니다. 리스너는 접속 중개만 하므로, 리스너가 내려가도 기존 세션(커넥션 풀)은 정상 동작합니다. 대신 새 접속이 ORA-12541: TNS:no listener로 실패하죠. 반대로 인스턴스가 죽으면 기존 세션까지 모두 끊어집니다.

1.4 Dedicated vs Shared Server — 일꾼을 배치하는 두 가지 방식

위 애니메이션은 기본값인 dedicated server 방식입니다. 세션 하나에 서버 프로세스 하나가 1:1로 붙습니다. PostgreSQL의 backend 프로세스와 같은 모델이죠. 반면 shared server 방식에서는 소수의 공유 서버 프로세스 풀이 여러 세션의 요청을 번갈아 처리합니다. 요청은 dispatcher라는 중간 프로세스가 큐에 넣어 분배합니다.

Dedicated Server (기본)Shared Server
구조세션 1 : 서버 프로세스 1여러 세션 : 공유 프로세스 풀 (dispatcher가 분배)
장점구조 단순, 세션 간 간섭 없음, 배치·대량 작업에 유리수천 세션도 적은 프로세스로 수용 (메모리 절약)
단점세션 수만큼 프로세스·메모리 소비요청 큐 대기 발생 가능, 긴 작업에 불리
세션 메모리(UGA) 위치PGA 안 (프로세스 사적 공간)SGA 안 (어느 프로세스든 이어받아야 하므로)
요즘 실무대부분 이쪽 + 애플리케이션 커넥션 풀커넥션 풀의 보편화로 사용 빈도 낮음

UGA(세션 메모리)의 위치가 왜 달라지는지는 3장 PGA에서 그림으로 다시 봅니다. 지금은 "shared server에서는 아무 공유 프로세스나 내 세션을 이어받아야 하니, 세션 상태를 모두가 보는 SGA에 둘 수밖에 없다"는 논리만 기억하세요.

1.5 CDB와 PDB — 멀티테넌트 아키텍처

Oracle 12c에서 도입되어 19c에서 표준이 된 멀티테넌트(multitenant) 구조에서는, 하나의 컨테이너 데이터베이스(CDB) 안에 여러 개의 플러거블 데이터베이스(PDB)가 들어갑니다.

핵심 이점은 인스턴스 하나(SGA와 백그라운드 프로세스 한 벌)를 여러 PDB가 공유한다는 점입니다. DB 10개를 서버 하나에 통합할 때, 인스턴스 10개를 띄우는 대신 CDB 하나에 PDB 10개를 꽂으면 메모리와 관리 비용이 크게 줄어듭니다.

-- 지금 내가 어떤 컨테이너에 있는지, 어떤 PDB들이 있는지
SHOW con_name;

CON_NAME
--------
CDB$ROOT

SHOW pdbs;

CON_ID  CON_NAME   OPEN MODE   RESTRICTED
------  ---------  ----------  ----------
     2  PDB$SEED   READ ONLY   NO
     3  ORCLPDB1   READ WRITE  NO

-- PDB로 이동해서 작업하기
ALTER SESSION SET container = ORCLPDB1;
💡
헷갈리면 이렇게 정리하세요

Instance : Database = 1 : 1 (RAC에서는 N : 1). 그리고 그 Database가 CDB라면 안에 PDB가 여러 개. 애플리케이션 개발자가 접속하는 대상은 보통 PDB의 서비스 이름입니다.

1.6 PostgreSQL·MySQL과 나란히 놓고 보기

같은 관계형 DB지만 설계 철학과 생태계의 위치가 다릅니다. 앞으로 각 장에서 세부 비교가 계속 나오니, 여기서는 큰 그림만 잡습니다.

OraclePostgreSQLMySQL
라이선스상용 (고가, 강력한 기술지원)오픈소스 (PostgreSQL License)오픈소스 (GPL) + 상용 에디션
세션 처리프로세스 기반 (dedicated) + shared server 옵션프로세스 기반 (backend)스레드 기반
MVCC 옛 버전 보관undo 세그먼트 (별도 공간)테이블 안 dead tuple + VACUUM(InnoDB) undo 로그 — Oracle과 유사
변경 로그redo logWAL(InnoDB) redo log + binlog
강점 영역대규모 OLTP, RAC 고가용성, 옵티마이저·진단 도구 성숙도확장성(Extension), 표준 SQL, 다양한 워크로드웹 서비스, 단순 OLTP, 운영 용이성

✍️ 이해도 체크

Oracle에서 "Instance"에 포함되는 것을 가장 정확히 고른 것은?
✅ Instance = SGA + 백그라운드 프로세스, 즉 메모리와 프로세스의 묶음입니다. 파일들(데이터파일·컨트롤파일·리두 로그)은 Database에 속합니다. 리스너는 인스턴스와 별개로 도는 접속 중개 프로세스입니다.
리스너 프로세스가 죽었을 때 일어나는 일로 옳은 것은?
✅ 리스너는 접속을 "중개"만 하고, 연결이 성립되면 클라이언트와 서버 프로세스가 직접 통신합니다. 따라서 리스너가 죽어도 기존 세션은 멀쩡하고, 새 접속만 ORA-12541로 실패합니다.
📚
원문으로 더 깊이

Oracle Database 19c Concepts Guide — Introduction to Oracle Database 장에서 인스턴스/데이터베이스 구분, 멀티테넌트, 프로세스 구조의 공식 정의를 확인할 수 있습니다.