とにかく速い Oracle Autonomous Database Connector

# はじめに（というか結論）
2024年IDMCは7本の新規コネクターをリリースしました。その中でも、今年最後のリリースである11月に提供されたOracle Autonomous Database Connectorと既存のOracle Connectorと性能比較してみました。

ターゲットに対してサポートされている操作は現在Insertのみですが、**とにかく速い！** 510万行の個人データを含む1GBのデータロードが「ターゲットの一括ロードの有効化」をYesにしたOracle Connectorでは50分36秒かかっていたのに、Oracle Autonomous Database Connectorでは4分35秒で完了しました。何度実行してもこの10倍の性能差は変わりませんでした。
# 検証結果
マッピングは何時ぞやも使用したルーターを使って血液型によってターゲットを振り分けるという至ってシンプルな内容です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/663d4da9-79f2-177f-7de6-95813ba8918a.png)
**Oracle Connector（Oracleサブタイプ : Oracle ADB）での実行結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/e989bc0d-d60c-1622-c872-c83c19dc1728.png)
**Oracle Autonomous Database Connector での実行結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/065c4fde-871e-e7e4-bac4-fa044f66a59c.png)
速い理由はDBMS_CLOUD.COPY_DATAプロシジャーが採用されているからなのですが、IPU消費の節約に直結するデータ統合の処理性能向上は歓迎されるべき事なので、是非とも活用していただきたいです。

既に言いたい事のメインは書いてしまったので、ここで終わりたい気持ちもありますが、幾つか注意事項もあったのでそれらを共有します。コネクタの設定については[Oracle Autonomous Database Connectorのオンラインマニュアル](https://docs.informatica.com/integration-cloud/data-integration-connectors/current-version/oracle-autonomous-database-connector/preface.html)を斜め読みしつつ、過去のこちらの記事を見ていただければ出来ると思いますので、詳細は割愛して後半は注意事項について説明します。

https://qiita.com/HiromitsuMiura-Mitz/items/dc415458f5408092ee60

https://qiita.com/karata/items/0a13eb6d3236db01474f

今回も、Oracle Cloud Infrastructure(OCI) のAlways Free 枠で、Oracle Cloud Object Storage と Autonomous Data Warehouse 19cを使いました。

## 注意事項 その１ : コネクタのライセンス有効化必須
Oracle Autonomous Database Connectorを含め2024年にリリースされた新コネクタ群はまだデフォルでバンドルされているコネクタになっていません。弊社サポートセンターに **「Oracle Autonomous Database Connectorのライセンス有効化」** をリクエストしてください。

:::note info
デフォルでバンドルされているコネクタの意味は[コチラ](https://qiita.com/HiromitsuMiura-Mitz/items/76d8f39f0387702ebcf0)の記事をご参照ください。ライセンスの有効化後は、もちろん、ランタイム環境の有効化作業も必要です。
:::
## 注意事項 その２ : Data Integration Server への設定追加必須
設定を完璧に実施しても最初はこのエラーが発生して躓きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/fc738e04-3348-5fad-9b8c-def47281e911.png)

INFA_DTM_STAGING_ENABLED_CONNECTORSは、特定のCloud Data Warehouse用コネクタで利用可能になっているSecure Agent の DTM でステージングデータに設定する最適化プロパティ群（Tomcatタイプ）の一つです。下記の通りプロパティは3種類存在します。

INFA_DTM_STAGING_ENABLED_CONNECTORS（書き込み操作用）
INFA_DTM_RDR_STAGING_ENABLED_CONNECTORS（読み取り操作用）
INFA_DTM_LKP_STAGING_ENABLED_CONNECTORS（キャッシュされたルックアップ操作用）

**デフォルトの状態 (pulginIdは未設定)**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/b99f08b3-d8b7-c81d-8d3f-18477ea24f53.png)

**INFA_DTM_STAGING_ENABLED_CONNECTORSに648300を設定**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/4b50317e-937f-6b4b-e40f-d2ec95152652.png)

これでOracle Autonomous Database Connectorは動くようになります。将来的に変わる可能性もゼロではありませんが、Oracle Autonomous Database ConnectorのpulginIdは決め打ちで648300です。

下記のCloud Data Warehouse用コネクタを利用中の場合、ステージングデータに設定する最適化プロパティ群に既にいずれかのpulginIdを設定済という状況も考えられますが、本題からそれるため今回はふれない事にします。
- Amazon Redshift V2 Connector (pulginId:451600)
- Databricks Connector (pulginId:606801)
- Google BigQuery V2 Connector (pulginId:601601)
- Hadoop Files V2 Connector (pulginId:603701)
- Snowflake Data Cloud Connector (pulginId:605501)
- Microsoft Azure Synapse SQL Connector (pulginId:453100)
## 注意事項 その３ : ターゲットのプロパティでバケット名の入力必須
IDMCのUIでは入力必須を意味する赤のアスタリスクが無いので油断しがちですが、バケット名は入力必須です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/ac647fd5-2b9d-6dc9-7b05-700905bba262.png)
Oracle Autonomous Databaseのターゲットでバケット名が未指定の場合下記のエラーで失敗します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/475bc9bb-f9f2-eef0-e836-30026d157b1d.png)
## 注意事項 その４ : Oracle Autonomous Databaseのターゲットでマルチバイトの列名対応不可?
これは私のテストの仕方が悪いのか、それとも制限事項なのか、もしかして不具合なのか判断つかなかったのですが、テーブル名は日本語でもOKだったのに、列名（カラム名）は日本語を含んでいると、どうしてもDBMS_CLOUD.COPY_DATAが失敗してしまい、限られた時間の中で回避策を見つけることができませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/786891/84258abb-fbdb-753c-2131-10069d7023fa.png)

試してみた事（どちらも効果なし）：
- ターゲットプロパティのCOPY_DATA Command Optionsにlanguage:JAPANESE、characterset:AL32UTF8を追加
- export NLS_LANG=Japanese_Japan.AL32UTF8を設定してセキュアエージェント再起動

ということで、性能測定はOracle Autonomous Databaseのターゲットで列名を全て英文字にした状態で実施しております。
# 参考情報
「DBMS_CLOUD.COPY_DATAプロシジャーって何？」とか、「なんでDBMS_CLOUD.COPY_DATAプロシジャーを使っていると速いのか？」という疑問はこちらをご参照ください。

https://qiita.com/mikika/items/5323651cb5826a5b495e

https://qiita.com/RexZheng/items/4678eabb986cfc064233

# おわりに
注意事項がちょっと多かったですね。最後のマルチバイトの列名対応不可はそのうち対応されると信じてます。