Oracle 表領域使用率をSQLスクリプトで出力し、cronで自動実行する方法

オラクルデータベースの基本

Oracleデータベースを安定運用するうえで、表領域の使用率監視は非常に重要です。
本記事では、表領域の使用状況を毎日自動でレポート出力する方法を、SQL*Pluscron を使って実装する手順を解説します。

💰 【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=v19ORACLE_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.shSQL実行+ログ出力用スクリプト
/home/oracle/logs/tablespace_report_YYYYMMDD.log出力されるレポートログ


[参考]
13 表領域の管理

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました