RMANで増分バックアップを自動化する方法(レベル0とレベル1の構成)

OS

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は「分 時 日 月 曜日」の形式でスケジュールを指定します:

フィールド内容例意味
00分に実行
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で実現
ログ管理ログ出力で失敗を確認しやすい構成


[参考]
バックアップおよびリカバリ・ユーザーズ・ガイド

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

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

コメント

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