【AWS DBS対策】RDS for OracleをAuroraへ移行してみた【前編：環境構築から各DBへの接続まで】

AWS DBS合格に役立った公式のハンズオンを触った過程を記事にしました。他の方の参考になれば幸いです。AWS DBSを勉強中の方はぜひともやってみてください。**手順や操作は少々アレンジしています。**
※元のハンズオンは[こちら](https://docs.aws.amazon.com/dms/latest/sbs/chap-rdsoracle2aurora.steps.html)で、本記事では「Step 1: Launch the RDS Instances in a VPC by Using the AWS CloudFormation Template」から「Step 4: Test the Connectivity to the Aurora MySQL DB Instance」を対象としています。

# ■前提
・AWSのアカウントを所持している
・OSはWindows 11
・2022年12月28日時点での情報を参考にしている

# ■構成図
RDS OracleからRDS Auroraへマイグレーションを行います。
AWS内のリソースについてはAWS Database Migration Service(Replication Instance)を除き、AWS CloudFormationのテンプレートでサクッと作成します。左下のSchema Conversion Tool(以下SCT)とSQL Clientはローカルに落とします。アーキテクチャの詳細は[こちら](https://docs.aws.amazon.com/dms/latest/sbs/chap-rdsoracle2aurora.architecture.html)。アイコンは古いですが、元ページのものをそのまま使用しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/39f033de-67ad-a2ee-232a-c355935166e2.png)

# ■操作手順
## ・環境構築
### - ダウンロード
以下のものをダウンロードします。
|項目名  |説明  |ダウンロード先|ダウンロード後のディレクトリorファイル名|
|---|---|---|----|
|AWS CloudFormation Template  |ハンズオンで必要なリソースを作成するためのファイルです。AWS CloudFormationで使用します。|[こちら](http://docs.aws.amazon.com/dms/latest/sbs/samples/dms-sbs-RDSOracle2Aurora.zip)。**ダウンロード後、解凍してください。**|dms-sbs-RDSOracle2Aurora|
|SQL Workbench/J|無料のSQLクライアントツールです。JDBCドライバを入れていれば、さまざまなDBMSと接続しSQLを実行できます。|[こちら](https://www.sql-workbench.eu/Workbench-Build129-with-optional-libs.zip)。**ダウンロード後、解凍してください。**|Workbench-Build129-with-optional-libs|
|the JDBC driver|無料のOracle用のJDBCドライバです。ちなみにJDBC driverとは、Javaプログラムを用いてDBを動かす**J**ava **D**ata**b**ase **C**onnectivityのドライバです。|[こちら](https://download.oracle.com/otn-pub/otn_software/jdbc/218/ojdbc11.jar)。|ojdbc11.jar<br>(単体ファイルです)|
|the MySQL JDBC driver|MySQL用のJDBCドライバです。|[こちら](https://dev.mysql.com/downloads/file/?id=513754)。ページ先で「No thanks, just start my download.」を選択するとダウンロードが始まります。|mysql-connector-j-8.0.31|
|AWS Schema Conversion Tool(AWS SCT)|データベースエンジン間で既存のデータベーススキーマを変換できます。AWSの公式ドキュメントは[こちら](https://docs.aws.amazon.com/ja_jp/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)。|[こちら](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html)。**ダウンロードしたファイルを解凍後、「AWS Schema Conversion Tool-1.0.669.msi」を実行** します。画像はないですが、「次へ」をひたすら押して、インストールします。|aws-schema-conversion-tool-1.0.latest|

### - SQL Workbench/Jの設定
「Workbench-Build129-with-optional-libs」内の「SQLWorkbench64.exe」をダブルクリックし、SQL Workbench/Jを開きます。**(この操作は以降「SQL Workbench/Jを開く」と表現します！)**　<br>Javaのランタイム(jre)が入っていない場合、下記画面が出ます。自分は入れてなかったので「Download JRE」をクリックしました。![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/5bd6f5c9-7900-5ef1-4067-e055c3a1ed1e.png)
ダウンロードが終わったらもう一度「SQLWorkbench64.exe」をダブルクリックします。
左下のManage driversを選択します。![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/39ee48f0-69be-a129-6f16-23860eb24be6.png)
Oracleを選択して、ファイルアイコンをクリックします。![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/5c653187-adb7-96df-bfcd-d9c0f5366502.png)
上記でダウンロードしたojdbc11.jarを選択してOKを選択します。![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/1a18b0e3-6df6-b04c-0ecf-863bb1a3d474.png)
OKを選択します。![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/738fcaa5-4377-53a4-7b9f-16027ded6d65.png)
画像にないですがもう一度左下のManage driversを選択し、MySQLを選択します。![スライド6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/d851b7eb-cd26-0361-fbe0-b878b763d158.png)
「mysql-connector-j-8.0.31」内の「mysql-connector-j-8.0.31.jar」を選択します。![スライド7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/6d09b69f-e722-c970-5672-f25480591a32.png)
OKを選択します。![スライド8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/6a7bd5bc-6372-0997-89af-89de74d7a187.png)

### -AWS SCTの設定
スキーマ変換の際に用いるドライバのパスを選択します。
「Setting」、「Global settings」、「Drivers」の順に選択後、「Oracle driver path」と「MySQL driver path」をそれぞれ設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/f32c69a8-083d-d395-f2d8-496a8fa742e1.png)



### -AWS CloudFormationのスタック作成
AWSコンソールのAWS CloudFormationへいきます。
スタックの作成を選択し、先ほどダウンロードして解凍した「dms-sbs-RDSOracle2Aurora」内の「Oracle_Aurora_For_DMSDemo.template」を選択し、「次へ」を選択する。![スライド9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/31bc1d31-06d1-8421-2080-00a3e793e08a.png)

次の画面ではスタックの名前は自由、IPアドレスについては[こちら](https://www.whatsmyip.org/)を参考に入力する。例えば「Your IP Address is 123.123.123.123」だったら「123.123.123.123/32」と入力。![スライド10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/94012f02-47da-2232-2085-a69255c3c0cb.png)
その他のパラメータは以下の通りで自動入力されます。

|項目名  |値  |
|---|---|
|OracleDBName  |ORCL  |
|OracleDBUsername  |oraadmin|
|OracleDBPassword  |oraadmin123|
|AuroraDBUsername  |auradmin|
|AuroraDBPassword  |auradmin123|

画像はありませんが「次へ」を選択し、そのまた次の画面で一番下まで行き「送信」を選択します。15-20分ほど待つとリソースが作成されるので待ちます。二つのパラメータAuroraJDBCConnectionStringとOracleJDBCConnectionStringの値をそれぞれメモします。![スライド11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/bd3e11e3-795a-8607-44dc-6fb009cd80f8.png)

### - Oracle DBインスタンスへの接続及びサンプルスキーマ作成
SQL Workbench/Jを開く。
左上のファイルアイコンを選択し、下記表のパラメータを入力してから、「Test」を選択します。![スライド12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/b2afc5b4-0789-cf2e-1d2d-4193819b635a.png)
「succussful」を確認したら、「OK」を選択します。![スライド13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/43874c51-5c8c-d32c-0eeb-43abd19965cd.png)
そして右下の「OK」を選択したら、コネクションが作成されます。![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/7719df6d-0086-13db-1a8d-1b73b8650b5d.png)


Statement1に、「dms-sbs-RDSOracle2Aurora」内の「Oracle-HR-Schema-Build.sql」のSQL文の内容をエディタ等で開いてコピペします。「SQL」の「Excute All」を選択します。これでHRに関する情報がDBに書き込まれます。HRとは「Human Resource」の略であり、人的資源のことです。![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/a765bb38-e8b3-9148-7ba5-feb94424cec2.png)


ちなみにHRというユーザーがいませんよとエラーが出ますが、この時点では無視して大丈夫なので「Ignore this error」を選択します。![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/70d0111e-9885-1ec3-941d-539fff4e14a5.png)

MessagesにScript exetution finishedと表示されれば、作業完了です。
![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/d726ad4e-12a9-5ed3-d920-ae25dd02ee0e.png)


新たに以下の内容をStatement1に入力し、再度「SQL」の「Excute All」を選択します。HRスキーマのオブジェクトタイプとカウントが正常に作成されたことを確認するためです。
```sql
Select OBJECT_TYPE, COUNT(*) from dba_OBJECTS where owner='HR'
GROUP BY OBJECT_TYPE;
```
すると以下のような結果が得られます。これで確認完了です。
|OBJECT_TYPE  |COUNT(*)  |
|---|---|
|INDEX  |8  |
|PROCEDURE  |2|
|SEQUENCE  |3|
|TABLE  |7|
|VIEW |1|

さらに以下の内容をStatement1に入力し、再度「SQL」の「Excute All」を選択します。

```sql
Select CONSTRAINT_TYPE,COUNT(*) from dba_constraints  where owner='HR'
	AND (CONSTRAINT_TYPE IN ('P','R')OR SEARCH_CONDITION_VC NOT LIKE '%NOT NULL%')
	GROUP BY CONSTRAINT_TYPE;
```

さらに以下の内容をStatement1に入力し、再度「SQL」の「Excute All」を選択します。

```sql
BEGIN
    dbms_stats.gather_schema_stats('HR');
END;
/
```

さらに以下の内容をStatement1に入力し、再度「SQL」の「Excute All」を選択します。

```sql
SELECT table_name, num_rows from dba_tables where owner='HR'  order by 1;
```

すると以下のような結果が得られます。従業員の働く部署や仕事内容などのテーブルがあることが確認できますね。
|TABLE＿NAME  |NUM＿ROWS |
|---|---|
|COUNTRIES|25  |
|DEPARTMENTS  |27|
|EMOLOYEES |107|
|JOBS|19|
|JOBS_HISTORY |10|
|LOCATIONS|23|
|REGIONS|4|

## ・Aurora DB インスタンスへの接続確認
SQL Workbench/Jを開く。
左上のファイルアイコンを選択し、下記表のパラメータを入力します。
|項目名  |値  |
|---|---|
|(項目名はないが一番上の空欄)  |RDSAuroraConnection  |
|Driver|MySQL|
|URL|上でコピーしたAuroraJDBCConnectionStringの値|
|Username|auradmin|
|Password|auradmin123|

入力が完了したら「Test」を選択します。![スライド17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/9845d4d5-7784-7285-5c16-ef88d5d06d98.png)

「succussful」を確認したら、「OK」を選択します。![スライド18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/c8d28d74-a20a-4836-cab5-71bfc012d329.png)


そして右下の「OK」を選択したら、コネクションが作成されます。
![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986198/67c29062-b02f-a055-d128-a7168ddb4fdb.png)


Statement1に、以下コードを入力します。
```sql
SHOW DATABASES;
```
すると以下のような結果が得られます。
|Database|
|---|
|information_schema|
|mysql|
|performance_schema|
|sys|

# ■最後に
ここまで環境構築と各DBへの接続を行いました。次回はメイン項目となるDBのスキーマ変換とデータ移行を行います。続きは[こちら](https://qiita.com/vallack5296/items/da0de1e0876b329704a4)からどうぞ。

# 参考URL一覧
## AWS公式
・[『Step-by-Step Migration』](https://docs.aws.amazon.com/dms/latest/sbs/chap-rdsoracle2aurora.steps.html)
・[『AWS Schema Conversion Tool とは』](https://docs.aws.amazon.com/ja_jp/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
・[『Java ランタイム環境とは』](https://aws.amazon.com/jp/what-is/java-runtime-environment/)
## その他
・[『SQLクライアントはこれひとつでOK！ あらゆるDBMSで使える「SQL Workbench/J」をデータ解析で活用しよう』](https://codezine.jp/article/detail/10788)
・[『JDBC(e-Words)』](https://e-words.jp/w/JDBC.html)
・[『DBMS_STATS』](https://docs.oracle.com/cd/E57425_01/121/ARPLS/d_stats.htm)