Oracle11g DataGuard新機能 その7

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

先週に引き続き「Oracle11g DataGuard新機能」について検証します。

前回はスナップショット・スタンバイの動作ポイントと、障害時のスナップ
ショット・スタンバイの中断とリカバリ方法について検証しました。
今回はスナップショット・スタンバイを利用する時の制限事項について検証
します。

1.前回の検証のおさらい
スナップショット・スタンバイはフィジカル・スタンバイに復旧する時に、フ
ラッシュバック・データベースの機能を利用することから、フラッシュバック
・データベースの依存を想定してフラッシュバック・スタンバイの制限事項を
元に検証シナリオを設定しました。

[シナリオ1]: データ整合性の検証(検証済み)
データを追加した場合はプライマリDBと整合性は保てるか?

[シナリオ2]: リカバリを伴う整合性の検証(検証済み)
スナップショット・スタンバイ中の障害対応の方法は?

[シナリオ3]: スナップショット・スタンバイの制限項目の検証1(今回検証)
スナップショット・スタンバイからフィジカル・スタンバイの復旧に有効期
間を考慮する必要が有るかどうか。

[シナリオ4]: スナップショット・スタンバイの制限項目の検証2(今回検証)
新しく表領域を追加したり削除した場合、フィジカル・スタンバイに復旧す
るために制限事項はあるのかどうか?

前回に引き続き検証シナリオに沿って検証します。

2.検証開始
[シナリオ3]
スナップショット・スタンバイからフィジカル・スタンバイに復旧に有効期
間を考慮する必要が有るかどうか。

DB_FLASHBACK_RETENTION_TARGETを10分にしてフラッシュバック・データベー
スの保存期間が有効か検証をします。
DB_FLASHBACK_RETENTION_TARGETが有効で機能する場合は、データ:MIKANが
残ってしまう(仮説)

[検証概要]

  時間
  |- 0
  |
  |- 12分後 データ:MIKANを挿入  ------(1)
  |
  |- 15分後 データ:ORACNGEを挿入------(2)
  |
↓|- 20分後 スナップショット・スタンバイをフィジカル・スタンバイへ復旧
 t|                              ------(3)

○フラッシュバック・データベースの保存期間を短い時間に変更にして、
スナップショット・スタンバイに変更します。
(スタンバイDB)

○初期パラメータのDB_FLASHBACK_RETENTION_TARGETを10分に変更
SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=10;

※DB_FLASHBACK_RETENTION_TARGETパラメータ
フラッシュバック・保存期間を指定できます。(分単位)
デフォルトは1440 分(1日)に設定されています。

○スナップショット・スタンバイを設定するため管理リカバリモードを
キャンセル
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

○スナップショット・スタンバイに変更
SQL> alter database convert to snapshot standby;

#アラートログ

  Created guaranteed restore point 
  SNAPSHOT_STANDBY_REQUIRED_05/10/2008 17:49:36 
  RESETLOGS after complete recovery through change 579125
  Sat May 10 17:49:38 2008

  Standby became primary SCN: 579123
  Sat May 10 17:49:39 2008
  Setting recovery target incarnation to 8
  Converting standby mount to primary mount.
  ACTIVATE STANDBY: Complete - Database mounted as primary (ora111)
  ALTER DATABASE CONVERT TO SNAPSHOT STANDBY: Complete (ora111)

※フラッシュバックのリカバリポイントを設定している

SQL> select CURRENT_SCN from v$database;

CURRENT_SCN
-----------
     579473

○12分後テストデータをインサート ——(1)

  SQL> INSERT INTO emp VALUES (9980,'MIKAN','SALESMAN',7698,'22-FEB-
       07',1250,500,30);
  SQL> COMMIT;
  
SQL> select CURRENT_SCN from v$database;

CURRENT_SCN
-----------
     579557
  

○テストデータを確認

  SQL> SELECT EMPNO,ENAME FROM EMP ORDER BY EMPNO;

       EMPNO ENAME
  ---------- ----------
        7369 SMITH
          (中略)
        7934 MILLER
        9980 MIKAN   ⇒テストデータ
  
  15 rows selected.
  

○5分後にさらにデータをインサートします。——(2)

  SQL> INSERT INTO emp VALUES (9880,'ORANGE','SALESMAN',9980,'20-FEB-
       07',1250,500,30);
  SQL> COMMIT;

○SCNの参照

  SQL> select CURRENT_SCN from v$database;

  CURRENT_SCN
  -----------
       580460
 

○テストデータを確認

  SQL> SELECT EMPNO,ENAME FROM EMP ORDER BY EMPNO;

       EMPNO ENAME
  ---------- ----------
        7369 SMITH
          (中略)
        7934 MILLER
        9880 ORANGE  ⇒テストデータ
        9980 MIKAN   ⇒テストデータ
      

○さらに5分後にスナップショット・スタンバイからフィジカル・スタン
バイに変更します。 ——(3)

  SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY; 

#アラートログ

  Sat May 10 15:35:35 2008
  ALTER DATABASE CONVERT TO PHYSICAL STANDBY
  ALTER DATABASE CONVERT TO PHYSICAL STANDBY (ora111)
  Flashback Restore Start
  Sat May 10 15:35:36 2008
  Starting Data Guard Broker (DMON)
  Sat May 10 15:35:36 2008
  NSV1 started with pid=21, OS id=19466 
  Flashback Restore Complete
  Stopping background process RVWR
  Deleted Oracle managed file /app/ora11106/flash_recovery_area/ORA111
  /flashback/o1_mf_42bhk6b1_.flb
  Guaranteed restore point  dropped

※フラッシュバックのリカバリポイントをリストを実行している

保存期間を10分以上経過後でもスナップショット・スタンバイに変更された
変更内容はキャンセルできるのかな?

○フィジカル・スタンバイでのテストデータを確認

  SQL> SELECT EMPNO,ENAME FROM scott.EMP ORDER BY EMPNO;

       EMPNO ENAME
  ---------- ----------
        7369 SMITH
          (中略)
        7934 MILLER
        9999 INSIGHT


  SQL>  select CURRENT_SCN from v$database;

  CURRENT_SCN
  -----------
       581418
 

あ、保存期間を短くしても戻っている・・。

アラートログを見ると、スナップショット・スタンバイのフラッシュバック
の管理は保障付きリストポイントを使っています。マニュアルを見ると保証
付きリストポイントでの管理ではDB_FLASHBACK_RETENTION_TARGETでは管理
しないということから、スナップショット・スタンバイ中の期間指定の考慮
は必要ないようです。

#アラートログ

  Created guaranteed restore point 
  SNAPSHOT_STANDBY_REQUIRED_05/10/2008 17:35:10
  (中略)
  Guaranteed restore point  dropped

Oracle Database SQL言語リファレンス 11g リリース1(11.1)
E05750-02
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/
server.111/E05750-02/statements_6.htm#23579

[シナリオ4]
新しく表領域を追加したり削除した場合、フィジカル・スタンバイに復旧する
ために制限事項はあるのかどうか?

[スナップショット・スタンバイ中に表領域を追加した場合の動作検証]
スナップショット・スタンバイ中に表慮機:TEMP02を追加、削除する

  プライマリDB     スタンバイDB      スタンバイDB
   ---------         ---------       ---------
  | TEMP01 |   ⇒  | TEMP01  | ・・・|TEMP01  |
  |        |       | TEMP02  |       |        |
  ----------       -----------       ----------
                                    TEMP02 を削除

○スナップショット・スタンバイを設定するため管理リカバリモードを
キャンセル

  SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

○スナップショット・スタンバイに変更

  SQL>ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;

○スタンバイDBに表領域を追加

  SQL> CREATE TABLESPACE test02 
    2   DATAFILE '/app/ora11106/oradata/ora111/test01.dbf' SIZE 100M 
    3  SEGMENT SPACE MANAGEMENT AUTO;

  Tablespace created.
  

○表領域の確認

  SQL> SELECT NAME FROM V$TABLESPACE;
  
  NAME
  ------------------------------
  SYSTEM
  SYSAUX
  UNDOTBS1
  USERS
  TEMP
  TEST02 ⇒テスト表領域
  

○フィジカル・スタンバイに変更

  SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY; 

○表領域の確認

  SQL> SELECT NAME FROM V$TABLESPACE;
  
  NAME
  ------------------------------
  SYSTEM
  SYSAUX
  UNDOTBS1
  USERS
  TEMP
  

スナップショット・スタンバイ中に追加した表領域と追加したユーザーはフ
ィジカル・スタンバイに変更後、スナップショット・スタンバイ時の変更内
容は破棄されている
[復旧OK]

[プライマリDBにもある表領域を削除した場合の動作検証]
既存の表領域:TEST01を削除して、プライマリDBとスタンバイDBの表領域の
相違が発生する場合はフィジカル・スタンバイへの復旧が可能か?

(1)プライマりDBで新しい表領域する

  プライマリDB     スタンバイDB      スタンバイDB
   ---------       ---------       ---------
  | TEMP01 |   ⇒  | TEMP01 | ・・・|        |
  |        |       | TEMP02 |       |TEMP02  |
  ----------       ----------        ----------
                                    TEMP01を削除


 (プライマリDB)               |(スタンバイDB)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                |
 ※表領域の内容                 | ※表領域の内容  
   NAME                         |   NAME                       
   ---------------------------  |   --------------------------- 
   SYSTEM                       |   SYSTEM
   SYSAUX                       |   SYSAUX
   UNDOTBS1                     |   UNDOTBS1
   USERS                        |   USERS
   TEMP                         |   TEMP
                                |
 ※TEST01を追加                 |
 ※表領域の内容                 |
   NAME                         |
   ---------------------------  |
   SYSTEM                       |
   SYSAUX                       |
   UNDOTBS1                     |
   USERS                        |
   TEMP                         |
   TEST01 ⇒追加した表領域      |
                                | ※表領域の内容(TEST01追加後)
                                |   NAME                       
                                |   --------------------------- 
                                |   SYSTEM
                                |   SYSAUX
                                |   UNDOTBS1
                                |   USERS
                                |   TEMP
                                |   TEST01 ⇒追加した表領域

(2)スナップショット・スタンバイに変更
○スナップショット・スタンバイを設定するため管理リカバリモードを
キャンセル

  SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

○スナップショット・スタンバイに変更

  SQL>ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;

(3)スタンバイDBに反映された表領域を削除

 (プライマリDB)               |(スタンバイDB)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                |
 ※表領域の内容                 | ※表領域の内容  
   NAME                         |   NAME                       
   ---------------------------  |   --------------------------- 
   SYSTEM                       |   SYSTEM
   SYSAUX                       |   SYSAUX
   UNDOTBS1                     |   UNDOTBS1
   USERS                        |   USERS
   TEMP                         |   TEMP
   TEST01                       |   TEST01
                                |
                                | ※TEST01を削除
                                | SQL> drop tablespace TEST01 
                                |      INCLUDING CONTENTS;

(4)フィジカル・スタンバイに変更

   (プライマリDB)               |(スタンバイDB)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                |
 ※表領域の内容                 | ※表領域の内容  
   NAME                         |   NAME                       
   ---------------------------  |   --------------------------- 
   SYSTEM                       |   SYSTEM
   SYSAUX                       |   SYSAUX
   UNDOTBS1                     |   UNDOTBS1
   USERS                        |   USERS
   TEMP                         |   TEMP
   TEST01                       |
                                |
                                | ※フィジカル・スタンバイに変更
                                | SQL> ALTER DATABASE CONVERT TO 
                                |      PHYSICAL STANDBY;
                                | 
                                | ※ORA-01135エラー発生
                                | *
                                | ERROR at line 1:
                                | ORA-01135: file %s accessed for DML
                                | /query is offline
                                |
                                | SQL> SELECT FILE#,STATUS FROM  
                                |      V$DATAFILE;
                                |
                                |     FILE#      STATUS
                                |     ---------- -------
                                |     1          SYSTEM
                                |     2          RECOVER
                                |     3          RECOVER
                                |     4          RECOVER
                                |     5          RECOVER
                                |
                                

⇒あれれ、プライマリDBとスタンバイDBで同期が取れない
[復旧NG]

スナップショット・スタンバイ中にプライマリDBと同期を取っている表領
域を削除すると、プライマリDBとスタンバイデータベース間で同期が取れ
なくなってしまいました。同期が取れないので、この状態ではプライマリ
・データベースでアーカイブ・ログ・ファイルの転送を 停止させ、スタン
バイ・データベースの再構築により復旧する必要があります。

3.スナップショット・スタンバイ検証まとめ

制限事項を意識して利用すれば、本番データを使ったテスト環境として有効。

[スナップショット・スタンバイの状態での同期維持可能な操作]
(1)新規表領域の追加・削除
(2)データベースオブジェクトの作成・削除
(3)スナップショット・スタンバイ中でのデータの更新
(4)スナップショット・スタンバイからフィジカル・スタンバイの復旧に
有効期限無くスナップショット・スタンバイの利用が可能

[制限事項]
フィジカル・スタンバイからスナップショット・スタンバイに変更する
以前から存在するの表領域を削除すると同期が維持できない状態になる。
同期が維持できない場合は、再度プライマリDBを元にスタンバイDBを作成
することが必要です。

今回はここまで

次回はいよいよDataGuard検証の最終回です。これまでのまとめと寄せられた
質問にお答えいたします。

朝が程よく冷たく清清しい 恵比寿にて