Oracleデータベースを正しく運用するためには、SYSTEM
表領域とSYSAUX
表領域の理解が不可欠です。これらはデータベースの「心臓」と「補助循環器」ともいえる存在で、どちらも欠かせません。本記事では、初心者向けの基礎解説から、トラブルシューティング、さらに効率的な運用方法まで網羅的に解説します。
リンク
リンク
リンク
1. SYSTEM表領域:データベースの「心臓」
1.1 SYSTEM表領域とは?
SYSTEM
表領域は、データベースが動作するための基本情報を格納する、最も重要な表領域です。この表領域には、データベースのシステム情報や基本的な操作に必要な情報が保存されています。
主な役割
- データディクショナリの格納
データベース内のすべてのオブジェクト(テーブル、索引、ユーザー、ロールなど)のメタデータを管理します。
例:DBA_TABLES
,DBA_USERS
,DBA_DATA_FILES
など。 - 基本的なPL/SQLパッケージの格納
Oracleの機能を利用するための重要なパッケージが保存されています。
例:DBMS_OUTPUT
,DBMS_STATS
,UTL_FILE
など。 - リカバリに必要な情報の保持
制御ファイルやREDOログファイルと密接に関連します。
よくある誤解
- 「SYSTEM表領域にユーザーデータを格納しても良いのでは?」
→ これは絶対に避けてください。SYSTEM表領域にアプリケーションのデータを格納すると、表領域が逼迫し、データベース全体が停止する恐れがあります。
2. SYSAUX表領域:データベースの「補助循環器」
2.1 SYSAUX表領域とは?
SYSAUX
表領域は、SYSTEM
表領域の負荷を軽減するための補助的な表領域です。Oracle Database 10g以降で導入され、データベースのさまざまなコンポーネントやオプション機能のデータを格納します。
主な役割
- AWR(Automatic Workload Repository)のデータ格納
パフォーマンスの自動監視とレポート生成に必要な情報を保持します。 - Enterprise Managerリポジトリ
データベース監視や管理に使用されるデータを格納します。 - その他のコンポーネントデータの格納
Oracle Spatial、Oracle Text、Job Schedulerなどのデータ。
SYSAUXが導入された理由
従来、SYSTEM
表領域に格納されていたデータの一部をSYSAUX
に移動させることで、SYSTEM
表領域の負荷を分散し、管理を簡素化しています。
3. SYSTEMとSYSAUXの比較表
以下は、SYSTEM
とSYSAUX
の主な違いを比較した表です。
項目 | SYSTEM表領域 | SYSAUX表領域 |
---|---|---|
役割 | データベースの基本機能を支える | 拡張機能や補助機能を支える |
格納内容 | データディクショナリ、基本PL/SQLパッケージ | AWR、Oracle Text、EMリポジトリなど |
依存関係 | データベースの基本運用に必須 | 特定の機能やオプションに依存 |
管理の頻度 | 高 | 中 |
4. SYSTEMとSYSAUXの管理:実務で役立つポイント
4.1 表領域の使用状況を確認する
表領域の使用状況を定期的に監視することで、トラブルを未然に防ぎます。以下のSQLを使用します。
-- SYSTEM表領域の使用率を確認
select
tablespace_name,
nvl(TOTAL_BYTES / 1024 / 1024 ,0) as "SIZE[MB]",
nvl((TOTAL_BYTES - FREE_BYTES) / 1024 / 1024,0) as "USED[MB]",
nvl(FREE_BYTES / 1024 / 1024,0) as "FREE[MB]",
round(nvl((TOTAL_BYTES - FREE_BYTES) / TOTAL_BYTES * 100,100),2) as "RATE[%]"
from
( select
tablespace_name,
sum(bytes) TOTAL_BYTES
from
dba_data_files
group by
tablespace_name
),
( select
tablespace_name free_tbs_name,
sum(bytes) FREE_BYTES
from
dba_free_space
group by tablespace_name
)
where
tablespace_name = free_tbs_name(+)
and
tablespace_name = 'SYSTEM';select
-- SYSAUX表領域の使用率を確認
tablespace_name,
nvl(TOTAL_BYTES / 1024 / 1024 ,0) as "SIZE[MB]",
nvl((TOTAL_BYTES - FREE_BYTES) / 1024 / 1024,0) as "USED[MB]",
nvl(FREE_BYTES / 1024 / 1024,0) as "FREE[MB]",
round(nvl((TOTAL_BYTES - FREE_BYTES) / TOTAL_BYTES * 100,100),2) as "RATE[%]"
from
( select
tablespace_name,
sum(bytes) TOTAL_BYTES
from
dba_data_files
group by
tablespace_name
),
( select
tablespace_name free_tbs_name,
sum(bytes) FREE_BYTES
from
dba_free_space
group by tablespace_name
)
where
tablespace_name = free_tbs_name(+)
and
tablespace_name = 'SYSAUX';
4.2 領域不足への対応
使用領域が逼迫した場合の対処法を以下に示します。
データファイルの拡張
-- SYSTEM表領域のデータファイルを拡張
ALTER DATABASE DATAFILE '/path/to/system01.dbf' RESIZE 1G;
-- SYSAUX表領域のデータファイルを拡張
ALTER DATABASE DATAFILE '/path/to/sysaux01.dbf' RESIZE 1G;
新しいデータファイルの追加
-- SYSAUX表領域に新しいデータファイルを追加
ALTER TABLESPACE SYSAUX ADD DATAFILE '/path/to/sysaux02.dbf' SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
4.3 不要データの削除
特にSYSAUX
表領域は、不要なデータが蓄積されやすいです。以下のようにクリーンアップを実施します。
AWRスナップショットの削除
-- 古いAWRスナップショットを削除
EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id => 100, high_snap_id => 200);
5. SYSTEMとSYSAUXのトラブルシューティング
5.1 SYSTEM表領域が満杯になった場合
- SYSTEM表領域の使用率が100%に達すると、データベース全体が停止します。
- 以下のコマンドで緊急対応を行います。
ALTER DATABASE DATAFILE '/path/to/system01.dbf' RESIZE 2G;
5.2 SYSAUX表領域の異常増加
- SYSAUX表領域の増加は、AWRやEMリポジトリが原因であることが多いです。
- 定期的に不要なスナップショットやリポジトリデータを削除します。
6. SYSTEMとSYSAUXのベストプラクティス
- 自動拡張を有効にする
表領域不足のリスクを軽減するために、自動拡張を設定します。sqlコードをコピーするALTER DATABASE DATAFILE '/path/to/sysaux01.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
- 使用率の定期的な監視
必要に応じて拡張計画を立てます。 - 不要データの削除
AWRやリポジトリデータの蓄積に注意しましょう。 - バックアップを忘れずに
表領域を操作する前に、必ずデータベース全体のバックアップを取得してください。
7. まとめ
SYSTEM
表領域はデータベースの中核で、基本機能を支える重要な役割を持ちます。SYSAUX
表領域は拡張機能や補助機能のデータを格納し、SYSTEM
を補助します。- 両者を正しく管理することで、安定したデータベース運用が可能になります。
これで、初心者にも実務経験者にも役立つ「完全版」の記事が完成しました。SQLサンプルやトラブルシューティングを盛り込み、より実務に即した内容を意識しました。ぜひブログにご活用ください!
[参考]
Oracle Databaseデータベース管理者ガイド 19c
コメント