SCSKのOracle on AWSソリューション

2019/08/20

Amazon RDS for Oracle - POINT IN TIME RE...

Amazon RDS for Oracle - POINT IN TIME RECOVERY(テーブル)

 

 

■はじめに

前回の記事では、Amazon Relational Database Service (Amazon RDS) for Oracleにおいて「データベース全体を指定した時点の状態に復元する」ことをテーマとした内容をご紹介いたしましたが、今回はそれに関連して、「特定のテーブルのみ指定した時点の状態に復元する」ことに着目していきます。

もちろん、上記はOracleデータベース標準搭載されているFlashback機能を利用することで実現可能となりますが、これだけですべてのケースに対応できるわけではありません。

例えば、一定の時間が経過しUNDOが残っていない...といった状態では、Flashback機能でカバーすることは困難となってしまいます。

このような場合、対処方法としては、テーブル単位でAmazon RDS for OracleのPOINT IN TIME RECOVERYを実施することが挙げられます。

以下、手順をチュートリアルの形で説明していきます。

 

 

■チュートリアルの事前準備

Amazon RDS for Oracle

・データベースへの接続用端末を一台

・周辺端末・ツール

 

チュートリアルを開始する前に、Amazon RDS for Oracleを用意し、端末にOracleクライアントをインストールしてください。

今回の例ではテーブル等のデータベースの内容を確認するため、SQL発行ツールはOracle SQL*Plus、端末はWindowsを利用しています。

 

 

チュートリアル

チュートリアルは以下2つの構成(コンポーネント)で実現しています。

・ AWS RDS for Oracle

・ Amazon Elastic Compute Cloud (Amazon EC2)

 ※データベースクライアントツールをインストール済み

 

ステップ1_Amazon RDS for Oracleを作成する

・最小構成で問題ありません。

・データベース作成には10分以上要する場合があります。

 

ステップ2_ Oracleデータベースへの接続

データベース接続する必要なホスト名、ポート番号、サービス名、データベースユーザー名、パスワードを入力し、Oracleクライアントツールで接続します。

 

ステップ3_Oracleデータベーステーブル作成およびデータ投入

このチュートリアルでは、復元できたかを確認しやすいように、一秒間隔で「現在の時刻の文字列」と「現在の時刻のタイムスタンプ」をデータとしてテーブルに挿入しています。

 

テーブル名「Table01s」の作成SQL文サンプル

1.png

 

テーブル名「Table02s」の作成SQL文サンプル

2-2.png

 

一秒間隔でデータを挿入するC# コードのサンプル

2-3.png

 

ステップ4_挿入されたデータを確認(一部)

select * from "Table01s";

select * from "Table02s";

2-4.png

 

ステップ5_ POINT IN TIME RECOVERY(データベース全体)

RDSデータベースを選択 > アクション > 特定時点への復元を選択

2-5.png

 

復元したい時刻を選択し、データベースサーバ構成を最初から入力してください。

以下の画面では2019年8月15日10:30:00 UTC+9に設定しています。

2-6.png

 

ステップ6_POINT IN TIME RECOVERY後のデータ確認

select * from "Table01s";

select * from "Table02s";

2-7.png

 

データベースが、復元時に指定した時刻である午前10時30分00秒の状態に戻ったことが確認できました。

ここまでは前回の記事の内容とほぼ同じですが、異なるポイントとしては、テーブルをもうひとつ用意して、同じデータをinsertしていることです。

 

ステップ7_データベースリンク作成

POINT IN TIME RECOVERYで新規作成されたデータベースから古いデータベースへのデータベースリンクを作成してください。

2-8.png

 

ステップ8_ダンプファイル作成

復元したいテーブルのみをダンプファイルへエクスポートします。

以下のサンプルはTable01sテーブルのみをダンプファイルへエクスポートするPL/SQLです。

2-9.png

 

ステップ9_ダンプファイル転送

origin_db02データベースリンクを通してダンプファイルexpdb_tables.dmpを古いデータベースへ運搬します。

2-10.png

 

ステップ10_ダンプファイルでテーブル復元

TABLE_EXISTS_ACTIONの値をREPLACEに設定して、既存のテーブルの内容を上書きします。

2-11.png

 

ステップ11_復元されたテーブル確認

テーブル「Tables01s」が復元される前には1200行あったデータが、121行となりました。また、最新データの時刻も10時30分と表示されていることから、無事に復元が完了できたことが確認できます。

 

Select * from "Table01s";

2-12.png

 

Select count(*) from "Table01s";

2-13.png

 

Select * from "Table02s";

2-14.png

 

テーブル「Table02s」はPOINT IN TIME RECOVERY前の状態を確認できます。

最後に、不要なデータベースとダンプファイルなどはお忘れなく削除してください。

 

 

■まとめ

AWS RDS for OracleのPOINT IN TIME RECOVERYとOracleのデータベースリンク、データポンプを組み合わせることで、指定したテーブルの復元に成功しました。

なお、復元したテーブルに外部キーで参照されている場合は、残念ながら別の対処方法を考える必要がありますのでご注意ください。

 

2-15.png

リストへ戻る

技術Topics

このサイトをシェアする