Oracleデータベースを安定運用するうえで、表領域の使用率監視は非常に重要です。
本記事では、表領域の使用状況を毎日自動でレポート出力する方法を、SQL*Plus と cron を使って実装する手順を解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
■ 実現すること
| ステップ | 内容 |
|---|---|
| ① | 表領域使用率を確認するSQLファイルを作成する |
| ② | SQL*Plusで手動実行して結果を確認 |
| ③ | シェルスクリプトで自動化 |
| ④ | cronに登録して毎日自動出力 |
■ 1. SQLスクリプトの作成
以下の内容を /home/oracle/scripts/tablespace_usage_report.sql に保存します。
-- tablespace_usage_report.sql
SET LINESIZE 150
SET PAGESIZE 100
COLUMN tablespace_name FORMAT A25
COLUMN used_mb FORMAT 999,999.99
COLUMN free_mb FORMAT 999,999.99
COLUMN total_mb FORMAT 999,999.99
COLUMN pct_used FORMAT 999.99
SELECT
df.tablespace_name,
ROUND(SUM(df.bytes) / 1024 / 1024, 2) AS total_mb,
ROUND(SUM(df.bytes - NVL(fs.bytes, 0)) / 1024 / 1024, 2) AS used_mb,
ROUND(SUM(NVL(fs.bytes, 0)) / 1024 / 1024, 2) AS free_mb,
ROUND((SUM(df.bytes - NVL(fs.bytes, 0)) / SUM(df.bytes)) * 100, 2) AS pct_used
FROM
dba_data_files df
LEFT OUTER JOIN
(SELECT tablespace_name, SUM(bytes) AS bytes
FROM dba_free_space
GROUP BY tablespace_name) fs
ON df.tablespace_name = fs.tablespace_name
GROUP BY df.tablespace_name
ORDER BY pct_used DESC;
EXIT
■ 2. シェルスクリプトの作成
以下の内容で /home/oracle/scripts/run_tablespace_report.sh を作成します。
※ ORACLE_SID=v19、ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 に修正済み
#!/bin/bash
# Oracle環境変数設定
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=v19
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LOG_DIR=/home/oracle/logs
# ログ出力ディレクトリ作成
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d)
LOG_FILE=$LOG_DIR/tablespace_report_${DATE}.log
# 実行ログ出力
echo "実行開始: $(date)" > $LOG_FILE
echo "ORACLE_HOME=$ORACLE_HOME" >> $LOG_FILE
echo "ORACLE_SID=$ORACLE_SID" >> $LOG_FILE
# SQL*Plus実行
sqlplus -s / as sysdba @/home/oracle/scripts/tablespace_usage_report.sql >> $LOG_FILE 2>&1
echo "実行終了: $(date)" >> $LOG_FILE
実行権限を付与:
chmod +x /home/oracle/scripts/run_tablespace_report.sh
■ 3. 手動での動作確認
/home/oracle/scripts/run_tablespace_report.sh
確認:
cat /home/oracle/logs/tablespace_report_$(date +%Y%m%d).log
■ 4. cron に登録して毎日自動実行
crontab -e
以下を追加(毎日朝8:00に実行する例):
0 8 * * * /home/oracle/scripts/run_tablespace_report.sh
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔰 cronとは?
cron はLinuxでよく使われる定期実行スケジューラです。crontab -e で設定を編集し、指定した時刻に自動的にスクリプトを実行できます。たとえば 0 8 * * * は「毎日8:00に実行」という意味です。
■ 5. ログ出力例
実行開始: Fri Jun 14 08:00:01 JST 2025
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_SID=v19
TABLESPACE_NAME TOTAL_MB USED_MB FREE_MB PCT_USED
------------------------- ----------- ----------- ----------- --------
SYSTEM 1,170.00 1,162.81 7.19 99.39
SYSAUX 750.00 706.88 43.13 94.25
USERS 5.00 2.69 2.31 53.75
UNDOTBS1 725.00 317.25 407.75 43.76
実行終了: Fri Jun 14 08:00:01 JST 2025
■ 6. トラブル時の確認ポイント
| 現象 | 対処方法 |
|---|---|
| ログファイルが空 | ORACLE_SID, ORACLE_HOME 設定ミス、またはSQLに EXIT; がない |
| cronで動かない | run_tablespace_report.sh 内で環境変数をすべて定義すること |
sqlplus が見つからない | PATH に $ORACLE_HOME/bin を追加すること |
■ まとめ
| ファイル | 内容 |
|---|---|
/home/oracle/scripts/tablespace_usage_report.sql | 使用率を取得するSQL |
/home/oracle/scripts/run_tablespace_report.sh | SQL実行+ログ出力用スクリプト |
/home/oracle/logs/tablespace_report_YYYYMMDD.log | 出力されるレポートログ |
[参考]
13 表領域の管理




コメント