AWS Schema Conversion Tool を使ったDB移行

# SCTのインストール
## 準備
### SCTインストールイメージのダウンロード
AWSのサイトから最新のSchema Conversion Toolをダウンロードしますhttps://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html
### JDBCドライバーの準備
ソースDB, ターゲットDB用のJDBCドライバーを準備しておきます
## SCTのインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/9ff76db4-55b8-b59d-61a2-e3b1769b04b1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/5e60aeef-1048-29a7-ab3e-eed7b9bc6cd1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/4930b249-017c-5e5b-24c0-1c301224fef9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/c3101b64-e79b-d34e-a81d-79be1ed24e03.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/c02b9e8a-8f7d-b081-7576-eace2265436d.png)

## JDBCドライバーの配置
ソース, ターゲットの接続に使うJDBCドライバーを配置する

## SCTのJDBCドライバーの設定
Settings →　Global settingsで指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/c9363509-ef40-3c05-6675-2cfb63f8cd09.png)

# SCTの設定
プロジェクトを作成して設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/4aca8851-ef6d-ed41-b6be-c5d2e41570ba.png)
プロジェクトをオープンした画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/195d6a0f-30e1-5e68-23ed-d8ae9cc22ef1.png)

## ソースDBの接続
「Add source」を押して設定する
### DBを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/34665a84-8802-d836-ef3c-84c71a1e9fc5.png)
### 接続情報を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/0bedcfea-3f61-56ac-9b3f-9e6d458e6380.png)
### 接続テスト
「Test connection」を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/00fecca4-7cd4-6efb-ee3e-85306ce41128.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/25594590-c0d2-8b30-8d97-0ccf39dd064d.png)
### 設定反映
「connect」を押して保管する。(もう一度確認が発生)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/962b543b-d5c0-89af-5d36-1ae8cf64f79d.png)
メイン画面で、Sourceのアイコンが接続状態(緑)に変わった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/683b855f-79cb-bbc3-8fb4-0cd00bc4416d.png)

## ターゲットDBの接続
「Add target」を押して設定する
### DBを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/2c97ae97-7c8b-af0e-8950-3c58996aed12.png)

### 接続情報を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/f3fa6c26-1260-ef17-9e6a-363e2bd60425.png)

### 接続テスト
「Test connection」を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/b17f3deb-b974-38e8-b4ba-f7922075cb6c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/dea51356-18b3-a478-eb19-a12ab929a659.png)

### 設定反映
「connect」を押して保管する。
メイン画面で、Sourceのアイコンが接続状態(緑)に変わった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/56ef7d1b-bf80-320b-54bf-e146da8b8af5.png)

## 移行プロジェクトの設定
メイン画面で移行対象のスキーマまで展開する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/d48559ce-d72f-8bc9-92e0-99e1fda2c189.png)

## スキーマの変換
移行対象のスキーマ上のコンテキストメニュー(右クリック)から、「Convert schema」を選択して、スキーマ変換を開始する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/4b2a54af-cb89-153f-2564-b164fd7a2c27.png)
変換が開始される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/89b6d113-3c98-aa5e-93f2-a8b5e2905b37.png)
(2回目以降の実行の場合は、ここで確認が出力されます)
変換終了後、ターゲットDBの対象スキーマを展開して、最新状況「Refresh from database」で変換されたスキーマの存在を確認する
1.amazonaws.com/0/3802444/2167dc53-460a-ba4b-ce33-adfd579e1921.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/8502aa27-2bd2-617f-95fc-cffe0c6c90f1.png)

## ターゲットDBへの反映
「Apply to database」でターゲットDBに反映する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/602a38e0-46a1-bb8b-2f9f-c0e02521a778.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/6dddfe19-1c3e-4ca4-89ed-6ab1641a3bc8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/9f29ab01-71ea-b2f2-96e3-5b6137d2feeb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/73a0edc5-2637-c49a-5df5-b149ad99501d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/46b3c10e-372b-ec75-9e28-f9148e9a5800.png)

# 移行後の確認
SCTのTarget上で反映されたテーブルの存在を実際に確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/0299ff55-9cd4-a7cd-e686-ff2fcd25c0d8.png)
PSQLやA5SQL等のツールで確認する。
## 接続ユーザに対する権限付与
変換を行ったユーザ(今回はadminpg)と異なるユーザで利用する場合、利用ユーザに対して、権限の付与が必要。以下はPSQLを使った例。publicと対象スキーマの利用権限を付与する。
```
psql -h ターゲットDBのアドレス -p 5432 -U adminpg -d pgdb01
GRANT usage ON schema apl,public TO apl
GRANT SELECT,insert,delete,update ON ALL TABLES IN SCHEMA apl TO apl;
GRANT SELECT,insert,delete,update ON ALL TABLES IN SCHEMA public TO apl;
```

## 利用ユーザによる確認
```
psql -h ターゲットDBのアドレス -p 5432 -U apl -d pgdb01
SET search_path TO apl;
\dt
```
\dtの表示例
            リレーション一覧
 スキーマ |   名前   |  タイプ  | 所有者
----------+----------+----------+--------
 apl      | table080 | テーブル | apl
 apl      | table101 | テーブル | apl
 apl      | table102 | テーブル | apl
...

# その他
データの移行はAWSのサービスDatabase Migration Serviceを使います。
DMSにもスキーマ変換の機能があり、利用できるが、できることに若干の制限があります。この検証を行った時点(2024/10月)では、テーブルのコメントが反映されないことは確認されてます。