Autonomous DatabaseのData Transformsを用いて、異なるADB間においてデータの複製をしてみた。

# はじめに
Data Transformsは、Autonomous Databaseに組み込まれているデータ統合ツールです。Database Actionsからアクセス可能で、様々なソースからAutonomous Databaseにデータをロードして変換するためのツールとして知られています。
今回はData Transformsを用いて、異なるADB間においてデータの複製をしてみました。

こちらは、[「Autonomous DatabaseのData Transformsを用いて、異なるスキーマ間でのデータの複製をしてみた。」](https://qiita.com/bambooseven/items/72ee8a61dfb42c9df1d7)の派生版となります。ぜひ合わせてご覧ください。


# 本記事の前提条件 

* データの転送元のADBインスタンスが1つ構成済みであること
* 下記リンクから**Movie Sales 2020.csv**(売上実績のサンプルデータ)をダウンロードしてあること。
    「[OCIチュートリアル, Oracle Database編, 217: クレデンシャル・ウォレットを利用して接続してみよう](https://oracle-japan.github.io/ocitutorials/database/adb217-use-database-actions/#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)」

* 「 [OCIチュートリアル, Oracle Database編, 403 : Data Transformsを使ってみよう](https://oracle-japan.github.io/ocitutorials/database/adb403-data-transforms/)」を事前に行い、Movie Sales 2020.csvをData Transformsを用いて加工した、MOVIE_SALES_2020Q2という表を使用します。こちらのチュートリアルを試してから本記事を読まれると、理解がスムーズかと思います。


# 作業の大まかな流れ
**～前提条件まで～**
* ADBインスタンス(この記事ではADBtake01)を構築したのちQTEAMというユーザーを作成し、Movie Sales 2020.csvをロードします。
* Data Transformsを開き、MovieStreamという名前でConnectionを作成し、Autonomous Databaseに接続します。
* QTEAMスキーマにロードしてあるデータ(Movie Sales 2020.csv)をインポートします。
* データの変換作業(データの修正、トリミング)を行います。
詳細は、[OCIチュートリアル, Oracle Database編, 403 : Data Transformsを使ってみよう](https://oracle-japan.github.io/ocitutorials/database/adb403-data-transforms/)をご覧ください。

**～本記事～**
- [データを複製する先のADBインスタンス(ADB02take)を作成します。](#データ複製先のadbを作成)
- [ウォレットのダウンロード](#ウォレットのダウンロード)
- [データを複製する先のユーザー(QTEAM_TARGET02)を作成](#データ複製用のターゲットユーザーの作成)
- [Data Transforms上で、データ複製のためのProject (Replicate_Moviestream_to_anotherADB)を作成します。](#データ複製用のprojectを作成)
- [新たにConnection (MovieStream_Target02)を作成します。](#新たにconnectionを作成)
- [Load Dataの機能を使い、データ複製のソースとなるQTEAMから、ターゲットとなるQTEAM_TARGET02にデータを読み込ませます。](#adb間でデータを読み込む)
- [実際にデータが複製できているかを確認します。](#データが複製されたかを確認)

# 実際にデータの複製をしてみた

### データ複製先のADBを作成
前提条件で作成済みのADBインスタンスに加え、データの複製先となるADBを作成します。
[OCIチュートリアル, Oracle Database編, 101: ADBインスタンスを作成してみよう](https://oracle-japan.github.io/ocitutorials/database/adb101-provisioning/)を参考に、インスタンスを作成してください。
* 表示名: 任意 (本記事ではatp02take)
* データベース名: 任意 (本記事ではatp02take)
* ワークロードタイプの選択: トランザクション処理
* デプロイメントタイプの選択: 共有インフラストラクチャ
* OCPU数: 1
* ストレージ: 1
* 自動スケーリング: なし
* パスワード: 任意 (例: Welcome12345＃)
* ネットワークアクセスの選択: すべての場所からのセキュアアクセスを許可
* ライセンスタイプの選択: ライセンス込み

※前提条件までで作成してあるデータの複製元のADB (本記事ではatp01take)も、同様の条件で作成しました。

### ウォレットのダウンロード
上記で作成したADBの詳細画面から「データベース接続」を押し、ウォレットをダウンロードします。後ほどData Transformsにログインし、Connectionを作成する工程でウォレットを使用します。
![qiita_datatransformsADBReplicate_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/1b0e91ee-4976-3299-380e-93cdbd48d330.png)

### データ複製用のターゲットユーザーの作成
1. ADBのコンソール画面からDatabase Actionsを起動し、**データベース・ユーザー**をクリックします。
    ![qiita_datatransformsADBReplicate_1_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/f944f2e6-81d2-a173-ffac-11b7ffa0361f.png)


1. **ユーザーの作成**をクリックします。
    ![qiita_datatransformsADBReplicate_1_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/f3eaaa1a-d9ce-7261-c63e-5a192f4bc36c.png)

1. 次のようにユーザー情報を入力します。

    |  入力項目       |       入力内容 |   
    |:-----------------:|:------------------:|
    | ユーザー        |    QTEAM_TARGET02   |   
    | パスワード   　　|    任意      | 
    | パスワードの確認 |      任意 | 
    |Webアクセス  |    ON  |
    | Webアクセス拡張機能→承認が必要 |  ON|
    |表領域の割当制限DATA|	UNLIMITED|
    
    ![qiita_datatransformsADBReplicate_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/d17208ce-859e-3b1a-a2b5-e89209122649.png)



    * ユーザーを作成ボタンを押す前に、付与されたロールの項目から以下の2つのユーザーロールについて、［付与済］と［デフォルト］の両方にチェックしてください。
    (後からでも編集できます。チェックが付いていないと、起動パッドにData Transformsの項目が表示されませんので、ご注意ください。)
・DWROLE
・DATA_TRANSFORMS_USER
    ![qiita_datatransformsADBReplicate_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/aab5f502-6e45-6c0b-b3bf-564e3a0d0588.png)

    ![qiita_datatransformsADBReplicate_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/42f960e9-2919-5de6-0049-c0fb9049df80.png)


1. Database Actionsの起動パッドに戻り、ADMINユーザーからいったんログアウトして、前提条件で作成してある**QTEAM**ユーザーでログインし直します。

### データ複製用のProjectを作成
1. Data Transformsを起動します。
QTEAMユーザーでDatabase Actionsにログインした状態で、起動パッドを開きます。データ変換の項目をクリックし、QTEAMユーザーの情報を入力すると、Data Transformsが起動します。

1. Home画面からProjectsに移動し、Create Projectを押し、「Replicate_Moviestream_to_anotherADB」という名前のProjectを作成します。
    ![qiita_datatransformsADBReplicate_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/117870c8-e102-ccd9-5da2-a7bcca47cb55.png)

### 新たにConnectionを作成
前提条件でMovieStreamというConnectionを作成済みですが、データ複製のターゲット用としてMovieStream_Target02を新たに作成します。

1. Create Connectionsを押します。
1. * Name：MovieStream_Target02
    * Select a Connection Type: Oracleを選択
    Nextを押します。
    ![qiita_datatransformsADBReplicate_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/1d2f11f3-b49a-229e-747e-ca6993c449b3.png)

1. 
    * Use Credential File: ON
    * Services: 〇〇_low (本記事ではatp02take_low)
    * User: QTEAM_TARGET02
    * Password: 設定したパスワード
    ![qiita_datatransformsADBReplicate_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/8a9e8afe-8623-ef5a-16c6-f37f0977e6a6.png)

    Test Connectionを押し、接続テストに成功したら、通知が画面右上に出ます。成功が確認できたら、Createを押します。
    ![qiita_datatransformsADBReplicate_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/4a2dfdb4-98db-1b9d-696f-008a5a0c7bdb.png)

### ADB間でデータを読み込む
1. Home画面に戻り、Load Dataを押します。すると以下の画像のように、Load Dataの情報を入力する画面が立ち上がってきます。
    * Name: MovieStream_dataLoad_to_atp02take　(例)
    * Project Name: Replicate_Moviestream_to_anotherADB　を選択
    Nextを押します。

    ![qiita_datatransformsADBReplicate_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/40dcd3ba-54cf-8413-f15f-cf47f5dabc7d.png)

1. Source Connectionを入力する画面に移ります。データ複製のためのソースとなるConnectionであるMovieStreamを選択し、スキーマはQTEAMを指定します。
    ![qiita_datatransformsADBReplicate_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/9fc18fbb-e475-5d68-ec3c-75495f3bd168.png)


1. 続いてTarget Connectionを入力する画面に移ります。データの複製先のターゲットとなるConnectionであるMovieStream_Target02を選択します。スキーマはQTEAM_TARGET02を指定します。
    ![qiita_datatransformsADBReplicate_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/25c1a87a-6363-2313-f2ed-59a448b362ee.png)

1. Home画面からProjectsを押し、先ほど作成したReplicate_Moviestream_to_anotherADBのProjectを選択します。
   ![qiita_datatransformsADBReplicate_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/4762a4b9-4a72-207e-5d3c-58b022b947d6.png)


1. 画面左側のData Loadsを選択し、MovieStream_dataLoad_to_atp02takeが表示されているはずなので、このリンクを押します。
    ![qiita_datatransformsADBReplicate_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/f7399223-cf91-f4a2-41d8-b02509cf3db6.png)


1. * MovieStream_dataLoadの詳細画面が表示されます。ソーススキーマのすべての表を見ることができ、該当の表(MOVIE_SALES_2020Q2)を選択します。
    * Recreate, Truncate, Append, Do not Loadの4つのアクション中から、行う作業を選択します。今回はデータの複製を行うので、Recreateを選びます。「保存されていない変更があります。」という注意が表示されたら、必要に応じてフロッピーディスクのアイコンをクリックし、作業の内容を保存してください。保存ができたら、緑色の三角印の実行ボタンを押してください。
    ![qiita_datatransformsADBReplicate_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/f940e17b-8fe1-a182-3d54-182f75989a83.png)

1. 実行ボタンを押した直後は、画面右下のData Load StatusがRunningになっています。
    ![qiita_datatransformsADBReplicate_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/2b979870-3d8b-dd4b-272f-45b0b4a9171b.png)

1. しばらく待つと、ステータスがDoneに変わります。
    ![qiita_datatransformsADBReplicate_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/4309a757-366b-0e1f-e134-9d9fae90c841.png)

これで、ADB間でのデータの読み込みが終わりました。

### データが複製されたかを確認
実際にデータが複製されたかどうかを確認します。

1. データ複製先のADBインスタンスatp02takeの詳細画面から、Database Actionsの起動パッドを開きます。ADMINユーザーからログインしているはずなので、画面右上からQTEAM_TARGET02ユーザーでログインし直します。
1. 起動パッドから、データカタログの項目を選択します。
    ![qiita_datatransformsADBReplicate_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/20fab1d9-36a1-db11-8060-2279afd16fa8.png)

1. 以下のようにQTEAMスキーマから複製されたMOVIESALES_2020Q2の表の情報が表示されます。
    ![qiita_datatransformsADBReplicate_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/eba85969-60d6-4ffc-c1b9-b2b0e1c0a4ae.png)

1. また、起動パッドのSQLからもデータが存在するか確認してみます。
    起動パッド上の開発の欄から、SQLの項目をクリックします。
    ![qiita_datatransformsADBReplicate_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/0c970c3f-cc07-1043-6124-ea0a929abd7d.png)

1. 以下のようにSQL文を打ち込んで実行すると、複製したデータが表示されることが分かります。
   ```
     select * from MOVIE_SALES_2020Q2;
   ```
     ![qiita_datatransformsADBReplicate_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3058002/824e3d6b-714a-f1af-fd58-3862009f4cd1.png)

# まとめ
本記事ではData Transformsを用いて、異なるADB間においてデータの複製をしてみました。

<br>

# 参考資料
* [Autonomous DatabaseのData Transformsを用いて、異なるスキーマ間でデータの複製をしてみた。](https://qiita.com/bambooseven/items/72ee8a61dfb42c9df1d7)
* [OCIチュートリアル, Oracle Database編, 403 : Data Transformsを使ってみよう](https://oracle-japan.github.io/ocitutorials/database/adb403-data-transforms/)

* [LiveLabs, Oracle Data Integrator Web Edition - Intro to Data Transforms](https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/run-workshop?p210_wid=832&p210_wec=&session=113561614505947)

* [Oracle Blogs, Introducing Data Transforms: Built in Data Integration for Autonomous Database](https://blogs.oracle.com/post/introducing-data-transforms-built-in-data-integration-for-autonomous-database)

* [Oracle Blogs, Replicating data from heterogenous sources to the Autonomous Database using the Data Transforms tool](https://blogs.oracle.com/datawarehousing/post/replicating-data-from-heterogenous-sources-to-the-autonomous-database-using-data-transforms)