Oracle11g DataGuard新機能 その6

<Oracle 11g検証 第4弾 新機能:Oracle11g DataGuard その6>
ペンネーム: オレンジみかん

先週に引き続き「Oracle11g DataGuard新機能」について検証します。
今週は11g新機能のスナップショット・スタンバイについて検証します。

1.検証目的
■検証ポイント
(1)スナップショット・スタンバイの動作ポイント
(2)障害発生時のスナップショット・スタンバイの中断とリカバリ方法
(3)スタンバイDBをテスト環境として利用する時の制限事項は?

■スナップショット・スタンバイとは
フィジカル・スタンバイから作られる新しいタイプのスタンバイデータ
ベースです。スナップショット・スタンバイはテスト目的で利用されプラ
イマリDBから切り離してトランザクションを処理できます。また、スナッ
プショット・スタンバイを読み込み/書き込みでオープンできます。
スナップショット・スタンバイはプライマリDBから引き離したトラザク
ションを処理している間も、引き続きプライマリDBから更新を受け取って
アーカイブします。
スナップショット・スタンバイはスナップショット・スタンバイで行わ
れた更新を破棄するまで、プライマリDBから受け取るREDOデータは適用さ
れません。この機能によりスタンバイ・データベースをテストで利用して
も本番データを常に保護することが可能となります。

2.スナップショット・スタンバイの利用方法について考える
■本番データを使ったテスト環境として使えるか?
スナップショット・スタンバイはプライマリDBと独立したトランザクション
を実行出来るため本番データを使用したテスト環境として使えそうです。

10gR2まではスタンバイDBは同等のスペックのサーバーが待機系サーバーと
して待機していましたが、スナップショット・スタンバイの機能より独立
したトランザクションで書き込みが可能になったことにより、今まで待機
状態となっていた本番機同等スペックのサーバーをテスト環境として有効
活用出来るようになりそうです。

「DataGuardのスナップショット・スタンバイを本番データを使ったテスト
に活用してリソースを有効活用しよう」

【スナップショット・スタンバイの検証事項】
スナップショット・スタンバイは、フラッシュバック・データベースの機能
を利用してスナップショット・スタンバイの直前の状態に戻る必要があるた
め、動作制限事項はやはりフラッシュバックテータベースに依存するのか?

そこで、制限事項を検証するため、フラッシュバック・データベースの制限
事項を参考にし、スナップショット・スタンバイの検証シナリオを設定し
ました。

【検証シナリオ】
[シナリオ1](データ整合性の検証)
データを追加した場合はプライマリDBと整合性は保てるか?
●表領域が変更されない場合

[シナリオ2](リカバリを伴う整合性の検証)
スナップショット・スタンバイ中の障害対応の方法は?
● スナップショット・スタンバイ中に障害が発生した場合の対処方法は?

[シナリオ3](スナップショット・スタンバイの制限項目の検証)
スナップショット・スタンバイからフィジカル・スタンバイに変更する時、
スナップショット・スタンバイ有効な日数はあるのか?
●フラッシュバック・データベースのパラメータに依存するのか?。

[シナリオ4](スナップショット・スタンバイの制限項目の検証)
新しく表領域を追加したり、削除した場合のプライマリDBとの整合性は?
●表領域が追加されたり、削除される変更は対応できないのか?

※以上の検証要件を踏まえ、スナップショット・スタンバイを検証実施して
みましょう。

(1)データファイル・制御ファイルの物理的な障害が破損した場合は、
フラッシュバック機能は未対応
(2)制御ファイルの再作成、リストアされた制御ファイルを元に戻す場合は
フラッシュバックの機能は未対応
(3)DROPされた表領域の場合はフラッシュバック機能は未対応
(4)alter database datafile ・・resizeにより小さくなった
データファイルを戻す場合はフラッシュバック機能は未対応

3.検証開始
【検証シナリオ結果】
[シナリオ1](データ整合性の検証)
データを追加した場合はプライマリDBと整合性は保てるか?
●表領域が変更されない場合
1)INSERT、DELETEの実行
2)この状態でスナップショット・スタンバイをキャンセルして、スタンバ
イDBを読み取り専用でOPENした場合。スナップショット・スタンバイ
中に作成した表は存在するかどうか?

[検証結果]
1)フィジカル・スタンバイからスナップショット・スタンバイに変更

(1)

   SQL> select database_role,open_mode from v$database;
   DATABASE_ROLE    OPEN_MODE
   ---------------- ----------
   PHYSICAL STANDBY MOUNTED

(2)
⇒管理リカバリモードが開始されている場合はをキャンセル

   SQL> alter database recover managed standby database cancel;
   

⇒フィジカルス・タンバイからスナップショット・スタンバイへ変更
SQL> alter database convert to snapshot standby;
Database altered.
[/sql]
(このときにアラートログには・・)————————————

⇒ここでリストアポイントを決めているようです
alter database convert to snapshot standby
Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_04/27/2008
RESETLOGS after incomplete recovery UNTIL CHANGE 1524862
Resetting resetlogs activation ID 147567387 (0x8cbb31b)
Online log /app/ora11106/oradata/ora111/redo01.log: Thread 1 Group 1 
Online log /app/ora11106/oradata/ora111/redo02.log: Thread 1 Group 2 
Online log /app/ora11106/oradata/ora111/redo03.log: Thread 1 Group 3 
⇒スナップショット・スタンバイの開始はここのポイント
Standby became primary SCN: 1524860
Sun Apr 27 18:17:56 2008
Setting recovery target incarnation to 5
Converting standby mount to primary mount.
ACTIVATE STANDBY: Complete - Database mounted as primary (ora111)
ALTER DATABASE CONVERT TO SNAPSHOT STANDBY: Complete (ora111)
Completed: alter database convert to snapshot standby
--------------------------------------------------------------------

(3)

   SQL> shutdown immediate
   ORA-01507: database not mounted

   ORACLE instance shut down.

※スタンバイDBはmountの状態だったのでora-1507は表示される

(4)
⇒書き込み/読み込みをするためOPENモードで起動

   SQL> startup 
   ORACLE instance started.

(5)
⇒データベースのロールがスナップショット・スタンバイに変更されている

   SQL> select database_role,open_mode from v$database;
   DATABASE_ROLE	 OPEN_MODE
   ---------------- ----------
   SNAPSHOT STANDBY READ WRITE
   

2)スナップショット・スタンバイで表の作成、INSERT、DELETEの実行
(1)

   SQL> startup
   ORACLE instance started.
      (中略)
   Database mounted.
   Database opened.
   

(2)

   SQL> select EMPNO,ENAME from emp;

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      (中略)
      7934 MILLER
   

(3)
⇒テストデータとしてEMPNO=9980,ENAME=MIKANのデータ挿入

   SQL> INSERT INTO emp VALUES (9980,'MIKAN','SALESMAN',7698,'22-FEB-
        07',1250,500,30);
   1 row created.
   

(4)
SQL> select EMPNO,ENAME from emp;

EMPNO ENAME
———- ———-
7369 SMITH
7499 ALLEN
(中略)
7934 MILLER
9980 MIKAN ⇒テストデータが追加されている
[/sql]
3)スナップショット・スタンバイからフィジカル・スタンバイに変更
(1)

   SQL> startup mount
   ORACLE instance started.
      (中略)
   Database mounted.
   

(2)
SQL> alter database convert to snapshot standby;
Database altered.
[/sql]
(3)管理リカバリモードを開始

   SQL> alter database recover managed standby database disconnect 
        from session ;

または

   SQL> alter database recover managed standby database using current
        logfile;

上記のSQLで管理リカバリモードを開始

4)スタンバイDBをOPENで起動して、読み取り専用でデータ確認。
フィジカルスタンバイの内容が、スナップ・スタンバイのときに作成し
たユーザ、表についてなんら問題ないことを確認。
(1)

   SQL> startup
   ORACLE instance started.
      (中略)
   Database mounted.
   Database opened.

(2)

      SQL> select EMPNO,ENAME from emp;

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      (中略)
      7934 MILLER
      

5)プライマリDBの変更データがフィジカル・スタンバイDBとしデータ同期
が取れているのか確認

 (プライマリDB)               |(スタンバイDB)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                | ※スナップショット・スタンバイ
                                | ※フィジカル・スタンバイに変更
                                |
 ※emp表の内容                  |
      EMPNO ENAME               |
---------- ----------           |
      7369 SMITH                |
      7499 ALLEN                |
      (中略)                    |
      7900 JAMES                |
      7902 FORD                 |
      7934 MILLER               |
                                | ※emp表の内容
                                |      EMPNO ENAME
                                |---------- ---------- 
                                |      7369 SMITH
                                |      7499 ALLEN
                                |      (中略)
                                |      7900 JAMES
                                |      7902 FORD
                                |      7934 MILLER
                                |
                  (データの同期が取れている状態)
                                |
 ※emp表の内容                  |
      EMPNO ENAME               |
---------- ----------           |
      7369 SMITH                |
      (中略)                    |
      7934 MILLER               |
⇒テストデータを挿入            |
      9999 INSIGHT              |
 ※アーカイブファイル転送       | ※アーカイブファイル受信
                                | ※アーカイブファイル適用
                                | ※emp表の内容
                                |      EMPNO ENAME
                                |---------- ---------- 
                                |      7369 SMITH
                                |      (中略)
                                |      7934 MILLER
                                |⇒変更内容が反映
                                |      9999 INSIGHT

[シナリオ2](リカバリを伴う整合性の検証)
スナップショット・スタンバイ中の障害対応の方法は?
● スナップショット・スタンバイ中に障害が発生した場合の対処方法は?
[状況]
□プライマリDB⇒障害発生
□スタンバイDB⇒スナップショット・スタンバイで利用中

[動作]
(1)プライマリDBをshutdown abort(仮想障害発生)
(2)スタンバイDBをスナップショット・スタンバイからフィジカル・スタ
ンバイに変更
(3)管理リカバリモードに変更してスナップショット・スタンバイ中に転
送されたアーカイブファイルの内容を適用する
(4)フェイルオーバーの実行

[状態の流れ]

 (プライマリDB)               |(スタンバイDB)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                |※スナップショット・スタンバイで実行
 ※アーカイブファイル転送       |
                                |
 ※通信障害発生                 |
  (shutdown abort)              |
                                |※管理リカバリモードに変更
                                |(スナップショット・スタンバイ中の
                                |アーカイブログファイルの内容を適用)
                                |※フィジカル・スタンバイに変更
                                |※フェイルオーバーの実行
                                |
                                |(新プライマリDB)
                                |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                |※アーカイバ スタート
                                |
                                |※初期パラメータ(プライマリDB)
                                |
                                |※データベース オープン

今回はここまで

今回の検証ではスナップショット・スタンバイ機能の確認と、障害時のスナッ
プショット・スタンバイからのフェイルオーバーの対応方法について検証をし
ました。

次回は引き続き、スナップショット・スタンバイでテストを実施する上での制
限事項の検証を行います。

※今回は質問回答の予定でしたが最終回に記載させて頂きます。

ガソリン値上げ前の給油行列に加わり、安いガソリンとお別れ 恵比寿にて