Azure Data Facatory にて  Oracle Autonomous Database のリンクサービスを作成する方法

## 概要

Azure Data Facatory にて  Oracle Autonomous Database のリンクサービスを作成する方法を共有します。クライアント資格証明(ウォレット)を利用せずに、 Oracle Autonomous Database に Azure Data Fatcory のセルフホステッド統合ランタイムから接続する手順となっております。

追加の接続プロパティとして設定している`encryptionmethod`については、ドキュメントにて次のように説明されています。

> ADF では、(リンクされたサービス内の) 接続文字列に EncryptionMethod=1 を追加できます。 これにより、暗号化方法として SSL/TLS が使用されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4e29438d-6f00-bf30-c457-2191751db802.png)

引用元：[セキュリティに関する考慮事項 - Azure Data Factory | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/data-factory/data-movement-security-considerations#data-encryption-in-transit)


## 事前準備

### 1. Oracle Autonomous Database にてネットワークを設定

Oracle Autonomous Database のページにて、以下が設定されていることを確認。

アクセス制御リストを有効に設定（疎通確認を0.0.0.0/0で実施）
相互TLS (mTLS)認証を不要に設定（相互TLS 相互TLS (mTLS)認証が必要詳細のチェックを外す）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/efdcd914-e36a-847f-28a2-49158baae71b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f7faf5a2-224f-4fdf-ed5f-822f349f3f10.png)

### 2. Oracle Autonomous Database にて接続文字列を取得

Oracle Autonomous Database のページにて、データベース接続 -> TLS認証をTLSに設定 -> {データベース名}_high（例：kpwq304szjg90by8_high）の接続文字列を表示して、`host`と`service_name`の値を控える。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/b0c923bf-2ae6-54bb-8dbc-f954d40921c3.png)

### 3. セルフホステッド統合ランタイムを構築



## 実行手順

### 1. リンクサービスのページにて、`+新規` -> `Oracle`を選び`次`を選択 -> 下記表の設定値を入力 -> `テスト接続` -> `作成`を選択


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d5348d2f-f915-0bf7-26a5-3ffe2ad1b0a1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/18529147-7fc2-4b2f-cbc1-ab4b35bdf94c.png)


| #    | 項目                                 | 設定値                       | 設定値例                                                  |
| ---- | ------------------------------------ | ---------------------------- | --------------------------------------------------------- |
| 1    | ホスト                               | Oracle Database のホスト名   | adb.ap-tokyo-1.oraclecloud.com                            |
| 2    | ポート                               | Oracle Database のポート     | 1521                                                      |
| 3    | 接続の種類                           | 接続の種類                   | Oracle サービス名                                         |
| 4    | サービス名                           | Oracle Database のサービス名 | g55ca460616b750_kpwq304szjg90by8_high.adb.oraclecloud.com |
| 5    | ユーザー名                           | Oracle Database のユーザー名 | ADMIN                                                     |
| 6    | パスワード                           | Oracle Database のパスワード | password                                                  |
| 7    | 追加の接続プロパティ_プロパティ名_01 | encryptionmethod             | encryptionmethod                                          |
| 8    | 追加の接続プロパティ_値_01           | 1                            | 1                                                         |


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/70e48cbd-31aa-6373-6895-2e91c5725bd7.png)

### 2. コピーアクティビティのパイプラインにて動作することを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e4e2e5c2-25ef-5409-2b0f-bc0c61e26419.png)

## 現時点での課題

### 1. Azure 統合ランタイムからの接続が不可

以下のエラーが発生して接続を確率できず。

```python
ERROR [HY000] [Microsoft][ODBC Oracle Wire Protocol driver]SSL certificate chain could be built up using the untrusted certificates but the root could not be found locally.
ERROR [08001] [Microsoft][ODBC Oracle Wire Protocol driver]SSL Handshake Failure reason [error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed].
ERROR [08001] [Microsoft][ODBC Oracle Wire Protocol driver][Oracle]ORA-12203: unable to connect to destination
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9daf8dcc-a05f-3cd0-5004-b71f2f156cc8.png)


### 2. クライアント資格証明(ウォレット)を利用する方法が不明

truststore と truststorepassword を指定したが、次のエラーが発生。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/6ecd6614-7f62-9f47-8296-113ad2050d4f.png)

```text
ERROR [08001] [Microsoft][ODBC Oracle Wire Protocol driver]ORA-12203: unable to connect to destination
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c4264863-195b-c9e2-aec4-547c1a2617d5.png)