Loading...

We've detected that your browser language is Chinese. Would you like to visit our Chinese website? [ Dismiss ]
著者: Dylan

 

 

RMANでバックアップを削除する理由

Oracle Recovery Manager(RMAN)はOracle標準搭載のバックアップ・リカバリツールです。DBAはRMANを使用してOracleデータベースのバックアップを取得し、データファイル、制御ファイル、SPFILE、REDOログなどを保護します。ただし、以下の理由からRMANバックアップの削除が必要になるケースがあります。

  • バックアップストレージの空き容量確保:数週間分のフルバックアップとアーカイブログがFast Recovery Areaを埋め尽くすと、データベースがフリーズする恐れがあります。不要なバックアップを削除してストレージ容量を開放します。
  • カタログと実ファイルの不整合発生:RMANを経由せずOS側のコマンドでバックアップファイルを削除した場合、RMANのカタログ上ではファイルが存在(AVAILABLE)と認識されたままとなり、リストア実行時にエラーが発生します。期限切れのカタログレコードを削除して不整合を解消します。
  • バックアップ保存ポリシーの変更:業務要件が「30日間保持」から「7日間保持」に切り替わった際、古いバックアップは不要(OBSOLETE)と判定されストレージを占有し続けるため、DELETE OBSOLETEコマンドで一括削除します。

RMANバックアップ削除

RMANバックアップ削除とは何か

DELETE BACKUPコマンドを実行すると、RMANは2つの処理を実行します。

1. ディスク上のバックアップピースを物理的に削除(テープバックアップの場合はメディアマネージャーに対し、テープ領域を再利用可能とする通知を送信)

2. 制御ファイルまたはリカバリカタログから対応するレコードを削除

OSのrmまたはdelコマンドで直接バックアップファイルを削除した場合、RMANの制御ファイルにはバックアップが存在すると記録されたままになります。CROSSCHECKを実行後DELETE EXPIREDを実行することでカタログレコードをクリーンアップできます。ただし、物理的に削除されたファイルを復元することはできません。

テープバックアップの場合、物理テープファイルを完全消去するかどうかは、使用するメディアマネージャー(Oracle Secure Backupまたはサードパーティ製SBTライブラリ)の仕様に依存します。多くの場合、単にテープ領域を再利用可能な状態にフラグ付けするだけです。

RMANによるバックアップ削除 手順

下記の表にRMAN削除系コマンドの基本構文をまとめました。各運用シナリオに応じた詳細な実行手順も後述します。

コマンド

処理内容

使用する場面

DELETE BACKUP

ディスク/テープ上のバックアップセットまたはバックアップピースを物理削除し、カタログレコードも同時に消去します。

削除対象のバックアップキーを明確に把握している場合に使用。必ず絞り込み条件を指定し、無条件実行は禁止。

DELETE BACKUP OF

特定のデータベースオブジェクト(データファイル、表領域、アーカイブログ、制御ファイル)に対応するバックアップのみ削除します。

特定の表領域のバックアップ、またはアーカイブログのバックアップだけを削除し、他のバックアップは残したい場合。

DELETE OBSOLETE

事前設定した保存ポリシー(RECOVERY WINDOWまたはREDUNDANCY)に基づき、不要と判定されたバックアップを一括削除します。

定時クリーンアップ運用。保存ポリシー設定後毎日実行する。事前にREPORT OBSOLETEで削除対象を確認すること。

DELETE EXPIRED

CROSSCHECK実行後、実ファイルが存在しない(EXPIRED)と判定されたバックアップのカタログレコードのみ削除。物理ファイルには触れません。

RMAN外部でOSコマンドによりバックアップファイルが削除され、カタログと不整合が生じた際のクリーンアップ。リストアエラーを回避するため実施。

7日以上古い、または特定日時以前のバックアップを削除

RMANのDELETE BACKUPには直接日時指定のUNTIL句が存在しないため、LIST BACKUPで対象のバックアップキーを抽出し、1つずつ削除する必要があります。

実行例:

sql
# 7日以上古いデータベースバックアップを抽出
RMAN> LIST BACKUP OF DATABASE COMPLETED BEFORE 'SYSDATE-7';

-- 出力されたBSキーを記録し、個別削除
RMAN> DELETE BACKUP 2048;
RMAN> DELETE BACKUP 2049;

シェルスクリプトで自動化する場合は、一時的に保存ポリシーを変更しREPORT OBSOLETEを活用する方法がありますが、意図しないバックアップまで削除するリスクが伴います。多くのDBAはV$BACKUP_PIECEに対する小規模なPL/SQLループを作成し、日時条件に基づいた精密な削除処理を実装しています。

アーカイブログのバックアップのみ削除

  • アーカイブログのバックアップピースのみ削除し、ディスク上の元のアーカイブログファイルは保持したい場合は下記コマンドを使用します。
sql
RMAN> DELETE BACKUP OF ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3';

上記コマンドはRMANが作成したバックアップピースのみ削除し、元のアーカイブログファイル(例:/u01/arch/arch_1_123.arc)はそのまま残ります。バックアップストレージが逼迫しているが、時点リカバリに元のアーカイブログが必要、または別ストレージに複製する予定がある場合に活用します。

  • ディスク上の元のアーカイブログファイル自体を削除したい場合はDELETE ARCHIVELOGを使用し、DELETE BACKUP OF ARCHIVELOGと混同しないでください。
bash
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3' BACKED UP 1 TIMES TO DEVICE TYPE DISK;

このコマンドはアーカイブログディレクトリから.arcまたは.logファイルを物理削除します。バックアップピースは削除されません。

注意事項

  1. 安全上、アーカイブログを削除する前に、バックアップが正常取得済みであることを確認してください(BACKED UP … TIMES句で担保)。
  2. アーカイブログ保存先のディスク容量を開放したい場合はDELETE BACKUP OF ARCHIVELOGでは効果がありません。逆にバックアップファイルだけを消したい場合はDELETE ARCHIVELOGを実行すると誤って元ログを失うため、コマンドを使い分ける必要があります。

特定のバックアップピースを手動削除

不要なRMANバックアップピースを個別指定して削除する場合は下記構文を使用します。

bash
RMAN> DELETE BACKUPPIECE 'バックアップピースのフルパス';

BACKUPPIECEの後に記述するのはファイルの完全なパスまたはテープハンドル名です。パスを確認するにはLIST BACKUP OF DATABASEを実行してください。

RMANは指定したパスのバックアップピースのみディスクから物理削除し、対応するカタログレコードを消去します。同一バックアップセット内の他のピースには影響しません。

警告:バックアップセットを構成する一部のピースだけ削除すると、バックアップセット全体が不完全な状態になります。複数ピースで構成されたバックアップセットの1ファイルを削除した場合、そのセットからのリストアは実行不可能になります。破損または不要と確定したピースに限り使用してください。

保存ポリシーによるRMANバックアップクリーンアップの自動化

RMANバックアップの削除作業を自動化したい場合は、事前に保存ポリシーを設定します。

例:7日間のリカバリウィンドウを設定し、7日以上古いバックアップを自動的にOBSOLETEとする。数値は任意に変更可能。

sql
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

毎日実行するシェルスクリプト例:

bash
#!/bin/bash
rman target / catalog rman/rman@catdb <

RMANバックアップ削除時のよくあるトラブルシューティング

バックアップ削除実行時にエラーが発生する場合の対処法を記載します。

1. 「RMAN‑06091: メンテナンス用チャネルが割り当てられていません」

テープ(SBT)デバイスのバックアップを削除する際に頻出するエラーです。

下記コマンドで回避できます:

bash
RMAN> ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE sbt;
RMAN> DELETE OBSOLETE;

2. リカバリカタログ上にバックアップレコードが残るが、物理ファイルが存在しない

CROSSCHECKを実行後DELETE EXPIREDでカタログの不要レコードを削除します。CROSSCHECK実行後もステータスがAVAILABLEのままの場合、ファイル自体は存在するが権限破損・ファイル破損により読み取り不可の可能性があります。ファイルが消失したと断定する前にVALIDATE BACKUPでファイルの健全性を確認してください。

i2Backupによる一元的なバックアップ管理

cronジョブで単一または少数のデータベースのバックアップ管理を行うことは可能です。しかし、物理・仮想・クラウド環境にまたがる数十台のOracleインスタンスを運用する場合、すべての環境に個別のRMANスクリプトを作成・保守するのは非常に手間がかかります。

Info2softが開発したi2Backupはこの課題に対応したエンタープライズ向けバックアッププラットフォームです。統合された管理画面からOracleバックアップのライフサイクル(自動クリーンアップを含む)を一括管理可能なため、DBごとにRMANスクリプトを作成・保守する必要がなくなります。

管理者は中央のWebコンソール上でバックアップスケジュールと保存ポリシーを定義するだけで、残りの処理はプラットフォームが自動実行します。事前設定したスケジュールに従ってバックアップを取得し、バックアップファイルがOBSOLETEになると、設定したルールに基づき自動削除を実行します。

Oracleバックアップ管理の主要機能

  • 一元的な保存ポリシー管理:リカバリウィンドウまたは多重度ルールを1回設定するだけで全Oracleインスタンスに適用。DB個別のcronジョブ不要で自動クリーンアップを実行。
  • 粒度の細かいリストア機能:バックアップセット全体を読み込まず、CDB、PDB、アーカイブログ、制御ファイル単位でリストア可能。タイムスタンプに基づく時点リカバリにも対応。
  • 複数ストレージ先に対応:ローカルディスク、テープライブラリ、NAS、オブジェクトストレージへのバックアップに対応。重複排除機能を標準搭載し、ストレージ使用量を削減。
  • ランサムウェア対策のイミュータブルバックアップ:改ざん防止ストレージと改ざん検知ドライバーを活用し、不正な削除操作をブロックするイミュータブルバックアップに対応。

現在60日間の無料トライアルを利用可能です:

60日間無料トライアル

まとめ

本記事ではRMANによる期限切れバックアップの安全な削除方法を解説しました。手順は複雑ではありません。

  • 保存ポリシーに基づく定時クリーンアップにはDELETE OBSOLETEを使用。
  • RMAN外部で物理ファイルが削除されカタログ不整合が発生した場合はCROSSCHECK+DELETE EXPIREDを実行。
  • 特定のバックアップだけを削除する場合は正確なバックアップキーまたはピースパスを指定しDELETE BACKUPを実行。
  • OSのrm/delコマンドで直接バックアップファイルを削除してはならない。カタログと実ファイルの不整合が発生し、リストアが不安定になる。

保存ポリシーを設定しシェルスクリプトによる毎日自動実行も可能です。複数台のOracleデータベースを運用している場合はInfo2softのi2Backupのような一元管理プラットフォームの導入を検討してください。

概要は準備中です

関連記事

Oracleデータベースの削除手順:安全作業完全ガイド
OracleのDROP DATABASEは恒久的な操作であり、データファイル、制御ファイル、REDOログを削除します。本ガイドでは、構文、前提条件、SQLおよびDBCAによる実行手順、一般的なエラー、代替手段、データベース削除前のデータ保護について解説します。
記事を読む
Oracleデータベースを新規作成する4つの方法
新しいOracleデータベースを作成するには、単一コマンドを実行するだけでは不十分です。ストレージ、パラメータ、アーキテクチャの計画、セットアップ後作業が伴います。本ガイドではOracleデータベースを作成する4つの実用的な手法を解説し、一般的なエラーを回避し、初期段階から適切に設定する方法を紹介します。
記事を読む
SQL Server、MySQL、PostgreSQLにおけるデータベース削除方法
DROP DATABASEはSQLにおける最も取り消し不可能な操作の一つですが、深く考えず実行されることが少なくありません。本ガイドではMySQL、PostgreSQL、SQL Serverそれぞれの正しい構文、主要な違い、データを守るための安全対策を順に解説します。
記事を読む
Oracle テーブル一覧:USER_TABLES、ALL_TABLES、DBA_TABLES
OracleにはSHOW TABLESという組み込みコマンドが存在しないため、データディクショナリビューに対してクエリを実行してテーブル一覧を取得する必要があります。本ガイドではUSER_TABLES、ALL_TABLES、DBA_TABLESの使用方法に加え、スキーマによる絞り込み、検索クエリ、アクセスに関する一般的なトラブルシューティングを解説します。
記事を読む
ビジネスデータのセキュリティ強化を始めませんか?

· 世界中のエンタープライズおよびミッドマーケットのお客様

· トライアル期間中、サポートチームが対応します

· 60日間の無料トライアルまたはデモで、Info2Softが企業データをどのように保護するかをご確認ください。

フォームにご記入の上、送信してください。担当者より追ってご連絡いたします。
このフォームを送信することにより、 プライバシー通知を読み、同意したことを確認します。
{{ isSubmitting ? '送信中...' : '送信する' }}