Oracleデータベースでは、日次でフルバックアップを行うと時間も容量もかかりすぎてしまいます。
そのため、差分だけをバックアップする「増分バックアップ」が実用的です。
本記事では、RMANを使用して、毎週日曜日にレベル0(フル)、月〜土曜日にレベル1(差分)を自動で取得する方法を、スクリプトとcron設定付きでわかりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
■ 増分バックアップの基礎
| レベル | 内容 |
|---|---|
| レベル0 | フルバックアップ。レベル1の基準になる。 |
| レベル1 | レベル0以降に変更があったデータブロックのみをバックアップ。 |
■ 運用スケジュールのイメージ(図解)
(例):
日 月 火 水 木 金 土
L0 L1 L1 L1 L1 L1 L1
→ 日曜にレベル0(完全バックアップ)
→ 月〜土はレベル1(差分バックアップ)
■ バックアップ出力先のディレクトリ
mkdir -p /home/oracle/rman_backup
chown oracle:oinstall /home/oracle/rman_backup
chmod 700 /home/oracle/rman_backup
■ 1. RMANスクリプトの作成
📄 /home/oracle/scripts/backup_level0.rman
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/home/oracle/rman_backup/l0_%U.bkp';
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG DELETE INPUT;
RELEASE CHANNEL ch1;
}
📄 /home/oracle/scripts/backup_level1.rman
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/home/oracle/rman_backup/l1_%U.bkp';
BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG DELETE INPUT;
RELEASE CHANNEL ch1;
}
🔍 各RMANコマンドの解説
| コマンド | 解説 |
|---|---|
RUN { ... } | RMANで一連のバックアップ操作をまとめて実行するブロックです。 |
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '...' | バックアップファイルの出力先と形式を定義します。%Uは一意なファイル名になります。 |
BACKUP INCREMENTAL LEVEL 0 | データベース全体をフルバックアップします(レベル0)。 |
BACKUP INCREMENTAL LEVEL 1 | 前回のレベル0またはレベル1以降に変更があったデータのみをバックアップします。 |
PLUS ARCHIVELOG DELETE INPUT | アーカイブログも一緒にバックアップし、バックアップ後に元ファイルを削除します。 |
RELEASE CHANNEL ch1 | 使用したチャネルを解放します。RMANのリソースを整理するために必要です。 |
■ 2. 実行用シェルスクリプトの作成
🖥 /home/oracle/scripts/backup_level0.sh
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LOG_DIR=/home/oracle/scripts/log
export DATE=$(date '+%Y%m%d_%H%M')
export LOG_FILE=$LOG_DIR/level0_$DATE.log
mkdir -p $LOG_DIR
rman target / cmdfile=/home/oracle/scripts/backup_level0.rman log=$LOG_FILE
🖥 /home/oracle/scripts/backup_level1.sh
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LOG_DIR=/home/oracle/scripts/log
export DATE=$(date '+%Y%m%d_%H%M')
export LOG_FILE=$LOG_DIR/level1_$DATE.log
mkdir -p $LOG_DIR
rman target / cmdfile=/home/oracle/scripts/backup_level1.rman log=$LOG_FILE
シェルに実行権限を付与:
chmod +x /home/oracle/scripts/backup_level0.sh
chmod +x /home/oracle/scripts/backup_level1.sh
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
■ 3. cronに登録して自動実行
crontab -e
以下を追加して自動化します:
# 毎週日曜2:00にレベル0バックアップ
0 2 * * 0 /home/oracle/scripts/backup_level0.sh
# 月〜土曜2:00にレベル1バックアップ
0 2 * * 1-6 /home/oracle/scripts/backup_level1.sh
🔍 cronの日時・曜日指定の解説
cronは「分 時 日 月 曜日」の形式でスケジュールを指定します:
| フィールド | 内容例 | 意味 |
|---|---|---|
| 分 | 0 | 0分に実行 |
| 時 | 2 | 午前2時に実行 |
| 日 | * | 毎日 |
| 月 | * | 毎月 |
| 曜日 | 0 | 日曜日(0または7) |
| 曜日 | 1-6 | 月曜(1)〜土曜(6)に実行 |
例:
0 2 * * 0:毎週日曜の午前2時に実行(レベル0)0 2 * * 1-6:毎週月曜〜土曜の午前2時に実行(レベル1)
■ 4. バックアップ結果の確認方法
バックアップファイルの確認
ls -lh /home/oracle/rman_backup/
ログの確認
cat /home/oracle/scripts/log/level0_YYYYMMDD_HHMM.log
cat /home/oracle/scripts/log/level1_YYYYMMDD_HHMM.log
RMANでの確認
rman target /
RMAN> list backup;
■ まとめ
| 項目 | 内容 |
|---|---|
| バックアップ構成 | レベル0(週1)+レベル1(差分) |
| メリット | 容量削減、時間短縮、効率的な保護 |
| 実装方法 | RMANスクリプト+シェル+cronで実現 |
| ログ管理 | ログ出力で失敗を確認しやすい構成 |




コメント