ODBCでOracle Autonomous Databaseに接続してみた



# はじめに

本記事では、Oracle Cloudの自律型データベースサービス（Autonomous Database)に
ODBC接続でアクセスする方法を紹介します。
今回はAutonomous Data Warehouse（ADW)で作業しますが、Autonomous Transaction Processing（ATP)でも内容は同じです。


# 前提条件

## Instant Clientの導入

下記URLよりInstant Clientをダウンロードし、インストール

https://www.oracle.com/technetwork/jp/topics/index-099943-ja.html

*ODBC接続を利用するアプリケーションが32bitの場合、32bit版をダウンロード



## ウォレットのダウンロード

Autonomous Databaseに接続するためには、Wallet（zip形式のファイル）をローカルにダウンロードする必要があります。

Oracle Cloudのコンソール画面よりAutonomous Databaseのページに移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226871/dc35e8c2-2f52-82b2-1e76-4c9a76e87bf7.png)

DB接続をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226871/58d1c045-84bb-f22b-cdc0-4be1d6eab520.png)

任意のパスワードを設定し、ウォレットをダウンロードします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226871/4a2f8fbf-996b-348d-ced2-3de02af0b825.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226871/aa0c4852-21b5-e1b1-7caf-aef771ce5ee3.png)

ダウンロードしたウォレットを任意のフォルダに解凍します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226871/216ea47b-21c9-f421-a018-6e32228d7fec.png)

sqlnet.oraを編集します。

```
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
```
↓　　DIRECTORY="?/network/admin"の部分をウォレットの解凍先フォルダのパスに書き換える

```
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="<解凍先フォルダのパス>")))
```

## ODBC設定

Windowsのスタートメニューから「ODBC」で検索→「ODBCデータソース」を選択
*ODBC接続を利用するアプリケーションが32bitの場合、32bit版を選択

ユーザーDSNより「追加」→任意のOracle Clientを選択
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226871/e6eacd72-951c-c1c8-abcb-da7a89752435.png)


以下の項目を入力します。

| 入力項目       | 内容                |
| -------------- | ------------------- |
| データソース名 | 任意                |
| 説明           | 任意（未入力でもOK) |
| TNSサービス名  | 下記参照            |
| ユーザーID     | admin               |


TNSサービス名の書式は、[DBインスタンス名]_[サービス接続詞]です。
サービス接続詞は以下が使用可能です。



- **tpurgent（ATPのみ）**: 時間的なクリティカル・トランザクション処理操作のための優先度が最も高いアプリケーション接続サービス。 この接続サービスは、手動の並列処理をサポートしています。

- **tp（ATPのみ）**: トランザクション処理操作の一般的なアプリケーション接続サービス。 この接続サービスは、並列処理を使用せずに実行されます。

- **high**: レポートおよびバッチ操作のための優先度の高いアプリケーション接続サービスです。 すべての操作は並列で実行され、キューに入れられます。

- **medium**: レポート操作とバッチ操作のための一般的なアプリケーション接続サービス。 すべての操作は並列で実行され、キューに入れられます。 このサービスを使用すると、並列度は4 (4)に制限されます。

- **low**: レポートまたはバッチ処理操作では、最も優先度の低いアプリケーション接続サービスです。 この接続サービスは、並列処理を使用せずに実行されます。

  https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/atpug/connect-predefined.html#GUID-9747539B-FD46-44F1-8FF8-F5AC650F15BE

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226871/f50916d6-e907-e110-b8b5-592140d41019.png)


## 接続確認


接続テスト→ADBのパスワードを入力→OK
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226871/7b21c516-6d1f-1645-b658-e061f0fc3dd3.png)

疎通確認がとれたらドライバ構成を保存します。



## 補足

ADOからAutonomous DBに接続する場合の設定例です。

```
ConnectionString = "DSN=[データソース名];UID=admin;PWD=[adminユーザのパスワード]"
oraCon.ConnectionString = ConnectionString
oraCon.Open
```



## 参考URL

Autonomous Database作成手順
https://docs.oracle.com/cd/E97706_01/Content/Database/Tasks/adbcreating.htm



Instant Client導入手順
https://docs.oracle.com/cd/E90713_01/OREAD/installing-oracle-database-instant-client.htm

https://www.oracle.com/technetwork/jp/topics/winx64soft-099056-ja.html



ODBC設定
https://blog.hrendoh.com/how-to-register-oracle-instant-client-as-odbc-datasource/



ADOからOracle Databaseに接続
https://excelwork.info/excel/databaseoracleodbc/