特定のバージョンの Oracle Instant Client を使用した RDS for Oracle への接続について

記事タイトルとURLをコピーする

こんにちは、テクニカルサポート課の 佐藤 光晃です。
久々に Oracle ネタに触りたく、Oracle Instant Client を使って RDS for Oracle への接続を試しました。
本ブログでは Oracle Instant Client を使った接続での前準備や注意点などを紹介したいと思います。

Oracle Instant Client について

Oracle Instant Client は Oracle 社が提供している管理ツールで、ローカル環境で OCI や OCCI、ODBC、JDBC OCI アプリケーションの開発や、SQL*Plus や SQL*Loader、Oracle Data Pump といったコマンドラインツールを使用したい場合に適しております。
対応 OS としては Windows、Linux、macOS、HP-UX、AIX があります。

www.oracle.com

Oracle Instant Client のバージョン

Oracle Instant Client のバージョンは Oracle Database と同様のバージョン仕様となっており、10.x → 11.x → 12.x → 18.x → 19.x → 21.x → 23.x となっております。
12 から 18 に数字が飛んだのは、Oracle Database のバージョンの数字がリリース年になったことに併せているようです。

また、これらのバージョンのうち、Oracle Instant Client 10.x と 11.x は Oracle Database 21c への接続がサポートされていません。[1][2]
※これは RDS でも同じ考え方です。

[1] Oracle Databaseのネットワーク接続 (スライド 10 ページ目) speakerdeck.com

[2] My Oracle Support ドキュメント ※参照には Oracle の有償ライセンスが必要です。 https://support.oracle.com/epmos/faces/DocumentDisplay?id=207303.1

Oracle Instant Client の準備

Oracle Instant Client のダウンロード

EC2 上の Windows から RDS for Oracle 21c に向けて接続を実施するため、Windows 版の Oracle Instant Client をダウンロードします。
※今回は、サポートされていない Version 10.2.0.5 / 11.1.0.7.0 / 11.2.0.4.0 と最新の 21.9.0.0.0 をダウンロードします。
ダウンロード対象となるファイルは「Basicパッケージ」と「SQL*Plus パッケージ」となります。
www.oracle.com

Oracle Instant Client のインストール

特段難しそうなインストール作業は無く、ファイルを同じところに解凍するだけとなります。 今回は下記のように testuser というユーザーのところに配置しております。

>dir C:\Users\testuser\Oracle\
2023/08/24  13:18    <DIR>          instantclient_10_2
2023/08/24  13:18    <DIR>          instantclient_11_1
2023/08/24  13:18    <DIR>          instantclient_11_2
2023/08/24  13:19    <DIR>          instantclient_21_9
2023/08/24  13:30    <DIR>          network

Oracle Instant Client による接続

ダウンロードしてきた SQL*Plus を使用して RDS に接続します。 SQL*Plus を使用した RDS の接続は AWS でも紹介されていますが、今回は少し違った接続方法をします。 docs.aws.amazon.com

SQL*Plus 実行の前に・・・

個人的ではありますが、接続先の情報をコンソール写してしまったり、マスク作業するのがちょっとめんどくさいと思い「C:\Users\testuser\Oracle\network\admin」に「tnsnames.ora」を作成し、そこに接続先情報を記載しました。

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <エンドポイント>)(PORT = <ポート番号>))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <DB 名>)
    )
  )

上記を記述し、Windows の環境変数で TNS_ADMIN を設定することでSQL*Plus による接続コマンドが楽になります。

Before

sqlplus user_name@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dns_name)(PORT=port))(CONNECT_DATA=(SID=database_name)))

After

sqlplus user_name@ORCL

SQL*Plus 実行

本来は環境変数で SQL*Plus が格納されているディレクトリを PATH に追記した方が楽ですが、今回は複数バージョンを試すため、フルパスで SQL*Plus を実行しました。
▼Version 10.2.0.5 (接続失敗)

>C:\Users\testuser\Oracle\instantclient_10_2\sqlplus admin@ORCL

SQL*Plus: Release 10.2.0.5.0 - Production on 木 8月 24 13:57:32 2023

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

パスワードを入力してください:
ERROR:
ORA-28040: No matching authentication protocol

ユーザー名を入力してください:

▼Version 11.1.0.7.0 (接続失敗)

>C:\Users\testuser\Oracle\instantclient_11_1\sqlplus admin@ORCL

SQL*Plus: Release 11.1.0.7.0 - Production on 木 8月 24 13:58:49 2023

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

ERROR:
ORA-28040: No matching authentication protocol

ユーザー名を入力してください:

▼Version 11.2.0.4.0 (接続成功!)

>C:\Users\testuser\Oracle\instantclient_11_2\sqlplus admin@ORCL

SQL*Plus: Release 11.2.0.4.0 Production on 木 8月 24 13:59:46 2023

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

パスワードを入力してください:


Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 - Production
に接続されました。
SQL>

▼Version 21.9.0.0.0 (接続成功!)

>C:\Users\testuser\Oracle\instantclient_21_9\sqlplus admin@ORCL

SQL*Plus: Release 21.0.0.0.0 - Production on 木 8月 24 14:06:12 2023
Version 21.9.0.0.0

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

パスワードを入力してください:
最終正常ログイン時間: 木 8月  24 2023 13:59:46 +09:00


Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 - Production
Version 21.11.0.0.0
に接続されました。
SQL>

結果として、Version 10.2.0.5 / 11.1.0.7.0 は接続に失敗し、11.2.0.4.0 と 21.9.0.0.0 は成功しました。非サポートのバージョンである 11.2.0.4.0 は接続自体は可能なようです。(非サポートなのでお勧めはしません。。。) 上記の Version 10.2.0.5 / 11.1.0.7.0 で出力されている ORA-28040 は Oracle Instant Client と Oracle Database のバージョンが離れすぎたことで認証プロトコルが非サポートとなっている状態で出力されるエラーとなります。

ORA-28040 の回避方法

ORA-28040 は対処法自体は 2 つあります。
1 点目は Oracle Instant Client のバージョンアップです。テクニカルサポートとしてはこの対処以外勧めることは基本的にありません。
2 点目は sqlnetora.sqlnet.allowed_logon_version_server を設定することとなります。従来の sqlnet.ora で設定していた SQLNET.ALLOWED_LOGON_VERSION_CLIENT を RDS でも設定自体は可能となっています。 ※sqlnetora.sqlnet.allowed_logon_version_server や ORA-28040 については過去にも弊社ブログにて紹介しておりますので併せてご参照ください。

docs.aws.amazon.com blog.serverworks.co.jp

感想

Oracle Instant Client について調べていたら非サポートのバージョンとして 11.x から 21c への接続がサポートされていないことを確認し、実際繋がるかどうか試したところ普通に繋がっちゃった、というのを確認したブログでした。

佐藤 光晃 (記事一覧)

マネージドサービス部・テクニカルサポート課

2022年10月にサーバーワークスに入社しました。
前職でもテクニカルサポートに従事しており、情報収集に役立つサービスやツールに興味があります。AWS資格13冠。