Oracle Data Block 개념
Oracle의 Storage는 아래그림처럼 Logical/Physical로 구분됩니다.
오늘은 Logical Storage 개념 중 제일 하위 개념인 Oracle data block에 대해 알아보겠습니다.
Oralce Database는 Oracle block이라고 불리는 Data block 단위로 Data file의 Logical Storage 공간을 관리합니다. Data block은 Database I/O의 최소 단위입니다.
이러한 Block의 size는 DB_BLOCK_SIZE 파라미터를 통해 DB를 Create하는 시점에 설정할 수 있습니다. 모든 Tablespace(SYSTEM/SYSAUX포함)는 설정된 Block Size를 기본으로 생성됩니다. 이러한 Default Block size는 DB를 다시 생성해야만 변경이 가능하고, Tablespace 생성 시 다른 size의 block을 지정해줄 수 있습니다.
Data Block Format
아래 그림은 압축되지 않은 Data block의 형태를 나타냅니다.
- Block header
Disk address, segment type 등 Block에 대한 일반적인 정보 포함합니다.
Block을 Update하는 모든 Transaction은 Transaction Entry가 필요합니다. 이러한 Transaction Entry를 위해 Block header에 공간을 reserve합니다.
Header 공간이 고갈되었을 때는 Free 공간에서도 Transaction Entry를 가지고 있을 수 있습니다.
- Table directory
이 디렉토리에는 이 Block에 row가 저장된 테이블에 대한 메타데이터를 포함합니다.
- Row directory
이 디렉토리는 Block의 Data부분에 있는 rows의 location을 설명합니다. Database는 Block의 하단 아무 곳에나 row를 배치할 수 있습니다. Row directory entry에는 Data block의 row의 location에 대한 pointer가 포함됩니다. Block 내에서 row를 이동하면 Database는 row directory entry를 업데이트하여 pointer를 수정합니다. 이때 rowid는 변하지 않습니다.
row directory에 공간을 할당한 후 row가 delete되어도 Database는 이 공간을 회수 하지 않습니다. 이 공간은 session이 Block에 새 row를 insert할 때만 재사용합니다.
- Row Format
Data Block에 Row Data에 각 Row는 아래 그림처럼 Row Header와 Column Data로 구성되어있습니다.
Row Header는 블록에 저장된 Row piece를 관리하고, Column Data 부분에 row의 실제 Data를 저장합니다.
이상 Oracle Data Block에 대한 간단한 소개는 끝마쳤습니다. Data Block에 대한 공간관리 기법은 다음에 소개하도록 하겠습니다.
참조:
Database Concepts
This chapter describes the nature of and relationships among logical storage structures. These structures are created and recognized by Oracle Database and are not known to the operating system.
docs.oracle.com