Oracle Tablespace の概要

 


✅ 【基本構造】

  • データベースオブジェクト(例:テーブルやインデックス)を作成すると、セグメント(segment) が生成され、これがデータを保持します。

  • セグメントは Tablespace(表領域) に格納されます。

  • テーブルは「列の集合」で構成され、そのデータは データベースブロック 内の 行ピース(row piece) として保存されます。


🧱【データベースブロックの構造】

項目説明
Block Headerセグメントの種別(テーブル or インデックス)、ブロックアドレス、トランザクション情報など
Row Data実際の行データ
Free Space新しい行の追加や、既存の行の更新時に使用される空き領域
※データがブロックに収まりきらない場合、行は複数のピースに分割されることがあります。

🗃️【Tablespaceの種類】

種類説明
Permanent Tablespace通常の永続的なオブジェクト(テーブルなど)を格納
Undo Tablespaceトランザクションの元に戻す情報を管理(=UNDO)
Temporary Tablespaceセッション中にのみ使用される一時的なオブジェクトを格納(例:ソート処理)

⚙️【作成時に指定できる主な属性】

属性説明
DATAFILE/TEMPFILE表領域に関連付けるファイル(最低1つ必要)
AUTOEXTEND容量不足時に自動でファイルサイズを拡張
ONLINE / OFFLINE作成後にすぐ使用可能にするかどうか(デフォルト:ONLINE)
BLOCKSIZEブロックサイズ(非標準サイズも指定可能)
LOGGING / NOLOGGINGDML操作をREDOログに記録するかどうか(Permanentのみ適用)
BIGFILE / SMALLFILE1ファイル構成にするか、複数ファイル構成にするか

🆚 BIGFILE vs SMALLFILE

比較項目BIGFILESMALLFILE
ファイル数1つのみ最大1022ファイル
ブロック数最大 約40億ブロック各ファイル最大 約400万ブロック
用途超大規模DB(ASMやLVMと併用)従来型DB

📏【Extent(エクステント)管理】

管理方法説明
Autoallocate(デフォルト)システムが自動で最適なエクステントサイズを決定
Uniformエクステントサイズを固定(例:1MB)
Temporary Tablespaceのデフォルト
管理方法「データ辞書」 or 「ローカル管理」
→ 最新バージョンでは「ローカル管理」が推奨

🧩【Segment Management(セグメント管理)】

  • Oracleがセグメント内の使用済み/未使用領域を追跡するかどうかを設定可能。


🗜️【データ圧縮】

  • テーブルやインデックスを作成時に、データ圧縮を有効化可能(任意)

  • メリット:ディスク使用量削減・バッファキャッシュ使用量の節約・クエリの高速化

  • デメリット:データ変更・ロード時にCPU負荷が増す


🛠️【実務でのポイント】

  • 通常は、オプションをすべて指定せずデフォルトで作成すればよい

  • Oracleは自動で「ローカル管理テーブルスペース(推奨)」として作成してくれる

  • UndoやTemporary用には別途専用のテーブルスペースを用意するのが一般的


✅ Permanent Tablespace の作成と運用

🧱 基本事項

  • このレッスンでは Permanent(永続的な)Tablespace を作成する方法を学びます。

  • デフォルト設定では smallfile tablespace が作成されます。

    • bigfile tablespace を作るには明示的に BIGFILE を指定する必要があります。


🛠 Tablespaceの作成方法

sql
CREATE TABLESPACE ts_name
DATAFILE '/path/to/datafile.dbf'
SIZE 1M;
  • CREATE TABLESPACE で名前を指定。

  • DATAFILE 句でファイルパスを指定。

  • SIZE でサイズを指定(この例では1MB。テスト目的で小さく設定)。


⚙ デフォルトTablespaceと明示的指定

  • テーブル作成時、指定がない場合は「ユーザーのデフォルトTablespace」に格納されます。

  • TABLESPACE 句で格納先を明示的に指定可能。


💥 容量不足エラーとその対処

  • テスト用に1MBのTablespaceを使って、1万行のデータを挿入。

  • さらに1万行挿入しようとすると 「容量不足エラー」 発生。

  • 解決策:

    sql
    ALTER DATABASE DATAFILE '/path/to/datafile.dbf' RESIZE 10M;

♻ 自動拡張設定(Autoextend)

sql
CREATE TABLESPACE ts_name
DATAFILE '/path/to/file.dbf'
SIZE 10M
AUTOEXTEND ON NEXT 10M MAXSIZE 2G;
  • AUTOEXTEND ON NEXT 10M: 空きがなくなるたびに10MBずつ拡張。

  • MAXSIZE 2G: 最大サイズは2GB。無制限にしたいなら UNLIMITED


🗂 bigfile vs smallfile Tablespace

  • BIGFILE テーブルスペースはデータファイルが1つだけ。

  • SMALLFILE は最大1022個のファイルを持てる。

  • DBA_TABLESPACES ビューの BIGFILE 列で判別可能。


🔐 暗号化されたTablespaceの作成と確認

  • CREATE TABLESPACEENCRYPTION 句を追加すると、暗号化された表領域を作成できる。

  • クラウド環境では ENCRYPT_NEW_TABLESPACES = CLOUD_ONLY により、デフォルトで暗号化される。

  • 永続的に暗号化を有効化したい場合は ENCRYPT_NEW_TABLESPACES = ALWAYS に変更。


🔎 情報の確認方法(各種ビュー)

ビュー名説明
DBA_TABLESPACES全ての表領域の属性(サイズ、種類、暗号化など)
DBA_DATA_FILES / V$DATAFILE各表領域のデータファイルの場所やサイズ
DBA_TABLESPACE_USAGE_METRICS表領域ごとの使用済・空き容量
DBA_ENCRYPTED_TABLESPACES暗号化された表領域一覧(名前は含まれない → TABLESPACE_ID で結合が必要)
ALL_TABLESどのテーブルがどの表領域に属しているか

💡 実務でのヒント

  • 表領域が満杯にならないように、AUTOEXTEND の設定は非常に有用。

  • 暗号化は規制対応(GDPR, HIPAA など)にも役立つ。

  • 表領域情報を把握するには各種ビューを活用し、DESC コマンドでカラム確認を忘れずに。


✅ Tablespaceの拡張・管理・オンライン/オフライン操作

📦 表領域の容量を増やす方法

  • 2つの方法で表領域の容量を増やせます:

    1. データファイルを追加する(※ただし smallfile tablespace のみ)

    2. 既存のデータファイルのサイズを変更する(増減可能)

🔒 bigfile tablespace には複数のデータファイルは追加できません。


✏️ データファイルの変更操作

  • 既存のデータファイルのサイズを変更(拡張/縮小):

    sql
    ALTER DATABASE DATAFILE '/path/to/file.dbf' RESIZE 500M;
  • 表領域に新たなデータファイルを追加(smallfileの場合):

    sql
    ALTER TABLESPACE users ADD DATAFILE '/new/file2.dbf' SIZE 100M;
  • 自動拡張を有効にする:

    sql
    ALTER DATABASE DATAFILE '/path/to/file.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE 2G;

🔄 表領域の状態変更

  • デフォルト状態READ WRITE(読み書き可能)

  • 読み取り専用にする

    sql
    ALTER TABLESPACE users READ ONLY;

    → 新規作成・更新・削除不可、読み取りのみ可能。

  • 再び読み書き可能に戻す

    sql
    ALTER TABLESPACE users READ WRITE;

📴 オフライン操作

  • 表領域をオフラインにすると、他のユーザーはその表領域にアクセス不可

  • オフライン操作のオプション:

    1. NORMAL(通常)※推奨

      • エラーがなければ安全にオフライン。チェックポイントも実行。

    2. TEMPORARY(一時的)

      • データファイルにエラーがあってもオフラインにする。リカバリが必要になる。

    3. IMMEDIATE(即時)

      • チェックポイントなしで即座にオフライン。高度な状況でのみ使用すべき。

sql
ALTER TABLESPACE users OFFLINE NORMAL; -- または TEMPORARY, IMMEDIATE
  • オンラインに戻すには:

    sql
    ALTER TABLESPACE users ONLINE;

📁 データファイルの移動手順(フォルダ変更など)

  1. 表領域をオフラインにする:

    sql
    ALTER TABLESPACE users OFFLINE NORMAL;
  2. OSレベルでファイルを新しい場所へ移動。

  3. Oracleに新しいパスを伝える:

    sql
    ALTER DATABASE RENAME FILE '/old/path/file.dbf' TO '/new/path/file.dbf';
  4. 表領域を再度オンラインにする:

    sql
    ALTER TABLESPACE users ONLINE;

✅ Oracle Managed Files(OMF)

🛠️ Oracle Managed Files(OMF)の特徴

  • データベースが自動的にファイルの作成・削除・命名を管理

  • 管理者はファイルシステム上のディレクトリだけを指定すればよい。

  • たとえば、表領域作成時に DATAFILE 句を省略可能。


🧷 OMFを有効にするには

  • 初期化パラメータを設定:

    • DB_CREATE_FILE_DEST:データファイルや一時ファイルの格納先

    • DB_RECOVERY_FILE_DEST:リカバリファイル用のディレクトリ

  • 設定例:

    sql
    ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata/DB1';

💡 OMF利用時のメリット

  • CREATE TABLESPACE のコマンドがシンプルに:

    sql
    CREATE TABLESPACE my_ts;

    → ファイル名やパスを指定せずに表領域が作成される。

  • Oracleが**一意のファイル名(OMF形式)**を自動生成。

  • ファイルの削除や再利用も自動的に行われる。


⚠️ 注意点

  • OMFファイルは絶対にリネームしてはいけない!

    • 名前でファイルを識別しており、リネームすると管理対象外になる。


🧪 OMFを使った検証例

  1. 表領域を作成(PDB内でも同様):

    sql
    CREATE TABLESPACE pdb1_ts;
  2. データファイルの確認:

    • 自動生成されたパスに プラガブルデータベース(PDB)のGUID(グローバル一意識別子) が含まれる。

  3. GUIDの確認方法:

    sql
    SELECT NAME, GUID FROM V$PDBS;