kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

Oracle Standard Editionで可能なフィジカル・スタンバイ・データベース検証(基本スタンバイ)

ディザスターリカバリ用に基本スタンバイの検証を行う。
プライマリデータベース(P)スタンバイデータベース(S)の冗長構成を作成することができ、プライマリデータベースにて作成されたアーカイブログ逐次スタンバイデータベースへ転送し適用するというもの。
スタンバイデータベースはmount状態であるため読み取り・書き込みが不可。
リードオンリーでopenすると読み込みのみ可能となるが、アーカイブログの適用は不可となる。

今回はRMANバックアップセットから複製して、構築していく流れ。

前提条件

  1. 同一のOSバージョン、パッチであること
  2. 同一のoracleバージョン(PSU)であること
  3. アーカイブログ運用であること

検証環境

DB DBVersion OS SID HOST
P 11.2.0.4.5 SEone Oracle Linux 6.5 STBY2 PHOST
S 11.2.0.4.5 SEone Oracle Linux 6.5 STBY2 SHOST

基本スタンバイ構築手順

  1. oracle インストール(P,S)
  2. RMANにてバックアップ取得(P)
  3. RMANにてスタンバイ制御ファイルバックアップ取得(P)
  4. フォルダ構成をあわせる(S)
  5. バックアップセットのコピー(P,S)
  6. 初期化パラメータのコピー(P,S)
  7. パスワードファイルのコピー(P,S)
  8. RMANバックアップセットからリストア・リカバリまで(S)
  9. プライマリでアーカイブログのコピーし、スタンバイで適用(P,S)
  10. 起動方法(S)

1. oracle インストール(P,S)

  • Oracleデータベースのインストール(P,S)
    プライマリデータベースとスタンバイデータベースともに同バージョンのOracleをインストールする

  • Oracleデータベースの作成する(P)
    プライマリデータベースにOracleデータベースを作成する

  • 検証のためデータ追加(P)

SQL>select id,tx,to_char(cdate,'YYYYMMDD HH24:MI:SS') from oreore;

        ID TX                   TO_CHAR(CDATE,'YY
---------- -------------------- -----------------
         1 befo bkup database   20150309 19:33:03
SQL>alter system archive log current;

システムが変更されました。

SQL>select id,tx,to_char(cdate,'YYYYMMDD HH24:MI:SS') from oreore;

        ID TX                   TO_CHAR(CDATE,'YY
---------- -------------------- -----------------
         1 befo bkup database   20150309 19:33:03
         2 after archive        20150309 19:42:26

2. RMANにてバックアップ取得(P)

RMAN> backup database;

backupが開始されました(開始時間: 15-03-09)
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=13 デバイス・タイプ=DISK
チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
入力データファイル・ファイル番号=00001 名前=/opt/app/oracle/oradata/stby2/system01.dbf
入力データファイル・ファイル番号=00002 名前=/opt/app/oracle/oradata/stby2/sysaux01.dbf
入力データファイル・ファイル番号=00005 名前=/opt/app/oracle/oradata/bokuore.dbf
入力データファイル・ファイル番号=00003 名前=/opt/app/oracle/oradata/stby2/undotbs01.dbf
入力データファイル・ファイル番号=00004 名前=/opt/app/oracle/oradata/stby2/users01.dbf
チャネルORA_DISK_1: ピース1(15-03-09)を起動します
チャネルORA_DISK_1: ピース1(15-03-09)が完了しました
ピース・ハンドル=/opt/app/oracle/fast_recovery_area/STBY2/backupset/2015_03_09/o1_mf_nnndf_TAG20150309T194344_bhtyc0yn_.bkp タグ=TAG20150309T194344 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:15
チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
現行の制御ファイルをバックアップ・セットに組み込んでいます
バックアップ・セットに現行のSPFILEを組み込んでいます
チャネルORA_DISK_1: ピース1(15-03-09)を起動します
チャネルORA_DISK_1: ピース1(15-03-09)が完了しました
ピース・ハンドル=/opt/app/oracle/fast_recovery_area/STBY2/backupset/2015_03_09/o1_mf_ncsnf_TAG20150309T194344_bhtycjz4_.bkp タグ=TAG20150309T194344 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:01
backupが完了しました(完了時間: 15-03-09)

3. RMANにてスタンバイ制御ファイルバックアップ取得(P)

  • ここで取得したスタンバイ用制御ファイルのバックアップセットを覚えておく。(o1_mf_ncnnf_TAG20150309T194612_bhtyhp3t_.bkp)
RMAN> backup current controlfile for standby;

backupが開始されました(開始時間: 15-03-09)
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
バックアップ・セットにスタンバイ制御ファイルを組み込んでいます
チャネルORA_DISK_1: ピース1(15-03-09)を起動します
チャネルORA_DISK_1: ピース1(15-03-09)が完了しました
ピース・ハンドル=/opt/app/oracle/fast_recovery_area/STBY2/backupset/2015_03_09/o1_mf_ncnnf_TAG20150309T194612_bhtyhp3t_.bkp タグ=TAG20150309T194612 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:01
backupが完了しました(完了時間: 15-03-09)

4. フォルダ構成をあわせる(S)

mkdir -p /opt/app/oracle/fast_recovery_area/stby2
mkdir -p /opt/app/oracle/admin/stby2/{adump,dpdump,pfile}
mkdir -p /opt/app/oracle/oradata/stby2
chown -R oracle:oinstall /opt/app/oracle/fast_recovery_area/stby2
chown -R oracle:oinstall /opt/app/oracle/admin/stby2/{adump,dpdump,pfile}
chown -R oracle:oinstall /opt/app/oracle/oradata/stby2

5. バックアップセットのコピー(P→S)

$ scp -rp /opt/app/oracle/fast_recovery_area/STBY2 SHOST:/opt/app/oracle/fast_recovery_area/
o1_mf_ncnnf_TAG20150309T194612_bhtyhp3t_.bkp                                          100% 9568KB   9.3MB/s   00:00
o1_mf_nnndf_TAG20150309T194344_bhtyc0yn_.bkp                                          100% 1143MB  51.9MB/s   00:22
o1_mf_ncsnf_TAG20150309T194344_bhtycjz4_.bkp                                          100% 9600KB   9.4MB/s   00:00

6. 初期化パラメータのコピー(P→S)

SQL>create pfile from spfile;

ファイルが作成されました。
$ scp -p /opt/app/oracle/product/11.2.0.4/dbhome_1/dbs/initstby2.ora SHOST:/opt/app/oracle/product/11.2.0.4/dbhome_1/dbs/
initstby2.ora                                                                         100% 1044     1.0KB/s   00:00

Sで初期化パラメータの編集を行う。
リソースに違いがあればメモリサイズの編集等。

7. パスワードファイルのコピー(P→S)

SQL>create pfile from spfile;

ファイルが作成されました。
$ scp -p /opt/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapwstby2 SHOST:/opt/app/oracle/product/11.2.0.4/dbhome_1/dbs/
orapwstby2  

8. RMANバックアップセットからリストア・リカバリまで(S)

RMAN> startup nomount;

Oracleインスタンスが起動しました

システム・グローバル領域の合計は、  12827369472バイトです。

Fixed Size                     2265224バイト
Variable Size               1979715448バイト
Database Buffers           10838081536バイト
Redo Buffers                   7307264バイト
  • 制御ファイルのリストア時に先ほど取得したスタンバイ用制御ファイルのバックアップセットを指定する
RMAN> restore standby controlfile from 
      '/opt/app/oracle/fast_recovery_area/STBY2/backupset/2015_03_09/o1_mf_ncnnf_TAG20150309T194612_bhtyhp3t_.bkp';


restoreが開始されました(開始時間: 15-03-09)
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=98 デバイス・タイプ=DISK

チャネルORA_DISK_1: 制御ファイルをリストア中です
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01
出力ファイル名=/opt/app/oracle/oradata/stby2/control01.ctl
出力ファイル名=/opt/app/oracle/fast_recovery_area/stby2/control02.ctl
restoreが完了しました(完了時間: 15-03-09)
  • マウントしてリストアリカバリする
RMAN> alter database mount;
RMAN> run {
restore database;
recover database;
}

この時点でスタンバイデータベースの完成となる。
マウント状態なので検索はできない。

9. プライマリのアーカイブログをコピーし適用する(P→S)

  • データ追加し、アーカイブ化しSへ転送(P)
>select id,tx,to_char(cdate,'YYYYMMDD HH24:MI:SS') from oreore;

        ID TX                   TO_CHAR(CDATE,'YY
---------- -------------------- -----------------
         1 befo bkup database   20150309 19:33:03
         2 after archive        20150309 19:42:26
         3 stby recover go      20150309 19:57:59
         4 onemore alter archiv 20150309 20:03:03
>alter system archive log current;

システムが変更されました。

scp -rp /opt/app/oracle/fast_recovery_area/STBY2/archivelog SHOST:/opt/app/oracle/fast_recovery_area/STBY2/
  • Pのアーカイブを適用する(S)
SQL> recover automatic standby database;
ORA-00279: 変更984281(03/09/2015 20:03:45で生成)にはスレッド1が必要です
ORA-00289:
検討すべきログ・ファイル:/opt/app/oracle/fast_recovery_area/STBY2/archivelog/201
5_03_09/o1_mf_1_10_%u_.arc
ORA-00280: 変更984281(スレッド1)は順序番号10に存在します。
ORA-00278:
ログ・ファイル'/opt/app/oracle/fast_recovery_area/STBY2/archivelog/2015_03_09/o1
_mf_1_10_%u_.arc'はこのリカバリでは必要なくなりました
ORA-00308:
アーカイブ・ログ/opt/app/oracle/fast_recovery_area/STBY2/archivelog/2015_03_09/o
1_mf_1_10_%u_.arcをオープンできません。
ORA-27037: ファイル・ステータスを取得できません。
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
cancel

アーカイブログ適用されるが、以降のアーカイブログも適用しようとするのでエラーとなってしまう。

10. 起動方法(S)

リードオンリーモードとアクティブモードの起動方法がある。

  • リードオンリーモードで起動すると、読み取りのみ可能となる。再度スタンバイデータベースに戻すことが可能
  • アクティブモードで起動すると、読み取りと書き込みが可能になる。再度スタンバイデータベースに戻すことは不可

リードオンリーモードで起動

  • アーカイブログが適用されているか確認する。
SQL>  alter database open read only;

データベースが変更されました。

SQL> select * from oreore;

        ID TX                   CDATE
---------- -------------------- --------
         1 befo bkup database   15-03-09
         2 after archive        15-03-09
         3 stby recover go      15-03-09
         4 onemore alter archiv 15-03-09

ちゃんとPにinsertした値が入っている。

  • スタンバイデータベースに戻す
SQL>shutdown
SQL>startup nomount
SQL>alter database mount standby database;

これでスタンバイデータベースに戻る。

アクティブモードで起動

SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;

 データベースが変更されました。
SQL> alter database open;

 データベースが変更されました。

その他:オンラインredoログを適用する(P→S)

プライマリデータベース起動時にオンラインredoログをスタンバイデータベースへ適用はできない。
プライマリデータベース停止時には可能となる。

  • DBシャットダウンしオンラインredoログをコピー(P)
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。


$ rsync -ua /opt/app/oracle/oradata/stby2/redo01.log SHOST:/opt/app/oracle/oradata/stby2/
$ rsync -ua /opt/app/oracle/oradata/stby2/redo02.log SHOST:/opt/app/oracle/oradata/stby2/
$ rsync -ua /opt/app/oracle/oradata/stby2/redo03.log SHOST:/opt/app/oracle/oradata/stby2/
  • オンラインredoログの適用(S)
SQL> recover automatic standby database;
ORA-00279: 変更1215296(03/17/2015 15:58:50で生成)にはスレッド1が必要です
ORA-00289:
検討すべきログ・ファイル:/opt/app/oracle/fast_recovery_area/STBY2/archivelog/2015_03_17/o1_mf_1_36_%u_.arc
ORA-00280: 変更1215296(スレッド1)は順序番号36に存在します。
ORA-00278:
ログ・ファイル'/opt/app/oracle/fast_recovery_area/STBY2/archivelog/2015_03_17/o1_mf_1_36_%u_.arc'はこのリカバリでは必要なくなりました
ORA-00308:
アーカイブ・ログ/opt/app/oracle/fast_recovery_area/STBY2/archivelog/2015_03_17/o1_mf_1_36_%u_.arcをオープンできません。
ORA-27037: ファイル・ステータスを取得できません。
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
/opt/app/oracle/oradata/stby2/redo01.log ←ここで対象のオンラインREDOログを指定してあげる
ログが適用されました。
メディア・リカバリが完了しました。

これでオンラインredoログが適用され完全同期される。

基本スタンバイ導入のメリット・デメリット

メリット

  • 必要なライセンスはOracleのSEoneの2ライセンスだけのため費用を抑えることできる。
  • データブロック単位の適用なのでロジカルレプリケーションと違いデータの整合性は保障できる。

デメリット

  • 数分置きにログスイッチを行わなくてはならないのでチェックポイントの回数が増え負荷が大きくなる。
  • プライマリデータベースが全損した場合がスタンバイデータベースでオンラインREDOログ分のデータが損失してしまうことになる。
  • アーカイブログ転送や適用の仕組みを実装してあげる必要がある。

費用が安くなる分めんどうな手間が増えるって感じ。