
技術Topics
SCSKのOracle on AWSに関する技術情報をご紹介いたします。
SCSKのOracle on AWSに関する技術情報をご紹介いたします。
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)
※データベースクライアントツールをインストール済み
・上記の構成で作成しても、最小構成で作成しても構いません。
・データベース作成は10分以上かかる場合があります。
データベース接続する必要なホスト名、ポート番号、サービス名、データベースユーザー名、パスワードを入力して、接続します。
-このチュートリアルでは、復元できたかを確認しやすいように、一秒間隔で「現在の時刻の文字列」と「現在の時刻を時刻データ」をデータとしてテーブルに挿入しています。
テーブル名「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);
}
select * from "Table01";
RDSデータベースを選択 > アクション > 特定時点への復元を選択
復元したい時刻を選択し、データベースサーバ構成を最初から入力してください。
※POINT IN TIME RECOVERY操作でデータベースホスト名を新たに作成する必要がありますので、データベースクライアントからの接続文字列も更新する必要があります。
select * from "Table01";
データベースが、復元時に指定した時刻である午前10時30分00秒の状態に戻ったことが確認できました。
同一データベースに対してPOINT IN TIME RECOVERY操作するのではなく、事前に作成されたデータベースから取得していたバックアップとREDOログを使って、新たにデータベースを作成する必要があります。
結果的に2つのデータベースが出来上がるので、本番環境ではPOINT IN TIME RECOVERY操作の後に不要なデータベースも削除する必要があります。
次回はこのPOINT IN TIME RECOVERYを使用して、特定のテーブルのみ任意の時刻に復元する手順を確認していきます。
このサイトをシェアする
ツイート