LinuxとWindowsインスタンスに SQLcl をインストール

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

# 初めに
本記事では、Oracle LinuxおよびWindowsの環境にSQLclをインストールする手順を、Javaの準備からインストール、接続確認まで詳しく解説します。また、Oracle Linux向けにはCloud-initスクリプトも紹介し、インスタンス起動時に自動でSQLclをセットアップする方法も取り上げます。

これからSQLclを導入したい方の参考になれば幸いです。

__環境情報__
|項目|バージョン|
|:--|:--|
|Java|11|
|SQLcl|24.1|
|Oracle Linux|8|
|Windows|Windows Server 2019 Standard Edition|

__ステップ__
- [1. Oracle Linuxにインストール](#1-oracle-linuxにインストール)
  - [1-1. Javaのインストール](#1-1-javaのインストール)
  - [1-2. SQLclのインストール](#1-2-sqlclのインストール)
  - [1-3. ターゲット・データベースへ接続する (動作確認)](#1-3-ターゲットデータベースへ接続する-動作確認)
  - [Cloud-initスクリプト](#cloud-initスクリプト)
- [2. Windowsにインストール](#2-windowsにインストール)
  - [2-1. Javaのインストール](#2-1-javaのインストール)
  - [2-2. SQLclのインストール](#2-2-sqlclのインストール)
  - [2-3. ターゲット・データベースへ接続する (動作確認)](#2-3-ターゲットデータベースへ接続する-動作確認)

# 1. Oracle Linuxにインストール
## 1-1. Javaのインストール
Java 11以上がインストールされていない場合、SQLclを起動すると、以下のエラーが発生する。
```
Error: SQLcl requires Java 11 and above to run.
       Found Java version no_java.
       Please set JAVA_HOME to appropriate version.
```

コマンド: `sudo dnf install java-11-openjdk -y`
```
[opc@oracle-linux8 ~]$ sudo dnf install java-11-openjdk -y
...
Complete!
[opc@oracle-linux8 ~]$ java -version
openjdk version "11.0.21" 2023-10-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.21.0.9-2.0.1) (build 11.0.21+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.21.0.9-2.0.1) (build 11.0.21+9-LTS, mixed mode, sharing)
[opc@oracle-linux8 ~]$
```

## 1-2. SQLclのインストール
コマンド：`sudo yum install sqlcl -y`

SQLclを起動する：
```
[opc@linux8 ~]$ sql /nolog

SQLcl: Release 24.1 Production on Wed Apr 10 07:14:17 2024

Copyright (c) 1982, 2024, Oracle.  All rights reserved.

SQL>
```

以下のエラーを遭遇した時：
```
Exception in thread "main" java.lang.Error: java.io.FileNotFoundException: /usr/lib/jvm/java-11-openjdk-11.0.21.0.9-2.0.1.el8.x86_64/lib/tzdb.dat (No such file or directory)
```
回避策：`sudo dnf install tzdata-java -y`


## 1-3. ターゲット・データベースへ接続する (動作確認)
動作確認のために、Autonomous Database (ADBと略)へ接続します。（事前準備として、ADB Walletをインスタンスにコピーしておいてください。）

コマンド：`sql -cloudconfig Wallet_DBname.zip <username>/<password>@<service_name>`

※、サービス名は圧縮ファイルの「tnsnames.ora」でも確認可能で、次のいずれかの形式です。
`DBname_high`、`DBname_medium`、`DBname_low`

```
[opc@oracle-linux8 ~]$ sql -cloudconfig Wallet_adw.zip admin/<password>@adw_high
<中略>
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.23.0.1.0

SQL>
```
:::note
SQLclでADBに接続する場合、Walletファイルを解凍する必要はありません。
:::

__接続時のトラブルシューティング__
パスワードに特殊文字があり、上記のコマンドに識別されない場合、次の２つ対策があります。

- 方法-1：特殊文字の前に、`\`を付けます。
- 方法-2：次のコマンドで接続して、プロンプトが表示されたら、パスワードを入力します。
`sql -cloudconfig Wallet_DBname.zip <username>@<service_name>`
```
[opc@oracle-linux8 ~]$ sql -cloudconfig Wallet_adw.zip admin@adw_high

SQLcl: Release 24.1 Production on Wed Apr 10 07:38:43 2024

Copyright (c) 1982, 2024, Oracle.  All rights reserved.

Password? (**********?)
```

## Cloud-initスクリプト
```bash
#!/bin/bash
# Install Java 11
dnf install java-11-openjdk -y

# Install SQLcl
dnf install sqlcl -y 
```

# 2. Windowsにインストール
## 2-1. Javaのインストール
:::note
[SQL Developer](https://www.oracle.com/database/sqldeveloper/technologies/download/) (Windows 64-bit with JDK 11 included)をインストールした場合は、それを利用できます。
:::

JAVAダウンロードURL: https://www.oracle.com/java/technologies/downloads/
インストーラ・ファイルを実行し、インストールを開始します（省略）。

PATH環境変数に追加します。次はSQL Developerの例です。
```powershell
$env:Path += ";C:\sqldeveloper\jdk\jre\bin"
```

バージョン確認：
```powershell
PS C:\Users\opc> java -version
java version "11.0.18.0.2" 2023-02-17 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.18.0.2+1-LTS-3)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.18.0.2+1-LTS-3, mixed mode)
```

## 2-2. SQLclのインストール
ダウンロードURL: https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/
最新バージョン: <strong>24.1</strong>.0.087.0929 - April 3, 2024
圧縮ファイルサイズ：<strong>66</strong> MB
ライセンス：<strong>フリー</strong>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6eef4cab-da54-1698-9922-168b18af6c3d.png", width="350">

ダウンロード後、圧縮ファイルを解凍します。
```powershell
Expand-Archive -Path C:\Users\opc\Downloads\sqlcl-24.1.0.087.0929.zip -DestinationPath C:\
```

PATH環境変数に追加します。
```powershell
$env:Path += ";C:\sqlcl\bin"
```

バージョン確認：
```
PS C:\Users\opc> sql -V

SQLcl: Release 24.1.0.0 Production Build: 24.1.0.087.0929
PS C:\Users\opc>
```

## 2-3. ターゲット・データベースへ接続する (動作確認)
この例では、Oracle Base DBへ接続します。

コマンド：`sql $User/$Password@${Hostname}:$Port/$ServiceName`
```sql
PS C:\Users\opc> sql system/<password>@db19c:1521/DB19C_pdb1.<subnetname>.<vcnname>.oraclevcn.com

...中略...
Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.22.0.0.0

SQL>
```

:::note
Base DBのサービス名を取得する方法について、次の記事をご参照ください。
[Oracle Base DBのサービス名を取得する](https://qiita.com/letian/items/ecab5bc23efd13410dac)
:::

以上

----

__関連記事__
[コマンドラインを使用してWindowsクライアントからAutonomous DBに接続する](https://qiita.com/letian/items/e3696354950999a44851)
[OCI Cloud-initスクリプト](https://qiita.com/letian/items/10152a4fec813c1b7d98#11-cloud-init%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88)

__ドキュメント__
SQLcl FAQ: [英語](https://www.oracle.com/database/technologies/appdev/sqlcl/sqlcl-faq.html) [日本語](https://www.oracle.com/jp/database/technologies/appdev/sqlcl/sqlcl-faq.html)
SQLcl Get Started: [英語](https://docs.oracle.com/en/database/oracle/sql-developer-command-line/23.3/index.html) [日本語](https://docs.oracle.com/cd/F94929_01/index.html)