Oracle 表領域のローカル管理の作り方と選び方

Oracle Master Silver

導入
oracle 19cで表領域をローカル管理で作ると、エクステント管理が自動化され運用が安定します。本稿は「AUTOALLOCATE と UNIFORM のどちらを選ぶ?」「ASSM を付ける?」を初心者〜中級向けに、手順と実行例で整理します。


表領域についてはコチラ。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


結論・最短手順(やることリスト)

  1. 目的(雑多なワークロードか、厳密制御が必要か)を決める
  2. 永続表領域を作成
    • ざっくり任せる → EXTENT MANAGEMENT LOCAL AUTOALLOCATE(推奨) docs.oracle.com
    • 均一サイズで厳密制御 → ... LOCAL UNIFORM SIZE 1M など docs.oracle.com
  3. 可能なら ASSM を付与 → SEGMENT SPACE MANAGEMENT AUTO(後から変更不可) docs.oracle.com
  4. 一時表領域は UNIFORM(例: 1M) で作る(AUTOALLOCATEは不可) docs.oracle.com+1
  5. 利用ユーザーを作成し、既定表領域/クォータを割当てて動作確認

背景と基礎

「ローカル管理」とは?

各データファイル内のビットマップでエクステント(領域の割当単位)を管理する方式。ディクショナリ依存が減り、割当/解放が高速・並行に行えます。 docs.oracle.com

主な利点(要点)

  • 領域操作が高速で同時実行に強い/辞書表の依存が低い
  • AUTOALLOCATE を選べば適切な拡張サイズをDBが自動選択(管理が簡素)
  • 未使用領域の結合操作が不要
  • 一時表領域はローカル管理によりUNDO/REDOを生成せず動作(読み取り専用スタンバイにも有利) docs.oracle.com

AUTOALLOCATE と UNIFORM の考え方(どっちを選ぶ?)

┌──── 雑多なサイズのオブジェクトが混在 ────┐
│   AUTOALLOCATE(既定):DBが拡張サイズを自動最適化 │
│   ・運用が容易(微小な領域ロスは許容)             │
└──────────────────────────┘
┌──── きっちりサイズを決めて使いたい ──────┐
│   UNIFORM SIZE <N>:全エクステントを同一サイズ       │
│   ・未使用領域を厳密管理・見積りが容易               │
└──────────────────────────┘

AUTOALLOCATE は最小64KB相当から始まり(ブロックサイズに依存)、UNIFORM を省略すると既定は 1MB。用途に応じて使い分けます。 docs.oracle.com

セグメント空き領域管理(ASSM)

SEGMENT SPACE MANAGEMENT AUTO を付けると、ビットマップで行挿入/削除後の空きブロックを自己管理(MSSMのフリーリストより一般に効率的)。作成後は変更できませんSYSTEM 表領域には指定不可。 docs.oracle.com+1


手順・実装(非CDB/19c、Linux)

前提

  • OS: Oracle Linux 相当
  • DB: Oracle Database 19c(非CDB)
  • 権限: SYSDBA
  • ファイル配置例: /u01/app/oracle/oradata/ORCL/
  • 影響/戻し方: 表領域作成は既存オブジェクトへ影響なし。不要なら DROP TABLESPACE ... INCLUDING CONTENTS AND DATAFILES で削除可能(誤削除注意・事前にバックアップ推奨)。

1) 永続表領域の作成(AUTOALLOCATE か UNIFORM を選択)

AUTOALLOCATE(推奨・汎用) の例:

エクステントサイズはDBが自動決定します。

CREATE TABLESPACE ts_app
  DATAFILE '/u01/app/oracle/oradata/ORCL/ts_app01.dbf' SIZE 200M
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE
  SEGMENT SPACE MANAGEMENT AUTO;
  • ポイント:管理が簡単、混在ワークロードに向く。 docs.oracle.com

UNIFORM(厳密制御) の例:

全エクステントを1MBに固定します。

CREATE TABLESPACE ts_app_u1m
  DATAFILE '/u01/app/oracle/oradata/ORCL/ts_app_u1m01.dbf' SIZE 512M
  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
  SEGMENT SPACE MANAGEMENT AUTO;
  • ポイント:見積りが容易、細かい断片化を避けたい運用に。 docs.oracle.com

補足: EXTENT MANAGEMENT LOCAL を明示すると、DEFAULT STORAGE/MINIMUM EXTENT等の旧来パラメータは無視/共存不可な条件あり。詳細はSQLリファレンス参照。 docs.oracle.com

2) 一時表領域の作成(UNIFORM 推奨)

一時表領域では AUTOALLOCATE は指定不可。UNIFORM で 1MB を推奨。

CREATE TEMPORARY TABLESPACE temp1m
  TEMPFILE '/u01/app/oracle/oradata/ORCL/temp1m01.dbf' SIZE 4G
  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
  • 理由:一時表領域は UNIFORM 1MB 推奨(パフォーマンス/運用安定性)。 docs.oracle.com+1

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

3) 既定一時表領域/ユーザーの作成と割当て

まず一時表領域をデフォルトに設定します。

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp1m;

業務用ユーザーを作成し、既定表領域・クォータ・必要権限を付与します(パスワードに @ は使わない)。

-- ユーザー作成
CREATE USER ts_demo IDENTIFIED BY "DemoPass1!";
-- 既定表領域と一時表領域
ALTER USER ts_demo DEFAULT TABLESPACE ts_app TEMPORARY TABLESPACE temp1m;
-- クォータ(必要量に合わせて調整)
ALTER USER ts_demo QUOTA 200M ON ts_app;
-- 最小限の権限付与
GRANT CREATE SESSION, CREATE TABLE TO ts_demo;
  • 意図:DEFAULT TABLESPACE で保存先を明示、QUOTA で使用可能容量を制御。

4) 動作確認(表の作成と拡張を体験)

サンプル表を作成し、データ量を増やして拡張挙動を確認します。

CONN ts_demo/"DemoPass1!";
CREATE TABLE t_bulk (id NUMBER, pad CHAR(1000));

-- 10万行挿入(サイズは環境により要調整)
BEGIN
  FOR i IN 1..100000 LOOP
    INSERT INTO t_bulk VALUES (i, RPAD('x',1000,'x'));
    IF MOD(i,1000)=0 THEN COMMIT; END IF;
  END LOOP;
END;
/
  • 結果の見方:USER_SEGMENTSBYTES 増分でエクステント拡張を確認。AUTOALLOCATE は段階的にサイズが変わるのが特徴、UNIFORM は一定ピッチで増える。 docs.oracle.com

5) 監視・可視化クエリ(コピペ可)

表領域のモードと割当方式(AUTOALLOCATE/UNIFORM、ASSM)を一覧します。

COL tablespace_name FOR a20
COL extent_management FOR a10
COL allocation_type   FOR a12
COL segment_space_management FOR a6
SELECT tablespace_name, extent_management, allocation_type, segment_space_management
  FROM dba_tablespaces
  ORDER BY tablespace_name;

データ/一時ファイルのサイズと自動拡張を確認します。

COL file_name FOR a60
SELECT file_name, tablespace_name, bytes/1024/1024 MB, autoextensible, maxbytes/1024/1024 MAX_MB
  FROM dba_data_files
  ORDER BY tablespace_name, file_name;

SELECT file_name, tablespace_name, bytes/1024/1024 MB, autoextensible, maxbytes/1024/1024 MAX_MB
  FROM dba_temp_files
  ORDER BY tablespace_name, file_name;

セグメントの使用量を確認します。

COL segment_name FOR a30
SELECT segment_name, segment_type, tablespace_name, bytes/1024/1024 MB
  FROM user_segments
  ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;

トラブルシューティング(参照系→対処の順)

症状(代表ORA)主な原因まずやる確認(参照系)代表的対処(変更系・自己責任)
ORA-01658: INITIAL extent 作成不可連続した空き領域不足DBA_DATA_FILESAUTOEXTENSIBLE/MAXBYTES、空き領域断片データファイルを追加/拡張、UNIFORM ならサイズ見直し docs.oracle.com
ORA-01659: MINEXTENTS を超えて割当不可初期/次エクステント見積りと空きの不一致同上+オブジェクトの MINEXTENTS/NEXTデータファイル追加/拡張、MINEXTENTS/NEXT の縮小・再作成を検討 docs.oracle.com
ORA-03206: AUTOEXTEND の MAXSIZE が上限超えブロックサイズごとの上限超過ブロックサイズ、設定した MAXSIZEMAXSIZE を許容範囲に修正(例:32GB境界の±1MBなど) deveshdba
ASSM を後から変えたいモード変更不可DBA_TABLESPACES.segment_space_management新規表領域を作り直し、オブジェクト移行(ALTER TABLE ... MOVE 等) docs.oracle.com
一時表領域のAUTOALLOCATEを使いたい一時には指定不可SQLリファレンスUNIFORMで作り直し(例:1MB) docs.oracle.com

運用・監視・セキュリティ上の注意

  • 容量管理AUTOEXTEND ON MAXSIZE を必ず設定し、監視でしきい値を超えたら通知。
  • 既定表領域/クォータ:アプリ用ユーザーはアプリ用表領域+必要クォータのみを付与(誤格納/肥大化を防止)。
  • ASSM の一貫性:同一用途の表領域でモードを混在させない。
  • 一時表領域の監視:使用ピークを確認し、UNIFORM 1MB+適切なファイル数を維持。 docs.oracle.com
  • 戻し方:作成誤りは 新規作成 → オブジェクト移行 → 旧削除 が安全(ASSMやUNIFORMサイズは後から変更不可のため)。

よくある質問(FAQ)

Q1. 既存表領域の ASSM を後から AUTO にできますか?
A. できません。表領域作成時の指定で固定されます。必要なら新しい表領域を作り、表/索引を移行します。 docs.oracle.com

Q2. 一時表領域に AUTOALLOCATE を使えますか?
A. 使えません。UNIFORM 指定で作成してください(1MBが推奨)。 docs.oracle.com+1

Q3. AUTOALLOCATE と UNIFORM、迷ったら?
A. 一般用途は AUTOALLOCATE。サイズを厳格に見積もりたい/見た目の規則性を優先する場合は UNIFORM を選びます。 docs.oracle.com

Q4. どのくらいの頻度で容量を点検する?
A. 変更頻度に依存しますが、少なくとも日次で DBA_DATA_FILES/DBA_TEMP_FILES の使用率と拡張余地を監視してください。


まとめ(要点)

  • 永続表領域は AUTOALLOCATE(推奨) または UNIFORM を選ぶ。用途で使い分け。 docs.oracle.com
  • 作成時に ASSM(AUTO) を付けると多くのケースで運用が楽(後から変更不可)。 docs.oracle.com
  • 一時表領域は UNIFORM(例:1MB) を選ぶ(AUTOALLOCATE不可)。 docs.oracle.com+1
  • 監視はデータ/一時ファイルのサイズと自動拡張をセットで。エラーは「容量」「連続空き」「上限」を切り分ける。

本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。



[参考]
Oracle Databaseデータベース管理者ガイド 19c

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

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