| この記事の要点 |
|---|
|
テーブルスペースとは
Oracle のテーブルスペースは論理的なデータ格納領域で、1 つ以上のデータファイル(OS の物理ファイル)から構成されます。テーブル・インデックス等のデータは特定のテーブルスペースに格納されます。
主要なテーブルスペース:
- SYSTEM: データディクショナリ
- SYSAUX: 補助システム情報
- TEMP: 一時表領域(ソート等)
- UNDOTBS1: UNDO データ
- USERS: ユーザデータ(デフォルト)
容量確認
① テーブルスペース全体のサイズ
SELECT
tablespace_name,
ROUND(SUM(bytes) / 1024 / 1024, 2) AS total_mb
FROM dba_data_files
GROUP BY tablespace_name
ORDER BY tablespace_name;
# 結果例
TABLESPACE_NAME TOTAL_MB
--------------- --------
SYSTEM 800
SYSAUX 600
USERS 1024
② 使用容量・空き容量
SELECT
df.tablespace_name,
ROUND(df.total_mb, 2) AS total_mb,
ROUND(df.total_mb - NVL(fs.free_mb, 0), 2) AS used_mb,
ROUND(NVL(fs.free_mb, 0), 2) AS free_mb,
ROUND((df.total_mb - NVL(fs.free_mb, 0)) / df.total_mb * 100, 2) AS used_pct
FROM
(SELECT tablespace_name, SUM(bytes)/1024/1024 AS total_mb
FROM dba_data_files GROUP BY tablespace_name) df
LEFT JOIN
(SELECT tablespace_name, SUM(bytes)/1024/1024 AS free_mb
FROM dba_free_space GROUP BY tablespace_name) fs
ON df.tablespace_name = fs.tablespace_name
ORDER BY used_pct DESC;
# 結果例
TABLESPACE_NAME TOTAL_MB USED_MB FREE_MB USED_PCT
--------------- -------- ------- ------- --------
USERS 1024 950 74 92.77 ← 危険
SYSTEM 800 720 80 90.00
SYSAUX 600 400 200 66.67
③ データファイル個別の情報
SELECT
tablespace_name,
file_name,
ROUND(bytes / 1024 / 1024, 2) AS size_mb,
autoextensible AS auto_ext,
ROUND(maxbytes / 1024 / 1024, 2) AS max_mb,
ROUND(increment_by * (SELECT block_size FROM dba_tablespaces WHERE tablespace_name = ddf.tablespace_name) / 1024 / 1024, 2) AS increment_mb
FROM dba_data_files ddf
ORDER BY tablespace_name;
④ 一時表領域・UNDO 表領域
-- 一時表領域
SELECT
tablespace_name,
ROUND(SUM(bytes_used)/1024/1024, 2) AS used_mb,
ROUND(SUM(bytes_free)/1024/1024, 2) AS free_mb
FROM v$temp_space_header
GROUP BY tablespace_name;
-- UNDO 表領域
SELECT
tablespace_name,
ROUND(SUM(bytes)/1024/1024, 2) AS total_mb
FROM dba_data_files
WHERE tablespace_name IN (SELECT value FROM v$parameter WHERE name = 'undo_tablespace');
容量拡張
方法 1: 既存データファイルを RESIZE
-- データファイルのサイズを 2GB に拡大
ALTER DATABASE DATAFILE '/u01/oradata/users01.dbf' RESIZE 2G;
-- 1GB → 5GB
ALTER DATABASE DATAFILE '/u01/oradata/users01.dbf' RESIZE 5120M;
-- 縮小も可(空き領域がある場合のみ)
ALTER DATABASE DATAFILE '/u01/oradata/users01.dbf' RESIZE 500M;
方法 2: データファイル追加
-- 既存テーブルスペースにデータファイルを追加
ALTER TABLESPACE users
ADD DATAFILE '/u01/oradata/users02.dbf' SIZE 2G;
-- 自動拡張も同時に設定
ALTER TABLESPACE users
ADD DATAFILE '/u01/oradata/users02.dbf'
SIZE 2G AUTOEXTEND ON NEXT 100M MAXSIZE 10G;
-- 確認
SELECT file_name, bytes/1024/1024 AS size_mb
FROM dba_data_files WHERE tablespace_name = 'USERS';
方法 3: 自動拡張を有効化
-- 既存ファイルの自動拡張を ON
ALTER DATABASE DATAFILE '/u01/oradata/users01.dbf'
AUTOEXTEND ON
NEXT 100M -- 100MB ずつ拡張
MAXSIZE 10G; -- 10GB が上限 (UNLIMITED も可)
-- UNLIMITED の場合
ALTER DATABASE DATAFILE '/u01/oradata/users01.dbf'
AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
-- 自動拡張を OFF
ALTER DATABASE DATAFILE '/u01/oradata/users01.dbf' AUTOEXTEND OFF;
方法 4: BIGFILE テーブルスペース(単一巨大ファイル)
-- BIGFILE 形式(1 つのデータファイルが最大 128TB)
CREATE BIGFILE TABLESPACE huge_data
DATAFILE '/u01/oradata/huge_data.dbf' SIZE 100G
AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED;
一時表領域の拡張
-- 一時データファイル追加
ALTER TABLESPACE temp
ADD TEMPFILE '/u01/oradata/temp02.dbf'
SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 10G;
-- 既存一時ファイルのサイズ変更
ALTER DATABASE TEMPFILE '/u01/oradata/temp01.dbf' RESIZE 5G;
UNDO 表領域の拡張
-- UNDO データファイル追加
ALTER TABLESPACE undotbs1
ADD DATAFILE '/u01/oradata/undotbs02.dbf'
SIZE 2G AUTOEXTEND ON NEXT 100M MAXSIZE 5G;
新規テーブルスペース作成
-- 通常 (SMALLFILE) テーブルスペース
CREATE TABLESPACE app_data
DATAFILE '/u01/oradata/app_data01.dbf' SIZE 1G
AUTOEXTEND ON NEXT 100M MAXSIZE 10G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;
-- BIGFILE
CREATE BIGFILE TABLESPACE app_huge
DATAFILE '/u01/oradata/app_huge.dbf' SIZE 10G
AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED;
テーブルスペースの監視(運用向け)
-- 使用率 80% 超のテーブルスペースを抽出(アラート対象)
SELECT
df.tablespace_name,
ROUND((df.total_mb - NVL(fs.free_mb, 0)) / df.total_mb * 100, 2) AS used_pct
FROM
(SELECT tablespace_name, SUM(bytes)/1024/1024 AS total_mb
FROM dba_data_files GROUP BY tablespace_name) df
LEFT JOIN
(SELECT tablespace_name, SUM(bytes)/1024/1024 AS free_mb
FROM dba_free_space GROUP BY tablespace_name) fs
ON df.tablespace_name = fs.tablespace_name
WHERE (df.total_mb - NVL(fs.free_mb, 0)) / df.total_mb * 100 > 80
ORDER BY used_pct DESC;
注意点
- 事前のバックアップ: データファイル変更前は必ずバックアップ
- RESIZE は一括: ファイル拡張中は短時間のロックあり、本番では計画停止
- 自動拡張の落とし穴: MAXSIZE UNLIMITED にすると気付かぬ間にディスクフル
- OS のディスク容量: テーブルスペース拡張前に
df -hで OS 側を確認 - SYSTEM 表領域はあまり拡張しない: 通常 800MB 程度で足りる、肥大化するのはユーザデータが入り込んでいるサイン
- 権限: 拡張操作は
SYSDBAやALTER TABLESPACE権限が必要
関連記事
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38