導入
oracle 19cで表領域をローカル管理で作ると、エクステント管理が自動化され運用が安定します。本稿は「AUTOALLOCATE と UNIFORM のどちらを選ぶ?」「ASSM を付ける?」を初心者〜中級向けに、手順と実行例で整理します。
表領域についてはコチラ。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
結論・最短手順(やることリスト)
- 目的(雑多なワークロードか、厳密制御が必要か)を決める
- 永続表領域を作成
- ざっくり任せる →
EXTENT MANAGEMENT LOCAL AUTOALLOCATE(推奨) docs.oracle.com - 均一サイズで厳密制御 →
... LOCAL UNIFORM SIZE 1Mなど docs.oracle.com
- ざっくり任せる →
- 可能なら ASSM を付与 →
SEGMENT SPACE MANAGEMENT AUTO(後から変更不可) docs.oracle.com - 一時表領域は UNIFORM(例: 1M) で作る(AUTOALLOCATEは不可) docs.oracle.com+1
- 利用ユーザーを作成し、既定表領域/クォータを割当てて動作確認
背景と基礎
「ローカル管理」とは?
各データファイル内のビットマップでエクステント(領域の割当単位)を管理する方式。ディクショナリ依存が減り、割当/解放が高速・並行に行えます。 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_SEGMENTSのBYTES増分でエクステント拡張を確認。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_FILES の AUTOEXTENSIBLE/MAXBYTES、空き領域断片 | データファイルを追加/拡張、UNIFORM ならサイズ見直し docs.oracle.com |
| ORA-01659: MINEXTENTS を超えて割当不可 | 初期/次エクステント見積りと空きの不一致 | 同上+オブジェクトの MINEXTENTS/NEXT | データファイル追加/拡張、MINEXTENTS/NEXT の縮小・再作成を検討 docs.oracle.com |
| ORA-03206: AUTOEXTEND の MAXSIZE が上限超え | ブロックサイズごとの上限超過 | ブロックサイズ、設定した MAXSIZE | MAXSIZE を許容範囲に修正(例: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専門のエージェントで非公開求人をチェックしてみませんか?




コメント