✅ 【基本構造】
-
データベースオブジェクト(例:テーブルやインデックス)を作成すると、セグメント(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 / NOLOGGING | DML操作をREDOログに記録するかどうか(Permanentのみ適用) |
BIGFILE / SMALLFILE | 1ファイル構成にするか、複数ファイル構成にするか |
🆚 BIGFILE vs SMALLFILE
比較項目 | BIGFILE | SMALLFILE |
---|---|---|
ファイル数 | 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の作成方法
-
CREATE TABLESPACE
で名前を指定。 -
DATAFILE
句でファイルパスを指定。 -
SIZE
でサイズを指定(この例では1MB。テスト目的で小さく設定)。
⚙ デフォルトTablespaceと明示的指定
-
テーブル作成時、指定がない場合は「ユーザーのデフォルトTablespace」に格納されます。
-
TABLESPACE
句で格納先を明示的に指定可能。
💥 容量不足エラーとその対処
-
テスト用に1MBのTablespaceを使って、1万行のデータを挿入。
-
さらに1万行挿入しようとすると 「容量不足エラー」 発生。
-
解決策:
♻ 自動拡張設定(Autoextend)
-
AUTOEXTEND ON NEXT 10M
: 空きがなくなるたびに10MBずつ拡張。 -
MAXSIZE 2G
: 最大サイズは2GB。無制限にしたいならUNLIMITED
。
🗂 bigfile vs smallfile Tablespace
-
BIGFILE
テーブルスペースはデータファイルが1つだけ。 -
SMALLFILE
は最大1022個のファイルを持てる。 -
DBA_TABLESPACES
ビューのBIGFILE
列で判別可能。
🔐 暗号化されたTablespaceの作成と確認
-
CREATE TABLESPACE
にENCRYPTION
句を追加すると、暗号化された表領域を作成できる。 -
クラウド環境では
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つの方法で表領域の容量を増やせます:
-
データファイルを追加する(※ただし smallfile tablespace のみ)
-
既存のデータファイルのサイズを変更する(増減可能)
-
🔒 bigfile tablespace には複数のデータファイルは追加できません。
✏️ データファイルの変更操作
-
既存のデータファイルのサイズを変更(拡張/縮小):
-
表領域に新たなデータファイルを追加(smallfileの場合):
-
自動拡張を有効にする:
🔄 表領域の状態変更
-
デフォルト状態:
READ WRITE
(読み書き可能) -
読み取り専用にする:
→ 新規作成・更新・削除不可、読み取りのみ可能。
-
再び読み書き可能に戻す:
📴 オフライン操作
-
表領域をオフラインにすると、他のユーザーはその表領域にアクセス不可。
-
オフライン操作のオプション:
-
NORMAL
(通常)※推奨-
エラーがなければ安全にオフライン。チェックポイントも実行。
-
-
TEMPORARY
(一時的)-
データファイルにエラーがあってもオフラインにする。リカバリが必要になる。
-
-
IMMEDIATE
(即時)-
チェックポイントなしで即座にオフライン。高度な状況でのみ使用すべき。
-
-
-
オンラインに戻すには:
📁 データファイルの移動手順(フォルダ変更など)
-
表領域をオフラインにする:
-
OSレベルでファイルを新しい場所へ移動。
-
Oracleに新しいパスを伝える:
-
表領域を再度オンラインにする:
✅ Oracle Managed Files(OMF)
🛠️ Oracle Managed Files(OMF)の特徴
-
データベースが自動的にファイルの作成・削除・命名を管理。
-
管理者はファイルシステム上のディレクトリだけを指定すればよい。
-
たとえば、表領域作成時に
DATAFILE
句を省略可能。
🧷 OMFを有効にするには
-
初期化パラメータを設定:
-
DB_CREATE_FILE_DEST
:データファイルや一時ファイルの格納先 -
DB_RECOVERY_FILE_DEST
:リカバリファイル用のディレクトリ
-
-
設定例:
💡 OMF利用時のメリット
-
CREATE TABLESPACE
のコマンドがシンプルに:→ ファイル名やパスを指定せずに表領域が作成される。
-
Oracleが**一意のファイル名(OMF形式)**を自動生成。
-
ファイルの削除や再利用も自動的に行われる。
⚠️ 注意点
-
OMFファイルは絶対にリネームしてはいけない!
-
名前でファイルを識別しており、リネームすると管理対象外になる。
-
🧪 OMFを使った検証例
-
表領域を作成(PDB内でも同様):
-
データファイルの確認:
-
自動生成されたパスに プラガブルデータベース(PDB)のGUID(グローバル一意識別子) が含まれる。
-
-
GUIDの確認方法: