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

2019/08/16

Amazon RDS for ORACLE - POINT IN TIME R...

Amazon RDS for ORACLE - POINT IN TIME RECOVERY

 

 

■はじめに

ORACLEデータベースに限らず、誤ってテーブルのデータを消したり、変更したりしてしまった場合、

RDBMSのPOINT IN TIME RECOVERYでデータベースを復元する機能があります。

今回はAmazon Relational Database Service (Amazon RDS) for OracleのPOINT IN TIME RECOVERYについて説明・紹介したいと思います。

※POINT IN TIME RECOVERYはRestoring a DB Instance to a Specified Timeと呼ばれることもあります。

現在Amazon RDS for ORACLEに搭載されているFlashback機能の中でFlashback Table , Flashback Query, Flashback Transaction Queryがありますが、Flashback Databaseは使用できません。

そのため、データベース全体を特定時点に復元するには、AWSが提供しているPOINT IN TIME RECOVERY機能でデータベースインスタンスをまるごと復元する必要があります。

チュートリアルを中心に説明して行きます。

 

 

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

Amazon RDS for ORACLEの構成

・エディション Oracle Standard Edition Two

・バージョン Oracle 12.1.0.2v17

・ライセンス license-included

・テンプレート 本番稼働用

・DBインスタンス識別子 awscomt

・DBインスタンスサイズ db.m5.xlarge (vCPU:4,RAM:16GiB,EBS:3500Mbps)

・ストレージタイプ プロビジョンドIOPS(SSD)

・ストレージ割り当て 100GiB

・プロビジョンドIOPS 1000

・マルチAZ配置 スタンバイインスタンスを作成する

・セキュリティグループ <Oracleクライアントから接続できるように設定してください>

・データベース名 DB1

・DBパラメータグループ デフォルト

・Option Group デフォルト

・文字セット AL32UTF8

・自動バックアップの有効化 はい

今回はデータベースへの接続用端末を一台用意しました。

 

周辺端末・ツール

今回はデータベースの内容(テーブルなど)を確認するために、SQL発行ツール(Oracle SQL*Plusなど)を用意して、端末(Windows)にインストールしております。

 

 

■チュートリアル

このチュートリアルを開始する前に、必ず上記のAmazon RDS for ORACLEと端末にOracleクライアントをインストールしてください。

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

・ AWS RDS for ORACLE

・ Amazon Elastic Compute Cloud (Amazon EC2)

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

 

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

・上記の構成で作成しても、最小構成で作成しても構いません。

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

エンジンのオプション.png

 

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

データベース接続する必要なホスト名、ポート番号、サービス名、データベースユーザー名、パスワードを入力して、接続します。

2.png

 

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

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

 

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

 

create table "Table01"

(

Id NUMBER(19) generated by default on null as identity

constraint "PK_Table01"

primary key,

TableName NVARCHAR2(2000),

InsertDateTimeString NVARCHAR2(2000),

InsertDateTime TIMESTAMP(7) not null

)

 

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

 

// loop 1200 time

for( int i = 0 ; i < 1200 ; i++ )

{

//insert into Table01

await OracleDbConnection.Table01s.AddAsync( new Table01() );

//insert into Table02

await OracleDbConnection.Table02s.AddAsync( new Table02() );

//COMMIT

await OracleDbConnection.SaveChangesAsync();

//Sleep one Second

Thread.Sleep(1000);

}

 

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

select * from "Table01";

3.png

 

ステップ5_POINT IN TIME RECOVERY

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

4.png

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

 

5.png

※POINT IN TIME RECOVERY操作でデータベースホスト名を新たに作成する必要がありますので、データベースクライアントからの接続文字列も更新する必要があります。

 

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

select * from "Table01";

6.png

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

 

 

■まとめ

同一データベースに対してPOINT IN TIME RECOVERY操作するのではなく、事前に作成されたデータベースから取得していたバックアップとREDOログを使って、新たにデータベースを作成する必要があります。

結果的に2つのデータベースが出来上がるので、本番環境ではPOINT IN TIME RECOVERY操作の後に不要なデータベースも削除する必要があります。

 

次回はこのPOINT IN TIME RECOVERYを使用して、特定のテーブルのみ任意の時刻に復元する手順を確認していきます。

リストへ戻る

技術Topics

このサイトをシェアする