🎯 対象読者
- Oracle Database 初学者
- 表空間(Tablespace)の概念を理解したい方
- ユーザーと表空間の関係を知りたい方
- ORA-01653 / ORA-01950 エラーを解決したい方
🧩 Tablespace とは
Tablespace は、Oracle Database における 論理的なストレージ単位 です。
構造:
Database
│
├─ Tablespace (論理)
│ │
│ └─ Datafile (物理ファイル)
│
└─ Tablespace
つまり:
Tablespace = Datafile の論理グループ
📦 Tablespace の役割
Tablespace は以下を保存します:
- テーブル
- インデックス
- ユーザーデータ
- 一時データ
- UNDO データ
🧱 主要な Tablespace 種類
| Tablespace | 用途 |
|---|---|
| SYSTEM | データベース管理情報 |
| SYSAUX | SYSTEM の補助 |
| USERS | 一般ユーザー用 |
| TEMP | 一時データ |
| UNDOTBS1 | UNDO データ |
確認:
SELECT tablespace_name FROM dba_tablespaces;
📁 Datafile とは
Tablespace は物理ファイル(Datafile)で構成されます。
確認:
SELECT file_name, tablespace_name
FROM dba_data_files;
例:
/u01/app/oracle/oradata/ORCL/users01.dbf
🚀 Tablespace 作成
基本構文:
CREATE TABLESPACE myspace
DATAFILE '/u01/app/oracle/oradata/ORCL/myspace01.dbf'
SIZE 100M;
📈 自動拡張(AUTOEXTEND)付き作成(推奨)
CREATE TABLESPACE myspace
DATAFILE '/u01/app/oracle/oradata/ORCL/myspace01.dbf'
SIZE 100M
AUTOEXTEND ON
NEXT 10M
MAXSIZE UNLIMITED;
意味:
| パラメータ | 説明 |
|---|---|
| SIZE | 初期サイズ |
| AUTOEXTEND ON | 自動拡張 |
| NEXT | 拡張サイズ |
| MAXSIZE | 最大サイズ |
👤 ユーザーに Tablespace を割り当て
CREATE USER devuser
IDENTIFIED BY devpass
DEFAULT TABLESPACE myspace
TEMPORARY TABLESPACE temp;
🔐 QUOTA(容量制限)設定
ユーザーは QUOTA がないと表を作成できません。
ALTER USER devuser QUOTA UNLIMITED ON myspace;
または:
ALTER USER devuser QUOTA 500M ON myspace;
🧪 Tablespace 使用量確認
SELECT
tablespace_name,
SUM(bytes)/1024/1024 AS MB
FROM dba_data_files
GROUP BY tablespace_name;
📊 空き容量確認
SELECT
tablespace_name,
SUM(bytes)/1024/1024 AS FREE_MB
FROM dba_free_space
GROUP BY tablespace_name;
🔎 Tablespace 詳細確認
SELECT
tablespace_name,
status,
contents
FROM dba_tablespaces;
➕ Datafile 追加
Tablespace がいっぱいになった場合:
ALTER TABLESPACE myspace
ADD DATAFILE '/u01/app/oracle/oradata/ORCL/myspace02.dbf'
SIZE 100M;
📈 Datafile 拡張
ALTER DATABASE
DATAFILE '/u01/app/oracle/oradata/ORCL/myspace01.dbf'
RESIZE 500M;
🧯 よくあるエラー
ORA-01653: unable to extend table
原因:
Tablespace 容量不足
解決:
ALTER TABLESPACE myspace
ADD DATAFILE '/u01/app/oracle/oradata/ORCL/myspace02.dbf'
SIZE 100M;
または:
ALTER DATABASE DATAFILE 'myspace01.dbf' RESIZE 500M;
ORA-01950: no privileges on tablespace
原因:
QUOTA 未設定
解決:
ALTER USER devuser QUOTA UNLIMITED ON myspace;
🧹 Tablespace 削除
DROP TABLESPACE myspace INCLUDING CONTENTS AND DATAFILES;
意味:
| オプション | 説明 |
|---|---|
| INCLUDING CONTENTS | オブジェクト削除 |
| AND DATAFILES | Datafile も削除 |
🏢 実務ベストプラクティス
✅ 推奨
CREATE TABLESPACE devspace
DATAFILE '/u01/app/oracle/oradata/ORCL/devspace01.dbf'
SIZE 100M
AUTOEXTEND ON
NEXT 50M
MAXSIZE UNLIMITED;
理由:
- 容量不足防止
- 運用安定
❌ 非推奨
SYSTEM Tablespace を使用
理由:
- システム破損リスク
🧠 Tablespace とユーザー関係まとめ
Tablespace
│
▼
User
│
▼
Table
│
▼
Datafile
🔎 管理用おすすめSQLまとめ
Tablespace 一覧:
SELECT tablespace_name FROM dba_tablespaces;
Datafile 一覧:
SELECT file_name FROM dba_data_files;
空き容量:
SELECT tablespace_name, SUM(bytes)/1024/1024 MB
FROM dba_free_space
GROUP BY tablespace_name;
✅ まとめ
よく使うコマンド:
Tablespace 作成:
CREATE TABLESPACE myspace
DATAFILE 'myspace01.dbf'
SIZE 100M
AUTOEXTEND ON;
QUOTA 設定:
ALTER USER devuser QUOTA UNLIMITED ON myspace;
容量拡張:
ALTER TABLESPACE myspace ADD DATAFILE 'myspace02.dbf' SIZE 100M;
削除:
DROP TABLESPACE myspace INCLUDING CONTENTS AND DATAFILES;
🎉 これでできること
- Tablespace 作成
- 容量管理
- Datafile 管理
- 容量不足エラー対応
- 実務レベルのストレージ管理
📚 対象DB
本記事は Oracle Database 19c / 21c / 23c に対応しています。