Oracleデータベースの管理において、表領域(Tablespace)の状態や使用状況を把握することは不可欠です。本記事では、表領域に関する情報を取得するためのディクショナリビューと動的パフォーマンスビューを網羅的に解説します。基本的な使用方法から、トラブルシューティングやパフォーマンス監視の実践的な応用まで幅広く取り上げます。
1. 表領域の基礎知識
表領域は、Oracleデータベース内でデータを格納するための論理的な単位です。データファイルと密接に関連し、データベースの容量管理における中心的な役割を果たします。
1.1 表領域の種類と用途
表領域タイプ | 用途 |
---|---|
SYSTEM | データベースの基本メタデータを格納。必須表領域。 |
SYSAUX | SYSTEM表領域を補完する役割を持つ。追加ツールや統計情報が格納される。 |
UNDO | トランザクションのロールバックや整合性維持のために使用。 |
TEMP | 一時的な作業データ(ソートや集計操作)を格納。 |
ユーザー定義表領域 | アプリケーションデータやユーザー生成オブジェクトを格納。 |
2. ディクショナリビューによる表領域情報の取得
ディクショナリビューは、データベース構造やメタデータに関する詳細情報を提供します。
2.1 DBA_TABLESPACES
表領域全体の基本情報を取得します。以下のような質問に答えるのに役立ちます:
- 表領域の状態は?(
ONLINE
/OFFLINE
/READ ONLY
) - 表領域タイプは?(
PERMANENT
/TEMPORARY
/UNDO
)
使用例:表領域の基本情報を確認
SELECT TABLESPACE_NAME, STATUS, CONTENTS, BIGFILE
FROM DBA_TABLESPACES;
SQL> SELECT TABLESPACE_NAME, STATUS, CONTENTS, BIGFILE
2 FROM DBA_TABLESPACES;
TABLESPACE_NAME STATUS CONTENTS BIGFILE
-------------------- -------------------- -------------------- ---------
SYSTEM ONLINE PERMANENT NO
SYSAUX ONLINE PERMANENT NO
UNDOTBS1 ONLINE UNDO NO
TEMP ONLINE TEMPORARY NO
USERS ONLINE PERMANENT NO
TABLESPACE_NAME | STATUS | CONTENTS | BIGFILE |
---|---|---|---|
SYSTEM | ONLINE | PERMANENT | NO |
SYSAUX | ONLINE | PERMANENT | NO |
2.2 DBA_DATA_FILES
各表領域に関連付けられたデータファイルの情報を取得します。
使用例:表領域に割り当てられたデータファイルの情報
SELECT FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 AS SIZE_MB, STATUS
FROM DBA_DATA_FILES;
SQL> SELECT FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 AS SIZE_MB, STATUS
2 FROM DBA_DATA_FILES;
FILE_NAME TABLESPACE_NAME SIZE_MB STATUS
-------------------------------------------------- -------------------- ---------- --------------------
/u01/app/oracle/oradata/V19/users01.dbf USERS 5 AVAILABLE
/u01/app/oracle/oradata/V19/undotbs01.dbf UNDOTBS1 725 AVAILABLE
/u01/app/oracle/oradata/V19/system01.dbf SYSTEM 1170 AVAILABLE
/u01/app/oracle/oradata/V19/sysaux01.dbf SYSAUX 730 AVAILABLE
2.3 DBA_TEMP_FILES
TEMP表領域に割り当てられた一時ファイルの情報を取得します。
使用例:一時表領域のファイル情報
SELECT FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 AS SIZE_MB
FROM DBA_TEMP_FILES;
SQL> SELECT FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 AS SIZE_MB
2 FROM DBA_TEMP_FILES;
FILE_NAME TABLESPACE_NAME SIZE_MB
-------------------------------------------------- -------------------- ----------
/u01/app/oracle/oradata/V19/temp01.dbf TEMP 158
2.4 DBA_FREE_SPACE
表領域の空き領域を確認します。空き容量が少ない場合、拡張や不要データの削除が必要です。
使用例:空き容量の確認
SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS FREE_SPACE_MB
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME;
SQL> SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS FREE_SPACE_MB
2 FROM DBA_FREE_SPACE
3 GROUP BY TABLESPACE_NAME;
TABLESPACE_NAME FREE_SPACE_MB
-------------------- -------------
SYSTEM 7.1875
SYSAUX 37.625
USERS 2.3125
3. 動的パフォーマンスビューでのリアルタイム監視
動的パフォーマンスビューは、現在のインスタンスの状態をモニタリングするためのビューです。
3.1 V$TABLESPACE
現在のインスタンスで管理される表領域の情報を提供します。
使用例:表領域の状態を確認
SELECT TS#, NAME, BIGFILE, INCLUDED_IN_DATABASE_BACKUP
FROM V$TABLESPACE;
SQL> SELECT TS#, NAME, BIGFILE, INCLUDED_IN_DATABASE_BACKUP
2 FROM V$TABLESPACE;
TS# NAME BIGFILE INCLUDED_
---------- -------------------- --------- ---------
1 SYSAUX NO YES
0 SYSTEM NO YES
2 UNDOTBS1 NO YES
4 USERS NO YES
3 TEMP NO NO
3.2 V$DATAFILE
各データファイルの現在の状態やサイズを確認します。
使用例:データファイルの監視
SELECT FILE#, NAME, STATUS, BYTES/1024/1024 AS SIZE_MB
FROM V$DATAFILE;
SQL> SELECT FILE#, NAME, STATUS, BYTES/1024/1024 AS SIZE_MB
2 FROM V$DATAFILE;
FILE# NAME STATUS SIZE_MB
---------- -------------------------------------------------- ---------- ----------
1 /u01/app/oracle/oradata/V19/system01.dbf SYSTEM 1170
3 /u01/app/oracle/oradata/V19/sysaux01.dbf ONLINE 730
4 /u01/app/oracle/oradata/V19/undotbs01.dbf ONLINE 725
7 /u01/app/oracle/oradata/V19/users01.dbf ONLINE 5
3.3 V$TEMP_SPACE_HEADER
TEMP表領域の使用率を確認する動的ビューです。
使用例:一時表領域の使用状況を確認
SELECT TABLESPACE_NAME, SUM(BYTES_USED)/1024/1024 AS USED_MB, SUM(BYTES_FREE)/1024/1024 AS FREE_MB
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME;
SQL> SELECT TABLESPACE_NAME, SUM(BYTES_USED)/1024/1024 AS USED_MB, SUM(BYTES_FREE)/1024/1024 AS FREE_MB
2 FROM V$TEMP_SPACE_HEADER
3 GROUP BY TABLESPACE_NAME;
TABLESPACE_NAME USED_MB FREE_MB
-------------------- ---------- ----------
TEMP 158 0
4. 実践例:表領域の使用状況を分析する
以下のクエリでは、表領域ごとの総容量、使用容量、空き容量を計算します。
クエリ例:表領域の使用状況を可視化
SELECT
t.TABLESPACE_NAME,
ROUND(t.TOTAL_SPACE_MB, 2) AS TOTAL_SPACE_MB,
ROUND(NVL(f.FREE_SPACE_MB, 0), 2) AS FREE_SPACE_MB,
ROUND((t.TOTAL_SPACE_MB - NVL(f.FREE_SPACE_MB, 0)), 2) AS USED_SPACE_MB
FROM
(SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS TOTAL_SPACE_MB
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) t
LEFT JOIN
(SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS FREE_SPACE_MB
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) f
ON t.TABLESPACE_NAME = f.TABLESPACE_NAME;
SQL> SELECT
2 t.TABLESPACE_NAME,
3 ROUND(t.TOTAL_SPACE_MB, 2) AS TOTAL_SPACE_MB,
4 ROUND(NVL(f.FREE_SPACE_MB, 0), 2) AS FREE_SPACE_MB,
5 ROUND((t.TOTAL_SPACE_MB - NVL(f.FREE_SPACE_MB, 0)), 2) AS USED_SPACE_MB
6 FROM
7 (SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS TOTAL_SPACE_MB
8 FROM DBA_DATA_FILES
9 GROUP BY TABLESPACE_NAME) t
10 LEFT JOIN
11 (SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS FREE_SPACE_MB
12 FROM DBA_FREE_SPACE
13 GROUP BY TABLESPACE_NAME) f
14 ON t.TABLESPACE_NAME = f.TABLESPACE_NAME;
TABLESPACE_NAME TOTAL_SPACE_MB FREE_SPACE_MB USED_SPACE_MB
-------------------- -------------- ------------- -------------
SYSTEM 1170 7.19 1162.81
SYSAUX 730 37.63 692.38
USERS 5 2.31 2.69
UNDOTBS1 725 0 725
5. トラブルシューティングとベストプラクティス
5.1 表領域が満杯になった場合の対処法
- データファイルの自動拡張を確認
SELECT FILE_NAME, AUTOEXTENSIBLE, MAXBYTES/1024/1024 AS MAX_SIZE_MB FROM DBA_DATA_FILES;
- 空き容量が不足している場合、データファイルを追加
ALTER DATABASE DATAFILE '/path/to/datafile.dbf' RESIZE 1G;
5.2 TEMP表領域の不足
一時領域が不足すると、複雑なソートや集計が失敗します。
ALTER DATABASE TEMPFILE '/path/to/tempfile.dbf' RESIZE 1G;
6. ディクショナリビューと動的ビューの違い
項目 | ディクショナリビュー | 動的パフォーマンスビュー |
---|---|---|
情報源 | 永続的なデータ(メタデータ) | メモリ上のリアルタイム情報 |
更新タイミング | DDL操作後に反映 | 即時反映 |
用途 | 設定や構造の確認 | 現在の状況のモニタリングや問題診断 |
7. まとめ
本記事では、Oracleデータベースの表領域に関する情報を取得するためのディクショナリビューと動的パフォーマンスビューを解説しました。これらのビューを活用することで、表領域の管理やトラブルシューティングが効率化します。定期的なモニタリングを実施し、安定したデータベース運用を目指しましょう!
[参考]
Oracle Databaseデータベース管理者ガイド 19c
コメント