DB初学者のためのサンプルデータベース構築法

突然、「サンプルデータベース作ってよ!」と言われた時に役立つ記事です。
2022.02.04

こんにちは!AWS事業本部コンサルティング部のたかくにです。

今回は、タイトルの通り検証用のサンプルデータベースを作ってみます。

対象読者

対象読者は以下の通りです。

  • データベースのクラウド側だけ作って来た人(私)
  • DMS(SCT)をやってみようと思うけどサンプルデータベースってどうやって作るのと思っている人(私)
  • そろそろDBわからないじゃ通じなくなってきた人(私)

今回の構成

今回の構成は以下の通りです。

  1. EC2はデータベース接続用に作成します
  2. データベースは、RDS for Oracleで作成しています(ご紹介するGithubにはその他のデータベースエンジンも対応しております。)

追記(2/7):自動スケーリング機能で、大幅にストレージ容量が増加してしまうため、初期ストレージ容量の設定値を変更しました。

RDSの作成

設定箇所が多いため、変更した箇所のみ記載していきます。

今回は、クラウド側というよりOS側に焦点を置いているので省略しております。

設定項目 設定値
テンプレート 開発/テスト
DB 識別子 sample-database
ストレージ割り当て(追記:2/7) 30GB
マスターパスワード sampleDatabase
Virtual Private Cloud (VPC) 任意のVPCを選択ください
サブネットグループ 任意のサブネットグループを選択ください
VPC セキュリティグループ 任意のセキュリティグループを選択ください
最初のデータベース名 database
自動バックアップを有効にします false
拡張モニタリングの有効化 false
ストレージの自動スケーリングは有効にしておいてください。サンプルデータの書き込みが容量不足で終了する恐れがあります。


追記(2/7):初期ストレージ容量を30GBに設定すれば、Storage-Fullにならないため、ストレージ容量の変更を推奨します。

EC2インスタンスの作成

RDS作成完了に待ち時間が生じるため、今のうちにEC2インスタンス構築を行います。

こちらも、設定値を変更した部分のみ記載しております。

設定項目 設定値
AMI Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type (x86)
インスタンスタイプ t2.micro
ネットワーク 任意のVPCを選択ください
サブネットグループ 任意のサブネットグループを選択ください
自動割り当てパブリック IP true(パブリックサブネットに配置しているため)

OS構築

ログイン

% ssh -i XXXXX.pem ec2-user@54.199.214.51
Warning: Permanently added '54.199.214.51' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-192-168-1-62 ~]$

gitのインストール

サンプルデータは、以下のGithubからダウンロードを行います。

そのため、gitのインストールを行います。

aws-samples/aws-database-migration-samples

[ec2-user@ip-192-168-1-62 ~]$ sudo yum install git

Oracle Database Clientのインストール

Oracle DBへ接続するためにOracle Instant Client Downloads for Linux x86-64 (64-bit)からOracle Database Clientのインストールを行います。

Basic PackageSQL*Plus Packageのインストールを行います。

まずは、リンクのアドレスをコピーします。

Basic Package

SQL*Plus Package

コピーができたら、wgetコマンドでダウンロードを行います。

[ec2-user@ip-192-168-1-62 ~]$ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-basic-21.5.0.0.0-1.el8.x86_64.rpm
[ec2-user@ip-192-168-1-62 ~]$ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-sqlplus-21.5.0.0.0-1.el8.x86_64.rpm
[ec2-user@ip-192-168-1-62 ~]$ ls
oracle-instantclient-basic-21.5.0.0.0-1.el8.x86_64.rpm  oracle-instantclient-sqlplus-21.5.0.0.0-1.el8.x86_64.rpm

保存完了したら、インストールを行います。

[ec2-user@ip-192-168-1-62 ~]$ sudo rpm -ivh oracle-instantclient-basic-21.5.0.0.0-1.el8.x86_64.rpm 
[ec2-user@ip-192-168-1-62 ~]$ sudo rpm -ivh oracle-instantclient-sqlplus-21.5.0.0.0-1.el8.x86_64.rpm

サンプルデータスクリプトのダウンロード, 移動

aws-samples/aws-database-migration-samplesからサンプルデータベースを作成するスクリプトをダウンロードしてきます。

[ec2-user@ip-192-168-1-62 ~]$ mkdir sample-db
[ec2-user@ip-192-168-1-62 ~]$ cd sample-db/
[ec2-user@ip-192-168-1-62 sample-db]$ git clone https://github.com/aws-samples/aws-database-migration-samples.git
[ec2-user@ip-192-168-1-62 sample-db]$ ls
aws-database-migration-samples

# インストールスクリプトへの移動 DBエンジン毎にaws-database-migration-samples/から分岐します。
[ec2-user@ip-192-168-1-62 sample-db]$ cd /home/ec2-user/sample-db/aws-database-migration-samples/oracle/sampledb/v1
[ec2-user@ip-192-168-1-62 v1]$ ls
README.md  data  install-onprem.sql  install-rds.out  install-rds.sql  remove-sampledb.sql  schema  user

DBへの接続

Oracleデータベースへの接続は以下の形式で接続を行います。

sqlplus 'dbuser@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=endpoint)(PORT=portnum))(CONNECT_DATA=(SID=DB_NAME)))'
  • dbuser で、前の手順でコピーしたマスターユーザー名を入力します。
  • HOST=endpointで、RDSのエンドポイントを入力します。
  • PORT=portnumで、RDSの接続ポート番号を入力します。
  • SID=DB_NAMEで最初のデータベース名を入力します。
sqlplus 'admin@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sample-database.XXXXXXXXXXXX.ap-northeast-1.rds.amazonaws.com
)(PORT=1521))(CONNECT_DATA=(SID=database)))'

SQL*Plus: Release 21.0.0.0.0 - Production on Thu Feb 3 23:24:11 2022
Version 21.5.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Enter password: sampleDatabase # パスワードを入力後、「Enter」を入力する、今回の場合は「sampleDatabase」
Last Successful login time: Thu Feb 03 2022 23:21:45 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL>

Oracle DBへの接続方法

サンプルデータの流し込み

git cloneしたスクリプト内の.sqlファイルを実行します。

今回は、RDSでデータベースを立ち上げているので、install-rds.sqlを実行します。

SQL> @/home/ec2-user/sample-db/aws-database-migration-samples/oracle/sampledb/v1/install-rds.sql
最大45分かかるようなので気長に待ちましょう!

サンプルデータの確認

SQL> select owner,table_name from dba_tables;
# ===== 省略 ======
OWNER
--------------------------------------------------------------------------------
TABLE_NAME
--------------------------------------------------------------------------------
SYS
UTL_RECOMP_SORTED

SYS
UTL_RECOMP_COMPILED

SYS
WRI$_REPT_COMPONENTS


1830 rows selected.

とりあえず、いっぱい出てきました。

SQLコマンドまだ理解できていないですが、それなりにサンプルデータベースが作れていることがわかりました。

ストレージ容量ケチって自動スケーリングをオフにした場合

SQLコマンド流し込みがやけに早いなぁと思っていたら、RDSがStorage-full(容量不足)で悲鳴をあげていました。

自動スケーリングってすごいなぁと感じれた瞬間でした。

ちなみに、初期ストレージ20GBの状態で、自動スケーリングを有効化を行い、流し終えた時の容量は153 GiBでした。

エンジン毎に異なると思うのでご注意ください。

追記:ストレージ容量をケチって自動スケーリングをオンにした場合

ここから追記になります。

RDSの自動スケーリングは以下の基準でストレージの増加が行われます。

追加のストレージは、次のうちいずれか大きい方の増分です。

  • 5 GiB
  • 現在割り当てられているストレージの 10%
  • 直近 1 時間の FreeStorageSpace メトリクスの変動に基づいて予測される 7 時間のストレージの増分。メトリクスの詳細については、Amazon CloudWatch によるモニタリングを参照してください。

Required Inputs

20GBだと今回のハンズオンの場合、自動スケーリングで7時間分の予測したストレージ増加分(140GB近く)が増えてしまいます。

そのため、ストレージ容量を30GBに変更することで、急な自動スケーリングを回避します。

まとめ

今回は、RDS for Oracleを使用してサンプルデータベースを作成してみました。

私のようにクラウド側だけ触ってきた人が「サンプルデータベース作ってよ!」と急に来た時に役立つ記事かなど個人的には思います。

この記事がどなたかの参考になれば幸いです。

以上、AWS事業本部コンサルティング部のたかくにでした!