Oracle 구조 구성 요소

 

1. Oracle 구조 

 

오라클 서버는 정보를 관리하는 데 핵심적인 역할을 한다. 정보를 개방적이고 포괄적이며 통합적으로 관리할 수 있는 데이터베이스 관리 시스템이며, 오라클은 인스턴스와 오라클 데이터베이스로 구성된다. 오라클 서버에는 여러 개의 파일, 프로세스, 메모리 구조가 있지만 이 모든게 SQL문을 처리하는 데 사용되는 것은 아니다. 이 중에서 일부는 데이터베이스 성능을 향상시키고, 소프트웨어 또는 하드웨어 오류 발생 시 데이터베이스를 복구하거나, 데이터베이스를 유지 관리하는 데 필요한 작업을 수행한다. 

 

주요 구성 요소 개요

1) 접속 설정 및 세션 설정 

 

사용자는 SQL 문을 오라클 데이터베이스에 보내려면 인스턴스에 접속해야 한다. 응용프로그램이나 툴은 사용자 프로세스로 실행된다. 대부분의 기본 구성에서는 사용자가 오라클 서버에 로그인할 때, 오라클 서버를 실행중인 시스템에서 프로세스가 생성되는데 이 프로세스를 서버 프로세스라고 한다. 서버 프로세스는 클라이언트에서 실행되는 사용자 프로세스 대신 오라클 인스턴스와 통신하며 사용자 대신 SQL 문을 실행하며, 사용자 프로세스를 제외하고는 전부 오라클 서버이다.

 

 

2) 인스턴스 

 

메모리와 백그라운드 프로세스 구조로 구성이 된다. 데이터베이스의 데이터를 액세스하려면 인스턴스가 시작되어야한다. 인스턴스가 시작될 때마다 SGA(시스템 글로벌 영역)가 할당되고 백그라운드 프로세스가 시작된다. 항상 한 번에 한 개의 데이터베이스만 열며, 오라클 데이터베이스를 액세스하는 수단이다. 백그라운드 프로세스는 I/O 의 효율성 향상 시킨다. 

 

2-1) 메모리 구조 

 

오라클의 메모리 구조는 SGA(시스템 글로벌 영역), PGA(프로그램 글로벌 영역)으로 구성된다. SGA는 인스턴스가 시작될 때 할당되며 오라클 인스턴스의 기본적인 구성요소이다. SGA는 데이터베이스 버퍼 캐시, 리두 로그 버퍼, shard pool이 있고, 버퍼는 내려쓰기전에 임시로 저장되며, 데이터는 날라가면 안된다. 따라서 반드시 기록되어야 된다. 하지만 캐시는 읽기 위해 잠간 저장되기 때문에 날라가도 문제는 없다. PGA는 서버 프로세스가 시작될 때 할당된다

 

2-1-1) Shard Pool 

 

Shard Pool은 가장 최근에 실행한 SQL 문이나 가장 최근에 사용한 데이터 정의를 저장하는데 사용되며, 메모리의 구조는 라이브러리 캐시, 데이터 딕셔너리 캐시가 있다. 이 두 가지 캐시가 들어있는 이유는 메모리가 크기 때문에 Shard Pool안에서 동시에 사용하며, 저장된다.

 

2-1-2) 라이브러리 캐시

 

라이브러리 캐시에는 가장 최근에 사용한 SQL문에 대한 정보를 저장하거나 실행계획이 저장되어있다. 공유 풀의 크기가 너무 작으면 명령문이 라이브러리 캐시로 계속 재로드되어 성능에 영향을 준다. 라이브러리 캐시의 크기는 공유 풀 크기 조정을 통해 결정된다.

 

2-1-3) 데이터 딕셔너리 캐시 

 

데이터 딕셔너리 캐시는 딕셔너리 테이블만 모아놓은 걸 말하며, 데이터베이스에서 가장 최근에 사용된 정의 모음이다. 데이터베이스에 대한 정보(사용자 계정 데이터, 데이터 파일 이름, 세그먼트 이름, 확장 영역 위치, 테이블 설명 및 사용자 권한)는 데이터 딕셔너리 테이블에 저장된다. 서버에서 이 정보가 필요하면 데이터 딕셔너리 테이블을 읽고 반환된 데이터는 데이터 딕셔너리 캐시에 저장된다.

 

2-1-4) 데이터베이스 버퍼 캐시  

 

데이터베이스 버퍼 캐시는 디스크에 있는 데이터 파일에서 검색된 데이터 블록의 복사본을 메모리에 임시로 저장해 두는 공간을 말하며, 데이터 파일에서 블록을 찾아 데이터베이스 버퍼 캐시에 복사한다. 즉, 변경된 데이터가 반영된다. 데이터를 얻거나 갱신할 때 성능이 크게 향상된다.

 

2-1-5) 리두 로그 버퍼

 

리두 로그 버퍼는 데이터베이스 데이터 블록의 변경 작업을 기록해 두는 임시 메모리 영역이며, 데이터베이스를 복구할 때 사용한다. 내부에 기록된 변경 사항을 리두 항목이라하며, 리두 항목에는 INSERT, UPDATE, DELETE, CREATE, ALTER 또는 DROP작업에 의해 변경되기 전의 데이터를 재생성해야 하는 정보가 포함되어있다. 

 

2-1-6) Java 풀, 대용량 풀 

 

 Java 풀, 대용량 풀은  SGA의 선택적 메모리 영역이며, 공유 풀의 부담을 줄여준다. 

 

2-1-7) 프로그램 글로벌 영역(PGA)

 

프로그램 글로벌 영역은 데이터를 포함하고 단일 서버 프로세스 또는 단일 백그라운드 프로세스의 정보를 제어하는 메모리 영역이다. PGA는 프로세스가 생성될 때 할당되고 프로세스가 종료될 때 할당이 해제된다.  

 

 

3.백그라운드 프로세스 

PMON(피몬, 프로세스 모니터) 메모리 상태를 유지시켜 준다. 
SMON(에스몬, 시스템 모니터) 인스턴스 장애를 복구하는 일을 한다.
DBWR(디비라이터) 데이터베이스 버퍼 캐시의 더티 버퍼를 데이터 파일에 기록하여 데이터베이스 버퍼 캐시에 있는 사용 가능한 버퍼 수를 충분하게 유지한다.
예) DML,DCL 을 했을 때는 DBWR가 데이터 내림 
LGWR(로그라이터) 리두 로그 버퍼의 내용을 리두 로그 파일에 기록해준다.
예) commit(트랜잭션) 했을 때는 LGWR만 데이터를 내림
CKPT(체크포인트) 체크포인트 이벤트를 발생시키고 체크포인트 시 DBWR를 활성화 시킨다. 이 정보로 데이터베이스 파일들을 동기화 시킴

※ 5개 이상이 생기면 즉시 shutdown 된다. 이를 백그라운드 프로세스라고 한다.

 

 

4. 데이터베이스 

 

데이터베이스는 실제 데이터가 저장되는 하드 드라이브 영역이다. 테이블, 인덱스, 사용자 정보 등 모든 영구 데이터가 저장된다. 데이터베이스 파일은 데이터를 일관성 있게 유지하고 인스턴스가 실패한 경우 데이터를 복구하는 데 사용된다.

데이터 파일(Data Files) - 데이터베이스를 구성하는 여러 파일이며, 사용자의 모든 데이터가 저장됨
- 데이터베이스의 모든 테이블의 작업은 전부 다 데이터 파일 안에 저장됨
- 데이터 파일은 block 단위로 구성 
제어 파일(Control Files) - 데이터베이스 내 다른 파일들의 손상 여부, 이름, 상태 정보가 들어 있음
- 작은 이진 파일 
- Oracle 서버만 수정 가능 > 관리자 또는 일반 사용자 수정 못함
- 데이터베이스 사용 중에도 계속 갱신
- 데이터 파일이나 리두 로그 파일의 이름, 위치, 상태 등등의 정보들이 들어있음
리두 로그 파일(Redo Log Files) - 사용자의 DML/DCL 작업으로 발생한 데이터 변경 내역을 시간 순서대로 기록하는 작업 일지를 말함
- 장애 발생 시 이 정보를 활용해 데이터 파일을 대상으로 손상된 데이터를 복구(redo)하여 일관성을 복구
- 미러셋 사용 > 안정성을 위해 
- 오래 된 로그는 아카이브 로그 파일로 백업됨
아카이브된 로그 파일 - 리두 로그 파일이 가득 차서 리두 로그 파일을 백업한 로그 파일
- 복구에 필요한 상세 변경 정보를 포함한 중요한 자료로 사용됨
매개변수 파일(파라미터 파일) - 날짜 포맷 등 파라미터가 모여 있는 파일
- 인스턴스를 구성할 때 파라미터 파일의 내용을 읽어서 구성 
-  오라클은 운영하기 위한 파라미터가 200여 종이 모여 있음
- 파라미터 파일은 sp로 시작해야되며 정해져 있다. 
예) spfiledb01.ora
- 컨트롤 파일 정보가 들어있음
암호 파일(Password file) - 패스워드가 저장되는 파일

 

 

 

 

 

5. STARTUP 과 SHUTDOWN

 

5-1) STARTUP 

 

STARTUP은 인스턴스를 시작하고 데이터베이스를 오픈하는 단계를 말한다. 

사용 명령어 > SQL> STARTUP [NOMOUNT | MOUNT | OPEN [READ ONLY | READ WRITE ]]

주황색은 default 값 

NOMOUNT상태 - 파라미터 파일을 읽어야 인스턴스가 시작됨
- 파라미터 수정 및 데이터베이스를 새로 만드는 작업이 가능
- SHUTDOWN 에서 STARTUP 하면 NOMOUNT 상태가 됨
- 백그라운드 프로세스 시작
MOUNT상태 - 컨트롤파일을 읽음
- 관리작업(백업) 하기가 좋음
- 일반 사용자가 접근 불가
OPEN상태 - 사용자가 데이터베이스를 액세스할 수 있게 함
- 인스턴스의 제어파일에서 기술한 대로 모든 파일(리두 로그 파일/컨트롤 파일)이 열림
- 기본값
- 복구 작업은 권하지 않음

 

 

5-2) SHUTDOWN

 

SHUTDOWN 명령은 인스턴스와 데이터 베이스를 안전하게 종료하는 명령어이며, SHUTDOWN IMMEDIATE로 해준다.

 

SHUTDOWN NOMAL - 새 접속이 허용되지 않음
- 종료하기 전에 오라클 서버가 모든 사용자의 접속 해제를 기다림
- 데이터베이스 및 리두 버파가 디스크에 기록됨
- 인스턴스를 종료하기 전에 오라클은 데이터베이스를 닫고 마운트 해제
- 이후 시작 시 인스턴스를 복구할 필요 없음
SHUTDOWN TRANSACTIONAL - 모든 클라이언트가 특정 인스턴스에게 새 트랜잭션을 시작할 수 없음
- 트랜잭션을 마치면 접속 해제
- 모든 트랜잭션이 끝나는 즉시 종료(트랜잭션은 되도록 짧게)
- 이후 시작 시 인스턴스를 복구할 필요 없음
SHUTDOWN IMMEDIATE - 현재 오라클 서버가 처리하고 있는 SQL 문이 완료되지 않음
- 오라클 서버는 현재 데이터베이스에 접속하고 있는 사용자의 접속이 해제될 때까지 기다리지 않음
- 오라클은 활성 트랜잭션을 롤백하고 모든 사용자의 접속을 해제
- 인스턴스를 종료하기 전에 오라클은 데이터베이스를 닫고 마운트 해제
- 이후 시작 시 인스턴스를 복구할 필요 없음
SHUTDOWN ABORT - 현재 오라클 서버가 처리하고 있는 SQL문이 즉시 종료됨
- 오라클은 현재 데이터베이스에 접속하고 있는 사용자의 접속이 해제될 때까지 기다리지 않음
- 커밋되지 않은 트랜잭션은 롤백 안됨
- 인스턴스는 파일을 닫지 않은 채 종료됨
- 데이터베이스가 닫히지 않거나 마운트 해제되지 않음
- 이후 시작 시 자동으로 인스턴스를 복구해야 함
- 이 명령은 장애를 발생 시키며, 데이터파일이 손상 되었을 때 쓰는 명령어
- DBWR가 작동을 안하지만 DB는 잘 돌아간다 그래서 빨리 ABORT로 DB를 죽여야 됨

A = ARORT  , T = TRANSACTIONAL

I = IMMEDIATE,   N = NORMAL

종료 모드 A I T N
새로운 접속 허용 아니오 아니오 아니오 아니오
현재 세션 종료 시까지 대기 아니오 아니오 아니오
현재 트랜잭션 종료 시까지 대기 아니오 아니오
체크포인트 시행 및 파일 닫기 아니오

 

 

================================================================

[ora19c@localhost ~]$ sqlplus / as sysdba  ▶ sysdba 권한으로 접속하겠다. 

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Nov 14 10:59:25 2025
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to an idle instance. ▶  db가 shutdown 상태 

SQL> startup 오라클 시작
ORACLE instance started. ▶ nomount 상태

Total System Global Area 1644163728 bytes
Fixed Size     8897168 bytes
Variable Size   956301312 bytes
Database Buffers   671088640 bytes
Redo Buffers     7876608 bytes
Database mounted. ▶ mount 상태 
Database opened. ▶ open 상태

 

SQL> shutdown immediate; ▶ 오라클 종료
Database closed. ▶  마운트 상태
Database dismounted. ▶ 노마운트 상태
ORACLE instance shut down.

=====================================================================

 

 

=====================================================================

SQL> STARTUP NOMOUNT

ORACLE instance started.

 

Total System Global Area 830472192 bytes

Fixed Size 8626144 bytes

Variable Size 629145632 bytes

Database Buffers 188743680 bytes

Redo Buffers 3956736 bytes

 

SQL> SELECT status FROM v$instance; ▶ DB의 상태 확인, 가상테이블

STATUS

-------------

STARTED

 

SQL> ALTER DATABASE MOUNT; ▶ MOUNT로 변경 

Database altered.

 

SQL> SELECT status FROM v$instance; ▶ DB 상태 확인

STATUS

---------------

MOUNTED

=====================================================================