ニュース&ブログ
RDS for Oracleのバックアップ検討中の人注目!(③RDSのバックアップとリカバリ)
この記事は最終更新から10年以上経過しています。内容が古くなっている可能性があります。
投稿日:2014/9/19

前回は最新時刻へのリカバリについて書きましたが、今回は特定時刻へのリカバリ方法について検証します。
今回も自動化バックアップとDBスナップショットを使用したリカバリについて確認をします。
(自動化バックアップとDBスナップショットについてはこちらをご参照ください。)
検証で使用する環境と実施する内容
検証で使用する環境を紹介します。AWS上にRDS(Oracle 11gR2)を一つ作成し、検証環境上のOracle Client 11gR2から接続します。
図1:検証環境の構成

①テストデータ挿入
②自動化バックアップを使用した最新時刻へのリカバリ
③リカバリ結果確認
⇒①~③はブログ「RDS for Oracleのバックアップ検討中の人注目!(②RDSのバックアップとリカバリ)」を参照してください。
今回は以下の④~⑥を実施!!!
④テストデータ挿入
⑤自動化バックアップを使用した特定時刻へのリカバリ
⑥リカバリ結果確認
⑦テストデータ確認
⑧DBスナップショットを使用したリカバリ
⑨リカバリ結果確認
⑩テストデータ挿入
⑪DBスナップショットを使用したリカバリ(同一DBインスタンス名)
⑫リカバリ結果確認
今回リカバリ確認する作業の流れは以下の通りです。
図2:リカバリ確認する作業の流れ

・リカバリ後のデータ挿入状態を確認します。
では検証結果を見ていきます。
④ テストデータ挿入
(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_
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インスタンスパラメータ指定


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


「Instances」画面の最下部の「Logs」ボタンを押します。
「Recent Events & Logs」タブの最下部付近に「trace/alert_
例として以下のログが表示されていることを確認します。
・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;
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インスタンス名でリストアを行います。そのため自動化バックアップを使用したリカバリは全て、インスタンス名を変更した不完全リカバリを行うこととなります。
以上