NEWSニュース&ブログ

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

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

投稿日:2014/9/3

今回は、「Oracle+AWS」の環境がハードウェア・OS・ミドルウェアリソースなしで(BYOLは要ライセンス)、スペックも伸縮可能且つ、短時間でセットアップでき、作業後は即時削除可能なAmazon RDS (以下RDS)サービスのバックアップとリカバリについて記載します。前回はバックアップについて書きましたので、今回はリカバリ方法について検証します。
自動化バックアップを使用したリカバリ方法は、GUIから「Use Latest Restorable Time(復元可能な最新時刻)」か「Use Custom Restore Time(復元可能な特定時刻)」の2通りから選択します。
DBスナップショットを使用したリカバリ方法は、DBスナップショットを取得した時点に復元されます。
例としては、通常は削除しているDBインスタンスを、起動する必要が出てきた時点でバックアップからリストアし起動させることができます。

 

mazon RDSでのリカバリ方法について

自動化バックアップからは、復元可能な最新時刻または復元可能な特定時刻を指定してDBインスタンスを起動することができます。バックアップ保持期間で指定した日時分が復元可能な特定時刻の範囲となります。
(例:バックアップ保持期間が1日の場合、1日よりも前の日時を指定しても復元はできません。)
復元可能な特定時刻の範囲は、エラーメッセージに表示されます。
(下記例の場合は2014年7月16日UTC時刻0:37:03以降の日時を、復元ポイントとして指定する必要があります。)

図1:復元可能な特定時刻指定のエラーメッセージ

 

DBスナップショット(手動バックアップ)を使用してリカバリをする場合、DBスナップショットを取得した時点にリカバリされます。共通の注意点としては、リストアのソースDBインスタンスである既存のDBインスタンスが存在している場合、同一DBインスタンス名を指定してリストアすることはできません。

図2:DBインスタンス名重複のエラーメッセージ

 

RDS ではデフォルトでアーカイブログ運用となっており、また5分毎にREDOログスイッチが実行され、更新されたデータがアーカイブログに保存されます。そのため、自動化バックアップを使用した、復元可能な最新時刻は5分前まで(正確にはリストア実行直前のログスイッチが実行されたタイミングまで)になります。
詳細は以下を参照してください。

 

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

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

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

①-1 テストデータ挿入
①-2 自動化バックアップを使用した最新時刻へのリカバリ
①-3 リカバリ結果確認 (今回は①―1~3までを実施)

②-1 テストデータ挿入
②-2 自動化バックアップを使用した特定時刻へのリカバリ
②-3 リカバリ結果確認
③-1 テストデータ挿入
③-2 DBスナップショットを使用したリカバリ(DBインスタンス名変更)
③-3 リカバリ結果確認
④-1 テストデータ挿入
④-2 DBスナップショットを使用したリカバリ(同一DBインスタンス名)
④-3 リカバリ結果確認

以下に検証結果を記載します。

 

①-1 テストデータ挿入

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

1)テストテーブル作成
以下のコマンドを実行しテストテーブルを作成します。
SQL> create table test_table (no varchar2(5), text varchar2(10)) tablespace USERS;
SQL> select * from test_table;
10:24:23 SQL> create table test_table (no varchar2(5), text varchar2(10)) tablespace USERS;

表が作成されました。

10:24:30 SQL> select * from test_table;

レコードが選択されませんでした。

 

2)テストデータ挿入
以下のコマンドを実行しテストデータを挿入します。
それぞれ10:25、10:30、10:35に実行します。
--10:25に実行
SQL> insert into test_table (no,text) values ( '1025','AAAAAAAAAA');
SQL> commit;
--10:30に実行
SQL> insert into test_table (no,text) values ( '1030','BBBBBBBBBB');
SQL> commit;
--10:35に実行
SQL> insert into test_table (no,text) values ( '1035','CCCCCCCCCC');
SQL> commit;
SQL> select * from test_table;
10:25:01 SQL> insert into test_table (no,text) values ( '1025','AAAAAAAAAA');
1行が作成されました。

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

10:25:06 SQL> select * from test_table;
NO         TEXT
---------- --------------------
1025       AAAAAAAAAA
~中略~
10:30:01 SQL> insert into test_table (no,text) values ( '1030','BBBBBBBBBB');
1行が作成されました。

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

10:30:05 SQL> select * from test_table order by 1;
NO         TEXT
---------- --------------------
1025       AAAAAAAAAA
1030       BBBBBBBBBB
~中略~
10:35:06 SQL> insert into test_table (no,text) values ( '1035','CCCCCCCCCC');
1行が作成されました。

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

10:35:10 SQL> select * from test_table order by 1;
NO         TEXT
---------- --------------------
1025       AAAAAAAAAA
1030       BBBBBBBBBB
1035       CCCCCCCCCC

10:35:12 SQL>

 

3)テストテーブル削除
この後のリカバリ操作でテストテーブルが復旧出来ているかを確認するため、テストテーブルを削除します。
リカバリされたことを確認するため、以下のコマンドを実行しテストテーブルを削除します。
SQL> drop table test_table purge;
SQL> select * from test_table;
10:35:21 SQL>
10:35:21 SQL> drop table test_table purge;
表が削除されました。

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

10:35:24 SQL>

 

(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:


図4:ログスイッチ確認(アラートログ)

 

2)(参考)v$logから確認
以下のコマンドを実行し5分毎に「STATUS」列の「CURRENT」が循環していることを確認します。

図5:ログスイッチ確認(v$log) 

 

①-2 自動化バックアップを使用した最新時刻へのリカバリ

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

図6:自動化バックアップからリストアを実行 (2)復旧時刻指定とDBインスタンスパラメータ指定
「Restore DB Instance」画面で最新時刻を指定します。今回は「Use Latest Restorable Time」を指定します。

1. 「Use Latest Restorable Time」にチェックを入れます

図7:復旧時刻の指定

 

2. DBインスタンスのパラメータを設定してリカバリを実行します
例として以下のようにDBインスタンスパラメータを指定し、「Launch DB Instance」を押下します。

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

 

①-3 リカバリ結果確認

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

図9:リカバリ完了確認 図10:リカバリ完了確認 

 

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

 ・ALTER DATABASE OPEN RESETLOGS
 ・RESETLOGS after incomplete recovery UNTIL CHANGE <SCN番号>
  SCN番号:システム変更番号。OracleDatabaseで使用される変更が行われた論理的な内部タイムスタンプ。

 

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

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

図11:DBインスタンス接続確認

 

2)データの確認
以下のコマンドを実行し、データを確認します。
SQL> select * from test_table;
以下のようにテーブルが復旧していることが確認できます。今回は10:35過ぎにリストアを行っていますので約5分前の10:30までデータが復旧し、10:35以降の更新処理が反映されていないことが確認できます。

図12:データの確認

 

以上が、自動化バックアップを使用した最新時刻へのリカバリ検証になります。約5分前へのリカバリが可能であることが確認できました。次回は自動化バックアップを使用した特定時刻へのリカバリとDBスナップショットを使用したリカバリを検証します。

以上