DataBase
[SQL] 데이터베이스 저장 구조(Database Storage Structure)
부지런한피로
2025. 3. 7. 16:07
데이터베이스는 데이터를 효율적으로 저장하고 관리하기 위해 논리적 구조와 물리적 구조로 나뉜다.
1. 논리적 저장 구조 (Logical Storage Structure)
사용자가 데이터를 논리적으로 볼 수 있는 구조이며, 데이터베이스 객체들이 어떻게 조직되는지를 나타냅니다.
① 데이터베이스 (Database)
- 하나의 데이터베이스는 여러 개의 **테이블스페이스(Tablespace)**로 구성됨.
- 예: ORCL 데이터베이스 안에 USERS, SYSTEM 등의 테이블스페이스가 존재.
② 테이블스페이스 (Tablespace)
- 데이터 파일(Data File)을 그룹화하여 관리하는 논리적 저장 공간.
- 각 테이블스페이스는 여러 개의 데이터 파일을 가질 수 있음.
- 주요 테이블스페이스:
- SYSTEM / SYSAUX: 데이터 딕셔너리, 시스템 정보 저장.
- USERS: 일반 사용자 데이터 저장.
- UNDO: 트랜잭션 롤백을 위한 데이터 저장.
- TEMP: 정렬 작업을 위한 임시 데이터 저장.
③ 세그먼트 (Segment)
- 데이터 저장공간이 필요한 오브젝트
- 유형:
- 데이터 세그먼트(Data Segment): 테이블 데이터 저장.
- 인덱스 세그먼트(Index Segment): 인덱스 정보 저장.
- UNDO 세그먼트(Undo Segment): 트랜잭션 롤백을 위한 데이터 저장.
- 템퍼러리 세그먼트(Temporary Segment): 정렬, 조인 시 임시로 사용.
④ 익스텐트 (Extent)
- 공간을 확장하는 단위
- 하나의 세그먼트는 여러 개의 익스텐트(Extent)로 구성됨.
- 익스텐트는 연속된 블록(Block)들의 집합.
🔹 익스텐트 내 블록은 서로 인접한 연속된 공간이지만, 익스텐트끼리는 연속된 공간이 아니다.
오라클에서 세그먼트에 할단된 익스텐트 목록을 조회하는 방법은 아래와 같다.
select segment_type, tablespace_name, extent_id, file_id, block_id, blocks
from dba_extents
where owner = USER
and segment_name = 'MY_SEGMENT'
order by extent_id;
⑤ 블록 (Block)
- 데이터베이스에서 가장 작은 저장 단위.
- 일반적으로 4KB, 8KB 등의 크기를 가짐.
- 하나의 블록에는 여러 개의 행(Row)이 저장됨.
🔹 DB2, SQL Server 같은 EDBMS는 블록 대신 페이지(page)라는 용어를 사용
오라클 데이터베이스의 블록 사이즈를 확인하는 방법은 아래와 같다.
show parameter block_size
--또는
select value from v$parameter where name = 'db_block_size'
2. 물리적 저장 구조 (Physical Storage Structure)
실제 데이터가 운영 체제의 파일 시스템 또는 스토리지에 어떻게 저장되는지를 나타냅니다.
① 데이터 파일 (Data Files)
- 데이터를 실제로 저장하는 파일.
- 테이블스페이스별로 하나 이상의 데이터 파일이 존재.
② REDO 로그 파일 (Redo Log Files)
- 데이터 변경 사항을 기록하여 장애 발생 시 복구를 지원.
- 최소 2개 이상의 REDO 로그 그룹을 사용하여 순환 방식으로 운영.
③ 제어 파일 (Control File)
- 데이터베이스의 구조, 파일 위치, 로그 정보 등을 저장.
- 데이터베이스 복구 및 인스턴스 실행에 필수적.
④ TEMP 파일 (Temporary Files)
- 정렬, 해시 조인 등의 연산 중 임시 데이터를 저장.
3. 데이터베이스 저장 구조 요약
구분 | 설명 | 예시 |
데이터베이스 | 데이터 저장의 최상위 개념 | ORCL, HRDB |
테이블스페이스 | 데이터 파일을 그룹화하는 논리적 단위 | SYSTEM, USERS |
세그먼트 | 테이블, 인덱스 등의 저장 공간 | EMPLOYEE 테이블의 데이터 세그먼트 |
익스텐트 | 연속된 블록들의 집합 | 여러 개의 8KB 블록이 익스텐트를 구성 |
블록 | 가장 작은 저장 단위 | 한 블록에 여러 개의 행(Row) 저장 |
데이터 파일 | 실제 데이터 저장 | users01.dbf |
REDO 로그 파일 | 변경 사항 기록 | redo01.log, redo02.log |
제어 파일 | 데이터베이스 구조 정보 저장 | control01.ctl |