【Oracle 】rmanで取得したバックアップファイルをOSコマンドで削除してしまった話

今回は、表題にもある通り、rmanで取得したバックアップファイルをOSコマンド(rm)で削除してしまったときの対処法を記載します。

# 経緯
高速リカバリ領域を使用中に、高速リカバリ領域の容量圧迫していたことが原因で、バックアップの取得ができなかった。

```
RMAN> backup database;

backupを24-02-03で開始しています
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
入力データファイル ファイル番号=00006 名前=/home/oradata/ORA19C/rman.dbf
入力データファイル ファイル番号=00001 名前=/home/oradata/ORA19C/system01.dbf
入力データファイル ファイル番号=00002 名前=/home/oradata/ORA19C/sysaux01.dbf
入力データファイル ファイル番号=00004 名前=/home/oradata/ORA19C/user.dbf
入力データファイル ファイル番号=00003 名前=/home/oradata/ORA19C/undotbs01.dbf
入力データファイル ファイル番号=00005 名前=/home/oradata/ORA19C/index_SPACE01.dbf
入力データファイル ファイル番号=00007 名前=/home/oradata/ORA19C/test.dbf
チャネルORA_DISK_1: ピース1 (24-02-03)を起動します
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backupコマンド(ORA_DISK_1チャネル上)が02/03/2024 15:53:40で失敗しました
ORA-19809: リカバリ・ファイルの制限を超えています
ORA-19804: 67108864バイトのディスク領域を3221225472バイト制限から再利用できません

```

ここで、私は、高速リカバリ領域に存在するバックアップファイルの物理削除を選択

# 物理削除してからの流れ
## ①Crosscheckの実施
まずは、rmanリポジトリ と 物理的なディスク状況の同期を図る
```
RMAN> crosscheck backup;

チャネルORA_DISK_1の使用
バックアップ・ピースがクロスチェックされました: 'EXPIRED'が検出されました
バックアップ・ピース・ハンドル=/home/oracle/flash/ORA19C/backupset/2024_02_03/o1_mf_nnndf_TAG20240203T152023_lvvps7nx_.bkp レコードID=22 スタンプ=1159975223
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=/home/oracle/flash/ORA19C/autobackup/2024_02_03/o1_mf_s_1159975230_lvvpsgy7_.bkp レコードID=23 スタンプ=1159975230
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=/home/oracle/flash/ORA19C/backupset/2024_02_03/o1_mf_nnndf_TAG20240203T153724_lvvqs57n_.bkp レコードID=24 スタンプ=1159976245
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=/home/oracle/flash/ORA19C/autobackup/2024_02_03/o1_mf_s_1159976252_lvvqsdk4_.bkp レコードID=25 スタンプ=1159976252
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=/home/oracle/flash/ORA19C/backupset/2024_02_03/o1_mf_nnndf_TAG20240203T154900_lvvrgx9x_.bkp レコードID=26 スタンプ=1159976941
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=/home/oracle/flash/ORA19C/autobackup/2024_02_03/o1_mf_s_1159976948_lvvrh4ln_.bkp レコードID=27 スタンプ=1159976948
6オブジェクトをクロスチェックしました
```

## ②rmanリポジトリの論理レコードの削除

EXPIREDと出力された
→状況として
rman：まだファイルは存在すると思っている
実際の物理状況：EXPIREDと検出されたファイルは存在しない

この状況を、以下のコマンドでrmanにもファイルが存在しないことを認知してもらう

```
RMAN> DELETE EXPIRED BACKUP;

チャネルORA_DISK_1の使用

バックアップ・ピースのリスト
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
22      22      1   1   EXPIRED     DISK        /home/oracle/flash/ORA19C/backupset/2024_02_03/o1_mf_nnndf_TAG20240203T152023_lvvps7nx_.bkp

このオブジェクトを削除しますか(YESまたはNOを入力してください)。 yes
バックアップ・ピースが削除されました
バックアップ・ピース・ハンドル=/home/oracle/flash/ORA19C/backupset/2024_02_03/o1_mf_nnndf_TAG20240203T152023_lvvps7nx_.bkp レコードID=22 スタンプ=1159975223
1EXPIREDオブジェクトを削除しました


RMAN>
```
これを行うことで、rmanも物理的にファイルが、存在しないものと認識してくれた。


# まとめ
今回は、バックアップファイルを物理削除した際の、対処法を記載した。
rmanリポジトリは、OS上の物理状況とリンクがしていないため、手動でリンク(Crosscheck)させる必要がある
→それに、加えて、OS上の物理状況とrmanリポジトリとで、差異が生じた際は、手動で差異を修正するひつようがある