【Oracle】RMAN バックアップをクラウドへ転送する方法|OCI Object Storage・AWS S3・SBT・CLI 転送・自動化まで解説

【Oracle】RMAN バックアップをクラウドへ転送する方法|OCI Object Storage・AWS S3・SBT・CLI 転送・自動化まで解説 Oracle

オンプレミスの Oracle で取得した RMAN バックアップをクラウドに退避すれば、災害対策とオフサイトバックアップを実現できます。本記事では CLI 転送と SBT 直接バックアップの 2 方式を比較し、OCI / AWS / Azure 対応の転送手順、暗号化との組み合わせ、自動化まで解説します。

この記事でわかること
・CLI 転送(OCI CLI / AWS CLI)と SBT 直接バックアップの比較
・OCI Object Storage / AWS S3 への転送手順
・SBT チャネルで RMAN から直接クラウドへバックアップする方法
・暗号化 + 圧縮との組み合わせ
・ライフサイクルルールによるコスト最適化
・cron による自動化スクリプト
スポンサーリンク

2 つの転送方式の比較

方式 仕組み ローカルディスク リストア
CLI 転送 RMAN でローカルに保存後、OCI CLI / AWS CLI でクラウドへ転送 必要 ダウンロード後に RMAN
SBT 直接 RMAN の SBT チャネルでクラウドに直接書き込み 不要 RMAN から直接リストア可能
シンプルに始めるなら CLI 転送がおすすめです。追加モジュール不要で既存のバックアップ運用を変えずに始められます。ローカルディスクなしで直接クラウドへ書きたい場合は SBT チャネルを検討してください。

OCI Object Storage への転送(OCI CLI)

Shell(OCI CLI セットアップ)
# OCI CLI インストール
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
oci setup config  # テナンシ OCID / ユーザー OCID / API キーを入力
oci os ns get     # 接続テスト

# バケット作成(初回のみ)
oci os bucket create --compartment-id ocid1.compartment.oc1..xxx --name oracle-backups
Shell(バックアップ + OCI 転送スクリプト)
#!/bin/bash
# backup_to_oci.sh
export ORACLE_HOME=/oracle/product/19c/dbhome_1
export ORACLE_SID=ORCL
BACKUP_DIR=/oracle/backup
BUCKET=oracle-backups
DATE_TAG=$(date +%Y%m%d)

# RMAN バックアップ
rman target / <<EOF
BACKUP INCREMENTAL LEVEL 1 DATABASE
    FORMAT '${BACKUP_DIR}/incr_${DATE_TAG}_%U.bkp'
    PLUS ARCHIVELOG DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
EOF

# OCI に転送
for f in ${BACKUP_DIR}/incr_${DATE_TAG}_*.bkp; do
    oci os object put --bucket-name ${BUCKET} --file "$f" \
        --name "rman/${DATE_TAG}/$(basename $f)"
done

# ローカルの古いバックアップを削除
find ${BACKUP_DIR} -name '*.bkp' -mtime +7 -delete

AWS S3 への転送(AWS CLI)

Shell(AWS CLI セットアップ + 転送)
# AWS CLI インストール + 設定
curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip
unzip awscliv2.zip && sudo ./aws/install
aws configure  # Access Key / Secret Key / Region を入力

# S3 にバックアップを転送
aws s3 sync /oracle/backup/ s3://oracle-backups-prod/rman/$(date +%Y%m%d)/ \
    --exclude '*' --include 'incr_*.bkp'

# マルチパートアップロード: 8MB 以上は自動的に分割転送

SBT チャネルで RMAN から直接バックアップ

Oracle Secure Backup Cloud Module を使うと、RMAN がローカルディスクを経由せずにクラウドに直接バックアップできます。

Shell(OSB Cloud Module セットアップ)
# Oracle Secure Backup Cloud Module をインストール
java -jar opc_installer.jar \
    -opcId user@example.com \
    -opcPass AuthToken \
    -container https://swiftobjectstorage.region.oraclecloud.com/v1/namespace/bucket \
    -walletDir /oracle/opc/wallet \
    -libDir /oracle/opc/lib
Shell(RMAN SBT チャネルでバックアップ)
rman target /

# SBT チャネル設定
RMAN> CONFIGURE CHANNEL DEVICE TYPE sbt
      PARMS 'SBT_LIBRARY=/oracle/opc/lib/libopc.so,
             ENV=(OPC_PFILE=/oracle/opc/opcORCL.ora)';

# SBT でバックアップ(ローカルディスク不要)
RMAN> BACKUP DEVICE TYPE sbt
      INCREMENTAL LEVEL 1 DATABASE
      PLUS ARCHIVELOG;

# リストアも直接可能
RMAN> RESTORE DATABASE FROM SBT;

暗号化 + 圧縮との組み合わせ

Shell(暗号化 + 圧縮 + クラウド転送)
rman target / <<EOF
SET ENCRYPTION ON IDENTIFIED BY 'backup_password' ONLY;
BACKUP AS COMPRESSED BACKUPSET
    INCREMENTAL LEVEL 1 DATABASE
    FORMAT '/oracle/backup/enc_%U.bkp'
    PLUS ARCHIVELOG DELETE INPUT;
EOF

# 暗号化済みファイルをクラウドに転送
aws s3 sync /oracle/backup/ s3://oracle-backups/encrypted/ \
    --exclude '*' --include 'enc_*.bkp'
クラウド転送時は暗号化を推奨
RMAN 暗号化(ファイル自体)+ HTTPS 転送 + クラウドサーバーサイド暗号化(SSE)の三重保護が理想です。

クラウドストレージの比較

クラウド ストレージ CLI SBT 対応 コスト(1TB/月)
OCI Object Storage OCI CLI OSB Cloud Module 約 $26
AWS S3 Standard AWS CLI OSB Cloud Module 約 $23
AWS S3 Glacier AWS CLI S3 経由 約 $4(取出しに数時間)
Azure Blob Storage azcopy サードパーティ 約 $18

ライフサイクルルールでコスト最適化

Shell(AWS S3 ライフサイクル設定)
# 30 日後に Glacier、365 日後に削除
aws s3api put-bucket-lifecycle-configuration \
    --bucket oracle-backups-prod \
    --lifecycle-configuration file://lifecycle.json

# lifecycle.json:
# {"Rules":[{"ID":"Archive","Status":"Enabled","Prefix":"rman/",
#   "Transitions":[{"Days":30,"StorageClass":"GLACIER"}],
#   "Expiration":{"Days":365}}]}
長期保管にはアーカイブ層を活用
Standard 層に最新バックアップを保持し、30 日超のバックアップを Glacier / Archive に自動移行すればコストを 80% 以上削減できます。

クラウドからのリストア

Shell(CLI 方式: ダウンロード後にリストア)
# クラウドからダウンロード
aws s3 sync s3://oracle-backups/rman/20260328/ /oracle/backup/restore/

# RMAN でリストア
rman target /
RMAN> CATALOG START WITH '/oracle/backup/restore/';
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
Shell(SBT 方式: 直接リストア)
# SBT チャネル設定済みなら直接リストア
rman target /
RMAN> RESTORE DATABASE FROM SBT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;

cron による自動化

Shell(crontab 登録)
# 毎日 3:00 にバックアップ + クラウド転送
0 3 * * * /home/oracle/scripts/backup_to_oci.sh >> /home/oracle/logs/cloud_backup.log 2>&1

よくある質問

QCLI 転送と SBT はどちらが速いですか?
A同じネットワーク帯域であれば大きな差はありません。SBT はローカルディスクへの書き込みを省略できる分わずかに速い場合があります。CLI 転送はリトライ機能が強く、ネットワーク不安定な環境では CLI が安全です。
QS3 Glacier からリストアにどのくらいかかりますか?
AS3 Glacier Standard は取り出しに 3〜5 時間、Deep Archive は 12 時間以上かかります。緊急リストア用に最新バックアップは Standard 層に保持し、古いものだけ Glacier に移行するのが推奨です。
QOSB Cloud Module は無料ですか?
AOCI / AWS 向けの OSB Cloud Module は無料でダウンロードできます。クラウドストレージの利用料(保管 + 転送 + リクエスト)のみが発生します。
QData Pump のダンプもクラウドに保管できますか?
Aはい。OCI CLI / AWS CLI で Data Pump のダンプファイルも転送可能です。RMAN バックアップとはバケットやプレフィックスを分けて管理することを推奨します。
Q転送中にネットワークが切断されたら?
ACLI ツール(OCI CLI / AWS CLI)にはマルチパートアップロードのリトライ機能があり、中断した位置から再開できます。SBT の場合は RMAN バックアップ自体がエラーになるため最初からやり直しです。
Qバックアップの暗号化は必要ですか?
Aクラウドに保管するなら暗号化を強く推奨します。RMAN 暗号化でファイル自体を保護し、転送は HTTPS、クラウド側はサーバーサイド暗号化(SSE)で三重に保護するのが理想です。

まとめ

RMAN バックアップのクラウド転送の要点をまとめます。

やりたいこと 方法
ローカル → OCI 転送 oci os object put –bucket-name … –file …
ローカル → AWS S3 転送 aws s3 sync /oracle/backup/ s3://bucket/
RMAN から直接クラウドへ RMAN BACKUP DEVICE TYPE sbt(OSB Cloud Module)
暗号化 + クラウド転送 SET ENCRYPTION ON + BACKUP AS COMPRESSED + CLI 転送
コスト最適化 ライフサイクルルールで Glacier / Archive に自動移行
クラウドからリストア(CLI) ダウンロード + CATALOG + RESTORE DATABASE
クラウドからリストア(SBT) RESTORE DATABASE FROM SBT

増分バックアップは「RMAN 増分バックアップ完全ガイド」、自動化は「RMAN バックアップを自動化する方法」、アーカイブログは「アーカイブログを自動削除する方法」も併せて参照してください。