NEWSニュース&ブログ

RDS for Oracleのバックアップ検討中の人注目!(③RDSのバックアップとリカバリ)

この記事は最終更新から10年以上経過しています。内容が古くなっている可能性があります。

投稿日:2014/9/19

今回は、「Oracle+AWS」の環境がハードウェア・OS・ミドルウェアリソースなしでスペックが伸縮可能で、短時間でセットアップができ、作業後は即削除可能なAmazon Relational Database Service (以下RDS)のリカバリについて記載します。
前回は最新時刻へのリカバリについて書きましたが、今回は特定時刻へのリカバリ方法について検証します。
今回も自動化バックアップとDBスナップショットを使用したリカバリについて確認をします。
(自動化バックアップとDBスナップショットについてはこちらをご参照ください。)

 

検証で使用する環境と実施する内容

検証で使用する環境を紹介します。
AWS上にRDS(Oracle 11gR2)を一つ作成し、検証環境上のOracle Client 11gR2から接続します。

図1:検証環境の構成 ・実施する内容

①テストデータ挿入
②自動化バックアップを使用した最新時刻へのリカバリ
③リカバリ結果確認
⇒①~③はブログ「RDS for Oracleのバックアップ検討中の人注目!(②RDSのバックアップとリカバリ)」を参照してください。

今回は以下の④~⑥を実施!!!
④テストデータ挿入
⑤自動化バックアップを使用した特定時刻へのリカバリ
⑥リカバリ結果確認

⑦テストデータ確認
⑧DBスナップショットを使用したリカバリ
⑨リカバリ結果確認
⑩テストデータ挿入
⑪DBスナップショットを使用したリカバリ(同一DBインスタンス名)
⑫リカバリ結果確認

今回リカバリ確認する作業の流れは以下の通りです。

図2:リカバリ確認する作業の流れ ・5分毎にデータを挿入後、1回目のデータ挿入直後の時間を指定してリカバリを実施します。
・リカバリ後のデータ挿入状態を確認します。

では検証結果を見ていきます。

 

④ テストデータ挿入

(1)5分毎にテストデータをinsert
リストアポイントを確認するために、テストテーブルを作成しテストデータをinsertします。

1)テストテーブルの確認
以下のコマンドを実行しテストテーブルを作成します。
SQL> select * from test_table;
SQL> create table test_table (no varchar2(5), text varchar2(10)) tablespace USERS;
13:05:39 SQL> select * from test_table;
select * from test_table
              *
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。

13:05:42 SQL> create table test_table (no varchar2(5), text varchar2(10)) tablespace USERS;
表が作成されました。

 

2)テストデータ挿入
以下のコマンドを実行しテストデータを挿入します。
それぞれ13:05、13:10、13:15、13:20に実行します。
--13:05に実行
SQL> insert into test_table (no,text) values ( '1305','AAAAAAAAAA');
SQL> commit;
--13:10に実行
SQL> insert into test_table (no,text) values ( '1310','BBBBBBBBBB');
SQL> commit;
--13:15に実行
SQL> insert into test_table (no,text) values ( '1315','CCCCCCCCCC');
SQL> commit;
--13:20に実行
SQL> insert into test_table (no,text) values ( '1320','DDDDDDDDDD');
SQL> commit;
13:05:45 SQL> insert into test_table (no,text) values ( '1305','AAAAAAAAAA');
1行が作成されました。

13:05:57 SQL> commit;
コミットが完了しました。

13:06:04 SQL> select * from test_table;
NO         TEXT
---------- --------------------
1305       AAAAAAAAAA

13:06:09 SQL>
~中略~
13:10:51 SQL> insert into test_table (no,text) values ( '1310','BBBBBBBBBB');
1行が作成されました。

13:10:56 SQL> commit;
コミットが完了しました。

13:11:04 SQL> select * from test_table;
NO         TEXT
---------- --------------------
1305       AAAAAAAAAA
1310       BBBBBBBBBB
~中略~

13:15:11 SQL> insert into test_table (no,text) values ( '1315','CCCCCCCCCC');
1行が作成されました。

13:15:17 SQL> commit;
コミットが完了しました。

13:15:21 SQL> select * from test_table;
NO         TEXT
---------- --------------------
1305       AAAAAAAAAA
1310       BBBBBBBBBB
1315       CCCCCCCCCC
~中略~
13:20:03 SQL> insert into test_table (no,text) values ( '1320','DDDDDDDDDD');
1行が作成されました。

13:20:10 SQL> commit;
コミットが完了しました。

13:20:14 SQL> select * from test_table;
NO         TEXT
---------- --------------------
1305       AAAAAAAAAA
1310       BBBBBBBBBB
1315       CCCCCCCCCC
1320       DDDDDDDDDD

 

3)テストテーブル削除
リストアが実行されたことを確認するために、テストテーブルを削除します。
13:20:47 SQL> drop table test_table purge;
表が削除されました。

13:20:50 SQL> select * from test_table;
select * from test_table
              *
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。

 

 

(2)ログスイッチ確認
5分毎にログスイッチが実行されていることを確認します。

1)アラートログから確認
「Instances」画面の最下部の「Logs」ボタンを押します。
「Recent Events & Logs」タブの最下部付近に「trace/alert_.log」 が表示されていることを 確認し「view」ボタンを押します。
5分毎に以下が表示されていることを確認します。

 ・Thread 1 advanced to log sequence <ログ番号> (LGWR switch)
 ・Archived Log entry <番号> added for thread 1 sequence <ログ番号> ID <文字列> dest 1:


例として以下のように出力されます。

図3:ログスイッチ確認

 

2)(参考) v$logから確認
以下のコマンドを実行し5分毎に「STATUS」列の「CURRENT」が循環移動していることを確認します。
SQL> select GROUP#,THREAD#,SEQUENCE#,MEMBERS,STATUS from v$log;
例として以下のように表示されることを確認します。
13:15:10 SQL> select GROUP#,THREAD#,SEQUENCE#,MEMBERS,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#    MEMBERS STATUS
---------- ---------- ---------- ---------- --------------------------------
         1          1         27          1 ACTIVE
         2          1         28          1 CURRENT ★
         3          1         25          1 ACTIVE
         4          1         26          1 ACTIVE


13:15:11 SQL> insert into test_table (no,text) values ( '1315','CCCCCCCCCC');
1行が作成されました。

13:15:17 SQL> commit;
コミットが完了しました。

13:15:21 SQL> select * from test_table;
NO         TEXT
---------- --------------------
1305       AAAAAAAAAA
1310       BBBBBBBBBB
1315       CCCCCCCCCC


13:15:26 SQL> select GROUP#,THREAD#,SEQUENCE#,MEMBERS,STATUS from v$log;

    GROUP#    THREAD#  SEQUENCE#    MEMBERS STATUS
---------- ---------- ---------- ---------- --------------------------------
         1          1         27          1 ACTIVE
         2          1         28          1 ACTIVE
         3          1         25          1 CURRENT ★
         4          1         26          1 ACTIVE


13:15:29 SQL>

 

⑤ 自動化バックアップを使用した特定時刻へのリカバリ

(1)自動化バックアップからリストアを実行
「Instances」画面で「Instance Actions」のプルダウンから「Restore to Point in Time」を押します。

図4:自動化バックアップからリストアを実行

 

(2)復旧時刻指定とDBインスタンスパラメータ指定

「Restore DB Instance」画面で特定時刻を指定します。
 1. 「Use Custom Restore Time」にチェックを入れます。
 2. 「MMMM d,y」と表示されている項目をクリックし、カレンダーでリカバリする日を指定します。
 3. 時刻の項目にリカバリする時間を指定します。
   (今回はデータ挿入1回目直後の13:07に設定します。)

図5:復旧時刻の指定

 

 4. DBインスタンスのパラメータを設定してリカバリを実行します。
 例として以下のようにDBインスタンスパラメータを指定し、「Launch DB Instance」を押します。
 (画像一部省略)

図6:DBインスタンスパラメータ指定 図7:DBインスタンスパラメータ指定

 

⑥リカバリ結果確認

(1)リカバリ完了確認
「Instances」画面でリストアしたDBインスタンス名の「Status」列が「creating」から「available」に変わることを確認します。

図8:リカバリ完了確認 図9:リカバリ完了確認 (2)リカバリ完了確認(アラートログ)
「Instances」画面の最下部の「Logs」ボタンを押します。
「Recent Events & Logs」タブの最下部付近に「trace/alert_.log」 が表示されていることを 確認し「view」ボタンを押します。
例として以下のログが表示されていることを確認します。

・ALTER DATABASE OPEN RESETLOGS
・RESETLOGS after incomplete recovery UNTIL CHANGE <SCN番号>

図10:リカバリ完了確認(アラートログ)

 

(3)リカバリ完了確認
リストアしたDBインスタンスに接続し、リストアポイントで指定した時刻までの挿入したデータが復旧していることを確認します。

1)DBインスタンス接続
以下のコマンドを実行し、DBインスタンスへ接続します。
(事前にOracle Clientのtnsnames.oraにORCL2の接続情報を追記しています。)
C:\app\administrator> sqlplus oracle@orcl2
SQL> select instance_name from v$instance;
例として以下のようにリストアしたDBインスタンスに接続できることを確認します。
c:\app\administrator\test>sqlplus oracle@orcl2

SQL*Plus: Release 11.2.0.4.0 Production on 木 9月 11 13:44:57 2014

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

パスワードを入力してください:

Oracle Database 11g Release 11.2.0.4.0 - 64bit Production

に接続されました。
SQL>
SQL> set time on

13:45:29 SQL> select instance_name,status from v$instance;

INSTANCE_NAME                    STATUS
-------------------------------- ------------------------
ORCL2                            OPEN

13:45:33 SQL>

2)データの確認
以下のコマンドを実行し、データを確認します。
SQL> select * from test_table;
以下のようにテーブルが復旧していることが確認できます。
今回は13:07がリストアポイントになりますので、13:07以降の更新処理が反映されていないことが確認できます。
13:45:34 SQL> select * from test_table;

NO         TEXT
---------- --------------------
1305       AAAAAAAAAA

13:45:55 SQL>

 

以上が、自動化バックアップを使用した特定時刻へのリカバリ検証になります。
自動化バックアップを使用したリカバリではDBインスタンス名を変更してリストアを行います。Oracle Database内ではデータベースオープン時にリセットログを行っており、不完全リカバリが実行されていることが確認できます。ソースと同一のインスタンス名でリストアを行う場合は、起動しているDBインスタンスを削除する必要があります。削除時に最終バックアップとしてDBスナップショットを取得し、そのDBスナップショットからソースと同一のDBインスタンス名でリストアを行います。そのため自動化バックアップを使用したリカバリは全て、インスタンス名を変更した不完全リカバリを行うこととなります。

以上