Oracleのエクステントとは?データ・ブロックとの関係と論理記憶域構造をわかりやすく解説

Oracle

Oracle Databaseの記憶域構造を学ぶと、「データ・ブロック」「エクステント」「セグメント」「表領域」という用語が出てきます。特にエクステントについては、「連続するデータ・ブロックの集まり」と覚えてよいのか迷いやすいポイントです。

Oracleの論理記憶域構造では、エクステントは特定の種類の情報を格納するために割り当てられる、論理的に連続したデータ・ブロックの集合として説明されます。つまり、単に無関係なブロックを集めたものではなく、セグメントへ一括して割り当てられる記憶域の単位です。

この記事では、Oracleのデータ・ブロック、エクステント、セグメント、表領域の関係を順番に整理し、「連続する」とは何を意味するのか、試験問題ではどのように覚えると間違いにくいのかまで具体例を交えて解説します。

Oracleのエクステントはデータ・ブロックの集合

Oracle Databaseにおけるエクステントは、複数のデータ・ブロックをまとめた論理記憶域の単位です。Oracleの公式ドキュメントでも、エクステントは特定の種類の情報を格納するために割り当てられた、論理的に連続したデータ・ブロックの集合として説明されています。

そのため、学習上は「データ・ブロックが集まるとエクステントになる」と理解して問題ありません。

ただし、さらに正確に覚えるなら、「エクステントはセグメントに対して一度に割り当てられる複数のデータ・ブロックの集合」と考えると、後続のセグメントとの関係も理解しやすくなります。

Oracleの論理記憶域構造は4段階で覚えると分かりやすい

Oracleの論理記憶域構造は、小さい単位から順に並べると理解しやすくなります。

単位 概要
データ・ブロック Oracleが論理的に扱う最小の記憶域単位
エクステント 複数の連続したデータ・ブロックの集合
セグメント 複数のエクステントから構成される記憶域
表領域 複数のセグメントを格納する論理的な領域

順番としては、データ・ブロック → エクステント → セグメント → 表領域です。

資格試験や研修では、この大小関係をそのまま問われることがあります。まずこの4階層を確実に覚えると、関連問題を判断しやすくなります。

データ・ブロックとは何か

データ・ブロックは、Oracle Databaseが論理的な記憶域として扱う基本単位です。表の行データや索引情報などは、最終的にはデータ・ブロックの中へ格納されます。

たとえばOracleのブロックサイズが8KBに設定されている環境では、Oracleは基本的に8KB単位のデータ・ブロックを基準として記憶域を管理します。

このデータ・ブロックが1個ずつ必要になるたびにばらばらに割り当てられるのではなく、複数個をまとめて確保する単位がエクステントです。

エクステントとは何か

エクステントは、あるセグメントへ割り当てられる複数のデータ・ブロックの集合です。

たとえば1つのエクステントが8個のデータ・ブロックで構成されているとします。ブロックサイズが8KBなら、そのエクステントの大きさは単純化すると64KBです。

8KB × 8ブロック = 64KB

表へデータを追加して現在のエクステントだけでは足りなくなると、Oracleはそのセグメントのために新しいエクステントを割り当てます。

「連続するデータ・ブロック」とはどういう意味か

エクステントの説明で重要なのが「連続」という言葉です。Oracleでは、一つのエクステント内に含まれるデータ・ブロックは、論理的に連続したブロックとして割り当てられます。

たとえばブロック番号100~107の8ブロックが一つのエクステントとして割り当てられる、と考えるとイメージしやすくなります。

一方、次に追加されるエクステントが必ずその直後の108番から始まるとは限りません。次のエクステントは別の場所へ割り当てられる可能性があります。

つまり、「一つのエクステント内部のブロックは連続しているが、一つのセグメントを構成する複数のエクステント同士まで連続している必要はない」と理解すると正確です。

セグメントは複数のエクステントから構成される

表や索引などのデータベースオブジェクトに対応して確保される論理記憶域がセグメントです。

たとえばある表へデータを格納するためのセグメントがあり、最初にエクステントAが割り当てられたとします。その領域が不足するとエクステントB、さらに不足するとエクステントCというように追加されていきます。

イメージすると次のような階層になります。

表領域
└─ 表セグメント
   ├─ エクステント1
   │  ├─ データ・ブロック
   │  ├─ データ・ブロック
   │  └─ データ・ブロック
   └─ エクステント2
      ├─ データ・ブロック
      ├─ データ・ブロック
      └─ データ・ブロック

この構造を頭に入れておくと、「エクステントとセグメントのどちらが大きいか」といった問題にも迷いにくくなります。

セグメントには表だけでなく索引などもある

セグメントという言葉を見ると表だけを想像しがちですが、Oracleには複数種類のセグメントがあります。

代表例として、表データを格納する表セグメント、索引データを格納する索引セグメント、UNDO情報に関係するUNDOセグメント、一時処理に利用される一時セグメントなどがあります。

それぞれのセグメントが必要に応じてエクステントを取得し、そのエクステントの中に複数のデータ・ブロックが存在するという基本構造は共通しています。

表領域とデータファイルは論理構造と物理構造の違い

Oracleを学ぶときにもう一つ混同しやすいのが、表領域とデータファイルです。

表領域はOracleから見た論理的な記憶域です。一方、データファイルはOS上に存在する物理的なファイルです。

つまり、データ・ブロック、エクステント、セグメント、表領域は論理記憶域の概念であり、データファイルは物理記憶域側の概念として整理できます。

資格試験では、「表領域は物理構造である」といった選択肢が誤りとして出ることがあるため、論理と物理を分けて覚えることが大切です。

簡単な具体例でエクステントの増え方を理解する

たとえばEMPLOYEEという表があり、その表用のセグメントに最初のエクステントとして8ブロックが割り当てられたとします。

最初はその8ブロックの空き領域を利用して行データが格納されます。データが増えて現在のエクステント内に十分な空き領域がなくなると、Oracleは新しいエクステントをそのセグメントへ追加します。

結果としてEMPLOYEE表のセグメントは、エクステント1、エクステント2、エクステント3というように成長していきます。

このため「エクステントは何のために存在するのか」と考えた場合、Oracleが記憶域をまとまった単位で割り当て、セグメントを拡張していくための単位だと考えると理解しやすくなります。

「エクステント=連続するブロックの集合」という覚え方で注意する点

試験勉強では「エクステント=連続するデータ・ブロックの集合」という覚え方でほぼ問題ありません。

ただし、「セグメント内のすべてのデータ・ブロックが物理的に一続きでなければならない」と誤解しないことが重要です。

一つのセグメントには複数のエクステントを割り当てられ、それぞれのエクステントは異なる位置に存在できます。連続性を考える単位は、基本的に個々のエクステント内部です。

Oracle資格試験ではどう覚えるとよいか

Oracle Database関連の試験では、論理記憶域の階層を問う問題が出ることがあります。その場合は次の対応を覚えておくと整理しやすくなります。

  • データ・ブロック:最小の論理I/O・記憶域単位
  • エクステント:連続した複数データ・ブロックの集合
  • セグメント:複数のエクステントの集合
  • 表領域:複数のセグメントを格納する論理記憶域

特に「エクステントは複数のセグメントから構成される」という記述があれば、大小関係が逆なので誤りです。

同様に、「セグメントは一つのエクステントしか持てない」という記述も誤りです。セグメントはデータ量の増加に応じて複数のエクステントを持つことができます。

データ・ブロックとOSブロックは同じものではない

Oracleのデータ・ブロックと、OSやファイルシステムが扱うブロックも区別する必要があります。

Oracleデータ・ブロックはOracle Databaseが論理的に利用する単位です。OSブロックはファイルシステム側の入出力単位であり、両者は同一概念ではありません。

Oracleデータ・ブロックは通常、OSブロックの整数倍になるよう設定されます。したがって「ブロック」という言葉だけで判断せず、「Oracleデータ・ブロックなのか、OSブロックなのか」を確認することが大切です。

ローカル管理表領域ではエクステント管理をOracleが行う

現在のOracle Databaseでは、一般にローカル管理表領域を利用します。ローカル管理表領域では、エクステントの割り当て状況を表領域自身のビットマップによって管理します。

エクステントサイズについても、Oracleが自動的に管理するAUTOALLOCATEや、一定サイズを利用するUNIFORMといった方式があります。

初学者の段階では詳細な管理方式をすべて覚える必要はありませんが、「エクステントはセグメントが成長するときに追加で割り当てられる記憶域単位」という理解を持っておくと、その後の表領域管理も理解しやすくなります。

混同しやすい用語を一覧で整理

用語 何の集合か・何を表すか
データ・ブロック Oracleの基本的な論理記憶域単位
エクステント 連続する複数のデータ・ブロック
セグメント 複数のエクステント
表領域 セグメントを格納する論理領域
データファイル 表領域を構成する物理ファイル

この表を上から下へ「小さいものから大きいもの」として覚えると、論理構造を整理しやすくなります。ただしデータファイルは論理階層そのものではなく、表領域に対応する物理構造である点には注意してください。

まとめ:エクステントは連続するデータ・ブロックの集合と考えてよい

Oracle Databaseの論理記憶域構造では、エクステントは論理的に連続する複数のデータ・ブロックの集合です。そのため、「連続するデータ・ブロックの集まりをエクステントと呼ぶ」という理解は基本的に正しいです。

さらに正確には、エクステントは特定のセグメントへまとめて割り当てられる記憶域単位です。そして複数のエクステントが集まってセグメントを構成し、セグメントは表領域の中に配置されます。

覚える順番はデータ・ブロック → エクステント → セグメント → 表領域です。この階層を押さえれば、Oracleの論理記憶域構造に関する多くの問題を整理して考えられるようになります。

また「連続している」という性質は、一つのエクステント内部についての説明です。複数のエクステントからなるセグメント全体が、一続きの場所に配置されなければならないという意味ではありません。この点まで理解しておくと、単なる暗記ではなくOracleの記憶域管理の仕組みとして理解できます。

コメント

タイトルとURLをコピーしました