特別な機能を使わずに遠隔地にOracleデータベースを複製する

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;

コメント