WindowsクライアントからコマンドラインでAutonomous DBへ接続

このシリーズの他の記事は、[オラクル・クラウドの個人ブログ一覧 ](https://qiita.com/letian/items/10152a4fec813c1b7d98)からご覧いただけます。

# 初めに
本記事では、Windows環境のクライアントから、コマンドラインを使用してAutonomous Database （ADBと略）に接続する方法を詳しく解説します。SQLclおよびSQL*Plusの2つの代表的なツールを取り上げ、それぞれのインストール方法や接続手順について、図解やコマンド例を交えて分かりやすく紹介していきます。

これからコマンドライン接続を試みる方や、スクリプトによる自動化を検討している方の一助となれば幸いです。

**検証済環境**
Windows Server 2019 Standard (OCI Computeインスタンス)
SQLcl 25.1
SQL*Plus 23.8

**目次**

- [1. 事前準備](#事前準備)
  - [1-1. 作業用フォルダを作成](#1-1-作業用フォルダを作成)
  - [1-2. Walletファイルのダウンロード](#1-2-walletファイルのダウンロード)
  - [1-3. ネットワークの設定](#1-3-ネットワークの設定)
- [2. SQLcl を使用する場合](#2-sqlcl-を使用する場合)
  - [2-1. SQLcl をインストール](#2-1-sqlcl-をインストール)
  - [2-2. 接続を実施](#2-2-接続を実施)
  - [2-3. バッチ実行手順](#2-3-バッチ実行手順)
- [3. SQL*Plus を使用する場合](#3-sqlplus-を使用する場合)
  - [3-1. Oracle Instant Client をインストール](#3-1-oracle-instant-client-をインストール)
  - [3-2. Walletファイルの解凍](#3-2-walletファイルの解凍)
  - [3-3. 接続を実施](#3-3-接続を実施)
- [付録 - SQLcl と SQL*Plus の比較](#付録---sqlcl-と-sqlplus-の比較)

# 事前準備
## 1-1. 作業用フォルダを作成
あらかじめ以下のようにフォルダを作成しておいてください。
|パス| 目的 |
|:-|:-|
|C:\Oracle|ホームディレクトリ|
|C:\Oracle\Wallet|Walletファイルの格納先   |
|C:\Oracle\SQL_sample|SQLサンプルの格納先   |

## 1-2. Walletファイルのダウンロード
OCIコンソールにログインし、接続対象のADBのWalletファイルをダウンロードしてください。

保存場所:`C:\Oracle\Wallet`

ダウンロード方法の詳細については、以下の記事の<strong>STEP 1-1</strong>をご参照ください：
[OCI Cloud Shell上のSQL PlusからADBに接続する](https://qiita.com/liu-wei/items/38b968cee3a9619c63e5)

## 1-3. ネットワークの設定
**接続方法**
ADB がプライベート・サブネットに配置されるのは、一般的な構成です。WindowsクライアントからリモートのプライベートADBに接続する方法はいくつかあります。詳細な設定手順については、以下の記事をご参照ください。今回はWindowsクライアントからの接続を前提としているため、<strong>ロード・バランサ</strong>や<strong>踏み台サーバー</strong>を経由する方法を推奨します。
[プライベート・サブネット内のOracle Base DB と ADBインスタンスに接続する方法のまとめ](https://qiita.com/letian/items/077b4cfc74eab90339cc)

**セキュリティルール**
ADBに紐づいているNSGに、以下の条件で新しいイングレスルールを追加します：
- ソース：
  - 直接にADBに接続する場合：クライアントのIPアドレス
  - LBや踏み台サーバーを経由する場合：LBや踏み台サーバーのプライベートIP
- プロトコル：TCP
- 宛先ポート：<font color=blue>1522</font>

# 2. SQLcl を使用する場合
※、SQL*Plusより使いやすく、おすすめです。
## 2-1. SQLcl をインストール
- **圧縮ファイルのダウンロード**
ダウンロードURL: https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/
ファイル名：`sqlcl-25.1.1.113.2054.zip`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/046aa78b-03af-46c6-8be5-41d01392f2ac.png", width="500">
- **圧縮ファイルの解凍**
ダウンロードした圧縮ファイルを解凍してください。解凍先として「`C:\Oracle`」フォルダを指定します。解凍が完了すると、「`C:\Oracle\sqlcl\bin`」フォルダ内に「<font color=blue>sql.exe</font>」が生成されます。

- **環境変数の設定**
環境変数PATHにSQLclのフルパス `C:\Oracle\sqlcl\bin` を追加してください。
- **バージョン確認**
コマンドプロンプトでバージョン確認：`sql -V`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/4f490915-17a6-439f-b8d8-4e5d094ec321.png", width="500">

## 2-2. 接続を実施
コマンド：`sql -cloudconfig <Walletファイル名> <DBスキーマ名>/<パスワード>@<DBサービス名>`

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/fbd2d859-5467-49fa-bd0b-a6382e6415d1.png">

:::note
SQLclでADBに接続する場合、Walletを解凍する必要がなく、非常に便利です。
:::

## 2-3. バッチ実行手順
- 環境変数の設定例：
```bat
set SQL_File="C:\Oracle\SQL_sample\select_emp.sql"
```

- SQLファイル（select_emp.sql）の作成例：
```sql
SELECT * FROM EMP WHERE EMPNO='7900';
exit;
```

- 実行コマンド例：
```bat
sql -cloudconfig <Walletファイル名> <DBスキーマ名>/<パスワード>@<DBサービス名> @%SQL_File%
```

# 3. SQL*Plus を使用する場合
## 3-1. Oracle Instant Client をインストール
- **圧縮ファイルのダウンロード**
ダウンロードURL：https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
  - Basic Packageをダウンロード
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e620e3af-df2e-4e71-8ce6-80587f942723.png", width="650">

  - SQL*Plus Packageもダウンロード
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/514db2db-c53d-4aec-87d0-2c8d3bff5c17.png", width="650">
- **圧縮ファイルの解凍**
ダウンロードした2つのZipファイルを<strong>同じフォルダ</strong>に解凍します。
解凍先：`C:\Oracle`
※、解凍すると、`instantclient_23_8`と`META-INF`の２つサブフォルダが生成されます。`META-INF`フォルダを上書きする前に、バックアップを作成することをおすすめします。
- **解凍後の確認**
以下のパスに実行ファイルが配置されていることを確認：
`C:\Oracle\instantclient_23_8\sqlplus.exe`
- **環境変数の設定**
環境変数PATHにSQL*Plusのフルパス `C:\Oracle\instantclient_23_8` を追加してください。
- **バージョン確認**
コマンドプロンプトでバージョン確認：`sqlplus -v`
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/67c0ac0d-2b95-4af9-b9c6-c279f76b3f23.png", width="400">

## 3-2. Walletファイルの解凍
以下のZipファイル（STEP 1-2で取得）を解凍してください：
`C:\Oracle\Wallet\Wallet_DBName.zip`

解凍先：`C:\Oracle\instantclient_23_8\network\admin`

**既存ファイルのバックアップ**
解凍先フォルダに既存の「`README`」ファイルがあります。上書き前にバックアップを作成することをおすすめします。

## 3-3. 接続を実施
コマンド： `sqlplus <DBスキーマ名>/<パスワード>@<DBサービス名>`

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/efff60c5-3ca1-4a4f-8c88-46ba1ad0311b.png", width="650">

※、DBサービス名は、解凍先の`tnsnames.ora`ファイルにも確認できます。	
※、バッチ実行もできます。上記の[STEP 2-3](#2-3-バッチ実行手順)を参考してください。

# 付録 - SQLcl と SQL*Plus の比較
__共通点__
- オラクル公式のDB接続ツール
- コマンド・ライン・インタフェース
- 無料使用ライセンス

__機能比較と関連ドキュメント__

|分類|項目|SQLcl|SQL Plus|
|:--|:--|:--|:--|
|機能|コマンド歴|<font color=blue>Yes</font>|1個のみ (listで)|
||↑、↓でコマンドを切り替え|<font color=blue>Yes</font>|No|
||ADB接続時にWalletの解凍は<br>必要か？|<font color=blue>不要</font>|必要|
|ドキュメント|FAQ|[英語](https://www.oracle.com/database/technologies/appdev/sqlcl/sqlcl-faq.html) [日本語](https://www.oracle.com/jp/database/technologies/appdev/sqlcl/sqlcl-faq.html)|[MOS リンク (英語)](https://support.oracle.com/knowledge/Oracle%20Database%20Products/47715_1.html)|
||ガイドとレファレンス (23c)|[英語](https://docs.oracle.com/en/database/oracle/oracle-database/23/sqpug/) [日本語](https://docs.oracle.com/cd/F94929_01/index.html)|[英語](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqpug/index.html) [日本語](https://docs.oracle.com/cd/F82042_01/sqpug/SQL-Plus-quick-start.html)|
||ダウンロード|[リンク](https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/)|[Oracle Instant Client](https://www.oracle.com/database/technologies/instant-client/downloads.html)|

以上

----
**関連記事**
[各種ツールから Autonomous DBに接続](https://qiita.com/letian/items/10152a4fec813c1b7d98#10-%E5%90%84%E7%A8%AE%E3%83%84%E3%83%BC%E3%83%AB%E3%81%8B%E3%82%89-autonomous-db%E3%81%AB%E6%8E%A5%E7%B6%9A)