はじめに
Oracle Databaseに接続するCLIベースのクライアントは最近専らSQLclを使用していたのですが、諸般の事情によりSQL*Plusをインストールする必要になりました。
インストール作業はOracle Database 12cの頃以来だったのですが、当時と手順はさして変わらないだろうと思って臨んだら、思わぬ罠にハマってしまいましたので、備忘録として残します。
クライアント端末の環境
Windows 11 Pro 22H2
誤った手順
- 上記「Oracle Software Delivery Cloud」で「Oracle Database Client 23」と検索し、「Oracle Database Client 23.5.0.0.0」を選択、ダウンロード実行
※要Oracleアカウント - 前項でダウンロードしたexeファイル(ダウンロードマネージャ)を実行し、S/Wのzipファイルをローカルにダウンロードする
- 前項でダウンロードしたzipファイルを解凍する
- 解凍したファイルを開き、フォルダ内の「setup.exe」を実行する
- Oracleホームのユーザー選択画面で「Windows組み込みアカウントの使用」(デフォルト)を選択し「次へ」ボタンをクリック
この時点で不穏な臭いを感じる
🤔Oracleホーム...?JAVA_HOMEはよくいじる環境変数だけど、ORACLE_HOMEなんて環境変数触ったことないぞ...? - Oracleベースのフォルダに適当なパスを設定し、「次へ」をクリック
- 「選択したOracleホームはOracleベースの外部に設定されています。」と怒られる。いったん無視して「はい」ボタンをクリックして続行
ハマった罠。警告を無視してはいけない - サマリー画面が表示される。「インストールボタン」をクリック
- 「Oracle Clientのインストールが成功しました。」と表示されるので、インストーラを閉じる
- コマンドプロンプトを起動し
sqlplus -v
でパスが通っていることを確認 - 前項「6.」でインストールしたフォルダを起点にtnsnames.oraを格納するadminフォルダを探すが、見つからない
罠の終点
上記サイトでダウンロードできるクライアントは、 Oracle Databaseがインストールされた端末向けの インストーラでした。
そもそも、最初のステップから全く違いました。
正しい手順
- 上記URLから「 Instant Client for Microsoft Windows (x64)」のリンクをクリック
- Basicパッケージ「instantclient-basic-windows.x64-バージョンdbru.zip」のリンクをクリックしてダウンロード
- SQL*Plus パッケージ「instantclient-sqlplus-windows.x64-バージョンdbru.zip」のリンクをクリックしてダウンロード
- 「instantclient-basic-windows.x64- バージョン dbru.zip」を任意のフォルダで解凍し、フォルダ名を「client」にリネーム
※フォルダのリネームは省略してもOKです。ここでは以降の説明を簡易にすることを目的としてリネームしています。 - 「instantclient-sqlplus-windows.x64-バージョンdbru.zip」を解凍
- 前項で解凍したフォルダ内の下記ファイルをすべてコピー or 切り取り
- glogin.sql
- Orasqlplusic.dll
- sqlplus.exe
- sqlplus.sym
- 「client\instantclient_バージョン番号」フォルダへ前項でコピーしたファイルをペースト
- 「client\instantclient_バージョン番号\network\admin」フォルダ内にtnsnames.oraを作成・格納
- 「client\instantclient_バージョン番号」を環境変数
PATH
に追加
あとは以下のようにコマプロから起動するだけです。
cmd
sqlplus scott/tiger@dbname
SQL*Plus: Release 21.0.0.0.0 - Production on aaa mon d hh:mi:ss yyyy Version 21.9.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: aaa mon dd yyyy hh:mi:ss +09:00
Connected to:
Oracle Database xxx Release xx.x.x.x.x - Production Version x.x.0.0.0
SQL>
まとめ
バイナリをダウンロードして解凍するだけになったので、レジストリの汚染を気にせずとも良くなった点と、やたらめったらサイズの大きいファイルをダウンロードする必要も無くなったので、作業の流れさえ覚えてしまえば現行手順も悪くないと感じました。
ただ、SQL*Loaderを使う必要がないのであれば、SQLclで事足りてしまうんだよなぁ...