AWS DMS CDC(差分反映構成) 

# 差分反映(CDC)
ここでは、Database Migration Service(以下DMS)のCDC(変更データキャプチャ)という、ソースのDBの差分をターゲットに継続的に反映し続けるタスクの設定について解説します。
DMSの基本的な構成については、[AWS Database Migration ServiceのDB移行の設定](https://qiita.com/AkioMotoki/items/ac4f6dc9456c5d90c70e)をご確認ください。

## CDCの移行タスクの作成
DMSのデータベース移行タスクを作成します。(前提となる構成については[AWS Database Migration ServiceのDB移行の設定](https://qiita.com/AkioMotoki/items/ac4f6dc9456c5d90c70e)に記載のため割愛。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/5545be31-a81c-379c-4457-e8b7a42bb472.png)
レプリケーションインスタンス、エンドポイントは同様。
移行タイプの選択が異なります。ここでは、「既存のデータを移行して、継続的な変更をレプリケートする」を選択。必要に応じてCDCの動作を変更してください。ここでは停止モードを無効(停止しない設定)を選択。
スキーマの設定等は、他の移行タスクと同様でOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/6665e455-2c0e-26f1-906e-4329e680fef6.png)
移行タスクが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/57c35638-b144-6df9-3b0d-ff9a0196a1b6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/96a24a94-cdbc-1ab7-f763-c315ea50693f.png)

## 移行前評価
移行前評価を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/1d5d5800-0fd6-3c92-aa0b-fb153ee373d1.png)
S3バケットやIAMロールを設定し、利用可能な評価を選択します。
フルロードの時より、前提条件が厳しく、この環境では44個のタスクを選択できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/7965676a-76ef-30d6-98f8-a0d460955711.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/9406d847-f428-b8f1-db99-57f2de5d545a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/1085263e-2421-7bdf-e3d8-586f498cbbec.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/dd072bb3-2c84-747d-20e1-6ed1766a7ab8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/2899d0f2-4b11-2cef-d44e-034e2e4678ec.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/82e12497-084e-ce90-ebbc-fd8a514012cf.png)

## エラーメッセージの対応例
移行前評価が終わると、評価が表示されます。
失敗した評価を選択して対応方法を確認の上、対応します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/da28f949-8e5f-ecb6-41c0-5bd485e705d7.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/beac2b22-f5cd-49ac-020c-e2e331fe4f1b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/32b4b955-2709-ed93-9006-ec0df9df1309.png)


CDCでは、より多くの前提条件が必要とされている。
#### CDC-1 : アーカイブログの時間
アーカイブログの保持期間の指定例。基本的にマニュアルに記載のSQLで対応する。
当記事の検証の環境の都合上、ソースのOracleはRDS for Oracleで構築している。RDSの場合はコマンドラインから利用できる権限が異なるため、代替となるプロシージャー(API)を実行する場合がある。以下は一例
RDS Oracle のアーカイブログ保持を検証
Archived logs retention period is set to value lower than 24 hours, It is recommend to ensure that the source database is configured to retain archived logs for a sufficient time 24 hours is usually enough.
```
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
```

#### CDC#2: 対応テーブル毎のエラー
通常サーバ
```
GRANT READ ON DIRECTORY ONLINELOG_DIR TO dms_user;
GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO dms_user;
```
RDS用コマンド
```
exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
```
#### CDC対応テーブル毎のエラー
CDCへの対応は、テーブル単位での対応が必要になる場合がある。
以下が例
プライマリまたは一意のキーがあるテーブルで補足ロギングが有効になっているかどうかを検証
(Add all columns of the XXX unique index to the supplemental logも同対応でクリア)
``` #:プライマリキーに補足ログ
ALTER TABLE TBLnnnn ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
```
すべての列に補足ログが必要かどうかを検証します
``` #:全列に補足ログ
ALTER TABLE TBLnnnn ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
```
対応後、移行前検証を行い、検証がクリアするまで繰り返す。

## 移行の実行と確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/10f03426-202c-d785-a94c-5bed09dc039e.png)
しばらく待機 (検証環境はデータが少なく30分程度)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/e5f5368f-98f6-e1fe-e242-32e4ca0d66c3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/272cf0eb-8a8e-1fca-f840-0bb69d5ad9d4.png)

# 変更反映を確認
CDCが停止しない設定で構成したため、停止するまで差分反映が継続する。
ソースDBが変更された場合、ターゲットDBも変更される。
データだけでなく、テーブルの作成/削除についても変更が反映される。
つまり、Schema Conversion Toolがなくても、DMSだけでスキーマ変換が反映されるような機能を持ち合わせている。(ただし、テーブルやカラムのコメントが反映されない等、機能は限定的な模様)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/bb2a0aff-e13d-ffbf-00dd-c70102ba2c41.png)
# CDCを手動停止
CDCを停止する。
(ソースDBが変更された場合は、ターゲットDBにも反映する)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/183650f5-b8a8-ef2d-22cc-87088010e130.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/5830acad-bd21-b241-2c1d-c523f9ef58c3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/bd0640ec-9d2c-02c8-e6e3-bd4bd972bb57.png)