
技術Topics
SCSKのOracle on AWSに関する技術情報をご紹介いたします。
SCSKのOracle on AWSに関する技術情報をご紹介いたします。
前回の記事では、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文サンプル
テーブル名「Table02s」の作成SQL文サンプル
一秒間隔でデータを挿入するC# コードのサンプル
ステップ4_挿入されたデータを確認(一部)
select * from "Table01s";
select * from "Table02s";
ステップ5_ POINT IN TIME RECOVERY(データベース全体)
RDSデータベースを選択 > アクション > 特定時点への復元を選択
復元したい時刻を選択し、データベースサーバ構成を最初から入力してください。
以下の画面では2019年8月15日10:30:00 UTC+9に設定しています。
ステップ6_POINT IN TIME RECOVERY後のデータ確認
select * from "Table01s";
select * from "Table02s";
データベースが、復元時に指定した時刻である午前10時30分00秒の状態に戻ったことが確認できました。
ここまでは前回の記事の内容とほぼ同じですが、異なるポイントとしては、テーブルをもうひとつ用意して、同じデータをinsertしていることです。
ステップ7_データベースリンク作成
POINT IN TIME RECOVERYで新規作成されたデータベースから古いデータベースへのデータベースリンクを作成してください。
ステップ8_ダンプファイル作成
復元したいテーブルのみをダンプファイルへエクスポートします。
以下のサンプルはTable01sテーブルのみをダンプファイルへエクスポートするPL/SQLです。
ステップ9_ダンプファイル転送
origin_db02データベースリンクを通してダンプファイルexpdb_tables.dmpを古いデータベースへ運搬します。
ステップ10_ダンプファイルでテーブル復元
TABLE_EXISTS_ACTIONの値をREPLACEに設定して、既存のテーブルの内容を上書きします。
ステップ11_復元されたテーブル確認
テーブル「Tables01s」が復元される前には1200行あったデータが、121行となりました。また、最新データの時刻も10時30分と表示されていることから、無事に復元が完了できたことが確認できます。
Select * from "Table01s";
Select count(*) from "Table01s";
Select * from "Table02s";
テーブル「Table02s」はPOINT IN TIME RECOVERY前の状態を確認できます。
最後に、不要なデータベースとダンプファイルなどはお忘れなく削除してください。
AWS RDS for OracleのPOINT IN TIME RECOVERYとOracleのデータベースリンク、データポンプを組み合わせることで、指定したテーブルの復元に成功しました。
なお、復元したテーブルに外部キーで参照されている場合は、残念ながら別の対処方法を考える必要がありますのでご注意ください。
このサイトをシェアする
ツイート