Data Guard:スナップショット・スタンバイへの変換(11g)

1. スナップショット・スタンバイの概要

スナップショット・スタンバイはフィジカル・スタンバイ・データベースを一時的に READ WRITE で OPEN するための機能になる。

スナップショット・スタンバイを実行した場合のスタンバイ・データベース側:
  • プライマリ・データベースからのログの受信は可能。
  • 受信したログの適用は不可能。
  • スナップショット・スタンバイへ変更後に実行された REDO の生成を伴う処理は、フィジカル・スタンバイに戻す場合に廃棄される。
  • スナップショット・スタンバイではフェイルオーバー・スイッチオーバーを実行することはできない。
  • スナップショット・スタンバイへの変換を行ったり、元のフィジカル・スタンバイへと戻す処理は任意のタイミングで実行可能です。
  • スナップショット・スタンバイへと変更し、フィジカル・スタンバイに戻した場合、スタンバイ・データベースはスナップショット・スタンバイへの変更を行う直前の状態に戻る。

2. スナップショット・スタンバイへ変更(スタンバイ側)

2.1 ログ適用サービスを停止し、MOUNT状態にする
PRODSTB(SYS)> recover managed standby database cancel;
Media recovery complete.
PRODSTB(SYS)> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
PRODSTB(SYS)> startup mount;
ORACLE instance started.

Total System Global Area  368263168 bytes
Fixed Size                  1313456 bytes
Variable Size             301991248 bytes
Database Buffers           58720256 bytes
Redo Buffers                6238208 bytes
Database mounted.
PRODSTB(SYS)>
2.2 フラッシュリカバリ領域を設定
PRODSTB(SYS)> alter system set db_recovery_file_dest_size=5G scope=both;

System altered.

PRODSTB(SYS)> alter system set db_recovery_file_dest='/u01/app/oracle/fra' scope=both;

System altered.

PRODSTB(SYS)>
2.3 スナップショット・スタンバイへの変換
PRODSTB(SYS)> alter database convert to snapshot standby;

Database altered.

PRODSTB(SYS)> shutdown immediate
ORA-01507: database not mounted

ORACLE instance shut down.
PRODSTB(SYS)> startup 
ORACLE instance started.

Total System Global Area  368263168 bytes
Fixed Size                  1313456 bytes
Variable Size             301991248 bytes
Database Buffers           58720256 bytes
Redo Buffers                6238208 bytes
Database mounted.
Database opened.
PRODSTB(SYS)> select name, db_unique_name, open_mode, database_role, switchover_status from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
--------- ------------------------------ ---------- ---------------- --------------------
PROD      PRODSTB                        READ WRITE SNAPSHOT STANDBY SESSIONS ACTIVE

PRODSTB(SYS)>

スナップショットスタンバイへ変更した後、再起動が必要となる。
2.4 トランザクションや操作の実行

プライマリで手動スイッチログファイル

PROD(SYS)> alter system switch logfile;

System altered.

PROD(SYS)> select sequence#,archived,applied from v$archived_log where sequence# > 100;

 SEQUENCE# ARC APPLIED
---------- --- ---------
       101 YES NO
       101 YES NO
       102 YES NO
       102 YES NO
       103 YES NO
       103 YES NO

6 rows selected.

スナップショットスタンバイで上記のログが転送されたが、適用されない
PRODSTB(SYS)> select sequence#,archived,applied from v$archived_log where sequence# > 100;

 SEQUENCE# ARC APPLIED
---------- --- ---------
       101 YES NO
       102 YES NO
       103 YES NO

PRODSTB(SYS)>

データ変更トランザクションを発行
PRODSTB(SYS)> conn jason/oracle
Connected.
PRODSTB(JASON)> select * from tab;

no rows selected

PRODSTB(JASON)> create table t_obj as select * from dba_objects;

Table created.

PRODSTB(JASON)> insert into t_obj select * from dba_objects;

11776 rows created.

PRODSTB(JASON)> commit;

Commit complete.

PRODSTB(JASON)> select count(*) from t_obj; 

  COUNT(*)
----------
     23552

PRODSTB(JASON)>

3. 元のフィジカル・スタンバイに戻す

3.1 スナップショットスタンバイを停止してMOUNTにする
PRODSTB(JASON)> conn / as sysdba
Connected.
PRODSTB(SYS)> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
PRODSTB(SYS)> startup mount 
ORACLE instance started.

Total System Global Area  368263168 bytes
Fixed Size                  1313456 bytes
Variable Size             301991248 bytes
Database Buffers           58720256 bytes
Redo Buffers                6238208 bytes
Database mounted.
PRODSTB(SYS)>
3.2 フィジカル・スタンバイに戻す
PRODSTB(SYS)> alter database convert to physical standby;

Database altered.

PRODSTB(SYS)> shutdown immediate;
ORA-01507: database not mounted

ORACLE instance shut down.
PRODSTB(SYS)> startup     
ORACLE instance started.

Total System Global Area  368263168 bytes
Fixed Size                  1313456 bytes
Variable Size             301991248 bytes
Database Buffers           58720256 bytes
Redo Buffers                6238208 bytes
Database mounted.
Database opened.
PRODSTB(SYS)> select name, db_unique_name, open_mode, database_role, switchover_status from v$database;

NAME      DB_UNIQUE_NAME                 OPEN_MODE  DATABASE_ROLE    SWITCHOVER_STATUS
--------- ------------------------------ ---------- ---------------- --------------------
PROD      PRODSTB                        READ ONLY  PHYSICAL STANDBY RECOVERY NEEDED

PRODSTB(SYS)>
3.3 ログ転送サービスを開始
PRODSTB(SYS)> recover managed standby database using current logfile disconnect;
Media recovery complete.
PRODSTB(SYS)> select sequence#,archived,applied from v$archived_log where sequence# > 100;

 SEQUENCE# ARC APPLIED
---------- --- ---------
       101 YES YES
       102 YES YES
       103 YES YES
       105 YES YES
       104 YES YES
       106 YES IN-MEMORY

6 rows selected.

PRODSTB(SYS)> select thread#, low_sequence#, high_sequence# from v$archive_gap;

no rows selected

PRODSTB(SYS)>

スナップショット・スタンバイモードで発行したトランザクションの確認
PRODSTB(SYS)> conn jason/oracle
Connected.
PRODSTB(JASON)> select * from tab; --# 無くなった。

no rows selected

PRODSTB(JASON)>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License