バックアップ、リストア、リカバリの流れを一通り体験する。
OracleDatabase付属のRecovery Manager(RMAN)を使用する。
0. 準備
リカバリを見据え、事前に各種設定を行っておく。
■ 高速リカバリ領域
バックアップファイルやアーカイブREDOログファイルを格納する領域として高速リカバリ領域を設定すると、いろいろ機能的に良いことがある。(古いファイルを自動的に消してくれるなど)
❖ 現在の高速リカバリ領域の設定を確認する
SQL> show parameter db_recovery_file
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest string C:\Oracle\fast_recovery_area
db_recovery_file_dest_size big integer 13836M
❖ 高速リカバリ領域を設定(変更)する
高速リカバリ領域は、実運用ではデータファイルとは別の記憶域にするのが望ましい。
- 高速リカバリ領域のパスを設定する
alter system set db_recovery_file_dest = 'C:\Oracle\fast_recovery_area';
- 高速リカバリ領域のサイズを設定する
alter system set db_recovery_file_dest_size = 5G;
■ アーカイブログモード
アーカイブログモードにすると、アーカイブREDOログが作成されるようになる。
リカバリで直前状態まで戻したいならアーカイブログモードをONにしておく。
❖ 現在のログモードを確認する
SQL> select log_mode from v$database;
LOG_MODE
------------------------
NOARCHIVELOG
NOARCHIVELOG
…アーカイブログを作成しない
ARCHIVELOG
…アーカイブログを作成する
❖ アーカイブログモードを変更する
① データベースをマウント状態にする。(いちどシャットダウンしてからマウント)
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup mount
ORACLEインスタンスが起動しました。
Total System Global Area 4479514688 bytes
Fixed Size 9865280 bytes
Variable Size 922746880 bytes
Database Buffers 3539992576 bytes
Redo Buffers 6909952 bytes
データベースがマウントされました。
② ログモードを変更する。
- アーカイブログモードをONにする
alter database archivelog;
- アーカイブログモードをOFFにする
alter database noarchivelog;
③ データベースをオープンする。
alter database open;
1. バックアップ
① RMAN起動
OSプロンプトからRMANを起動する。
起動時はターゲットデータベースに接続する。
rman target/
② RMANの設定
高速リカバリ領域に1階層掘った。
-
バックアップファイルの出力先を指定する
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'C:\Oracle\fast_recovery_area\ORCL\backup\%U';
※パスの末尾に\%U
を付けないと、パスがバッティングしエラーで落ちる。 -
現在のRMANの設定を確認する
show all;
して上と同じ文(CONFIGURE CHANNEL~)が見当たれば設定できている。
③ RMANでバックアップ
backup database plus archivelog delete all input;
データベース(データファイル、制御ファイル、SPFILE) + アーカイブREDOログファイル
(実運用ではアーカイブREDOログファイルもバックアップを取ったほうがよいとのこと。)
④ バックアップを確認する
list backup;
または list backup summary;
RMAN> list backup summary;
バックアップのリスト
===============
Key TY LV S Device Type 終了時間 #Pieces #Copies Compressed Tag
------- -- -- - ----------- -------- ------- ------- ---------- ---
33 B A A DISK 24-05-02 1 1 NO TAG20240502T010501
34 B F A DISK 24-05-02 1 1 NO TAG20240502T010503
35 B F A DISK 24-05-02 1 1 NO TAG20240502T010503
36 B F A DISK 24-05-02 1 1 NO TAG20240502T010503
37 B A A DISK 24-05-02 1 1 NO TAG20240502T010508
38 B F A DISK 24-05-02 1 1 NO TAG20240502T010510
6つのバックアップファイルが作られた。
2. リストア
RMANを使ってリストアする。
RMANを使うとバックアップファイルの指定が不要。
データベースをマウント状態にしてからリストアする。
startup mount
restore database;
この時点でデータベースをオープンしようとするとエラーになった。
RMAN> alter database open;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: sql statementコマンドが05/02/2024 01:28:22で失敗しました
ORA-01113: ファイル1はメディア・リカバリが必要です
ORA-01110: データファイル1: 'C:\ORACLE\ORADATA\ORCL\DATAFILE\O1_MF_SYSTEM_M2SMYW7S_.DBF'
3. リカバリ
リストアのみを行った状態は、バックアップ時点の状態であり、まだ最新の状態ではない。
そこで、現存のREDOログを適用して最新の状態にするのがリカバリという作業。
recover database
4. バックアップファイル削除
❖ RMAN上の管理情報と物理状況を同期
RMAN> crosscheck backup;
チャネルORA_DISK_1の使用
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\152POKLT_37_1_1 レコードID=33 スタンプ=1167872702
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\162POKLV_38_1_1 レコードID=34 スタンプ=1167872703
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\172POKM2_39_1_1 レコードID=35 スタンプ=1167872706
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\182POKM3_40_1_1 レコードID=36 スタンプ=1167872707
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\192POKM5_41_1_1 レコードID=37 スタンプ=1167872709
バックアップ・ピースがクロスチェックされました: 'AVAILABLE'が検出されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\AUTOBACKUP\2024_05_02\O1_MF_S_1167872710_M34T1PBH_.BKP レコードID=38 スタンプ=1167872710
6オブジェクトをクロスチェックしました
AVAILABLE
…RMAN上も存在していて、物理ファイルも存在しているよ→RMANで扱えるよ
EXPIRED
…RMAN上は存在することになっているけど、物理ファイルは存在しなかったよ→RMANで扱えないよ
OSから直接削除してしまうと、RMAN上の管理情報との間に不整合が発生するのでRMAN上の管理情報から削除する必要がある。
❖ バックアップファイル削除
シンプルに全削除をしてみた。
(実運用ではポリシーを設定したりしてしかるべきものだけを削除するのがよい)
RMAN> delete backup;
チャネルORA_DISK_1の使用
バックアップ・ピースのリスト
BP Key BS Key Pc# Cp# Status Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
33 33 1 1 AVAILABLE DISK C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\152POKLT_37_1_1
34 34 1 1 AVAILABLE DISK C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\162POKLV_38_1_1
35 35 1 1 AVAILABLE DISK C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\172POKM2_39_1_1
36 36 1 1 AVAILABLE DISK C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\182POKM3_40_1_1
37 37 1 1 AVAILABLE DISK C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\192POKM5_41_1_1
38 38 1 1 AVAILABLE DISK C:\ORACLE\FAST_RECOVERY_AREA\ORCL\AUTOBACKUP\2024_05_02\O1_MF_S_1167872710_M34T1PBH_.BKP
このオブジェクトを削除しますか(YESまたはNOを入力してください)。 y
バックアップ・ピースが削除されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\152POKLT_37_1_1 レコードID=33 スタンプ=1167872702
バックアップ・ピースが削除されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\162POKLV_38_1_1 レコードID=34 スタンプ=1167872703
バックアップ・ピースが削除されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\172POKM2_39_1_1 レコードID=35 スタンプ=1167872706
バックアップ・ピースが削除されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\182POKM3_40_1_1 レコードID=36 スタンプ=1167872707
バックアップ・ピースが削除されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\BACKUP\192POKM5_41_1_1 レコードID=37 スタンプ=1167872709
バックアップ・ピースが削除されました
バックアップ・ピース・ハンドル=C:\ORACLE\FAST_RECOVERY_AREA\ORCL\AUTOBACKUP\2024_05_02\O1_MF_S_1167872710_M34T1PBH_.BKP レコードID=38 スタンプ=1167872710
6オブジェクトを削除しました
参考