Data GuardやGolden Gateなどの機能を使うことなく、遠隔地などの別環境に複製のデータベースを作成し、アーカイブログを手動で転送、リカバリをかけ続けることで災害対策とする場合に考えられる構築手順をまとめる。
想定する環境
Linux 上の 19c データベースを想定。便宜上、複製元をプライマリ、複製先をスタンバイと呼ぶが、データベースとしてはどちらもプライマリロールとして扱われる。
スタンバイを明確にスタンバイロールとして扱う場合は、基本スタンバイと呼ばれる構築の方法もとれるが、今回はその方法はとらない。
完全な複製のため、プライマリとスタンバイでデータファイルのパスなどは全く同一にしている。
データベース名は「stbtest」。
プライマリ側の設定
事前にパスワードファイルをスタンバイ側にコピーしておく。
$ scp $ORACLE_HOME/dbs/orapwstbtest oracle@oradbs2.dn.home:/u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwstbtest
プライマリ側のバックアップをRMANで取得。事前にアーカイブログモードに変更しておくこと。
この時、制御ファイルやSPFILEのバックアップは自動バックアップ機能を使っている。
RMAN> run {
configure channel device type disk format '/home/oracle/backup/%U';
configure controlfile autobackup format for device type disk to '/home/oracle/backup/%F';
backup database;
}
どのバックアップセットに何が含まれるか、確認しておく。今回は以下のようになっている。
データファイル → 031dkgj8_3_1_1
制御ファイル・SPFILE → c-2498283832-20221124-01
RMAN> list backup;
バックアップ・セットのリスト
===================
BS Key Type LV Size Device Type Elapsed Time 終了時間
------- ---- -- ---------- ----------- ------------ -------------------
3 Full 2.01G DISK 00:01:46 2022-11-24 11:36:50
BPキー: 3 ステータス: AVAILABLE 圧縮: NO タグ: TAG20221124T113504
ピース名: /home/oracle/backup/031dkgj8_3_1_1
バックアップ・セット3のデータファイルのリスト
File LV Type Ckp SCN Ckp時間 Abs Fuz SCN Sparse Name
---- -- ---- ---------- ------------------- ----------- ------ ----
1 Full 2275791 2022-11-24 11:35:04 NO /u01/app/oracle/oradata/STBTEST/system01.dbf
3 Full 2275791 2022-11-24 11:35:04 NO /u01/app/oracle/oradata/STBTEST/sysaux01.dbf
4 Full 2275791 2022-11-24 11:35:04 NO /u01/app/oracle/oradata/STBTEST/undotbs01.dbf
7 Full 2275791 2022-11-24 11:35:04 NO /u01/app/oracle/oradata/STBTEST/users01.dbf
BS Key Type LV Size Device Type Elapsed Time 終了時間
------- ---- -- ---------- ----------- ------------ -------------------
4 Full 10.20M DISK 00:00:01 2022-11-24 11:37:11
BPキー: 4 ステータス: AVAILABLE 圧縮: NO タグ: TAG20221124T113710
ピース名: /home/oracle/backup/c-2498283832-20221124-01
SPFILEも含まれます: 修正時間: 2022-11-24 11:31:19
SPFILE db_unique_name: STBTEST
含まれている制御ファイル: Ckp SCN: 2275849 Ckp時間: 2022-11-24 11:37:10
取得したバックアップをスタンバイに転送する。転送先のディレクトリは、プライマリと同じパスになるようにしておく。
$ scp -r /home/oracle/backup oracle@oradbs2.dn.home:/home/oracle
スタンバイ側の設定
データファイルや監査ファイルの出力先ディレクトリを作成する。
$ mkdir -p $ORACLE_BASE/admin/stbtest/adump
$ mkdir $ORACLE_BASE/oradata/STBTEST
バックアップをリストアする。DBIDはプライマリ側でRMANを起動した際に表示されるので、その値を使う。
$ export ORACLE_SID=stbtest
$ rman target /
RMAN> startup nomount
RMAN> set dbid 2498283832;
RMAN> restore spfile from '/home/oracle/backup/c-2498283832-20221124-01';
RMAN> shutdown immediate
RMAN> startup nomount
RMAN> restore controlfile from '/home/oracle/backup/c-2498283832-20221124-01';
RMAN> alter database mount;
RMAN> restore database;
この時点で複製は完了している。あとは、プライマリ側で出力されたアーカイブログを定期的に手動で転送し、リカバリをかけ続ければよい。
継続的なリカバリのためのプライマリ側の対応
定期的にアーカイブログの出力状況を監視し、スタンバイに転送する。
RMAN> list archivelog all;
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
データベースdb_unique_name STBTESTのアーカイブ・ログ・コピーのリスト
=====================================================================
Key Thrd Seq S Low時間
------- ---- ------- - -------------------
1 1 9 A 2022-11-24 11:20:18
名前: /u01/app/oracle/fast_recovery_area/STBTEST/archivelog/2022_11_24/o1_mf_1_9_kqxrso5h_.arc
2 1 10 A 2022-11-24 12:21:25
名前: /u01/app/oracle/fast_recovery_area/STBTEST/archivelog/2022_11_24/o1_mf_1_10_kqxs6ldg_.arc
$ scp /u01/app/oracle/fast_recovery_area/STBTEST/archivelog/2022_11_24/o1_mf_1_9_kqxrso5h_.arc oracle@oradbs2.dn.home:/home/oracle/backup
$ scp /u01/app/oracle/fast_recovery_area/STBTEST/archivelog/2022_11_24/o1_mf_1_10_kqxs6ldg_.arc oracle@oradbs2.dn.home:/home/oracle/backup
スタンバイ側での継続的なリカバリ
プライマリから受け取ったアーカイブログをカタログ化し、定期的にリカバリを行う。
RMAN> catalog archivelog '/home/oracle/backup/o1_mf_1_9_kqxrso5h_.arc';
RMAN> catalog archivelog '/home/oracle/backup/o1_mf_1_10_kqxs6ldg_.arc';
RMAN> recover database until sequence 11;
コメント