OCI を使用して Oracle に接続できない
OCI を使用して Oracle データベースに接続できない場合は、次の手順を試して問題を解決してください:
バージョンの互換性を確認する
別のマシンへのインストール
Oracle インスタントクライアントが別のマシンにインストールされている場合、Oracle インスタントクライアントと Oracle サーバーのバージョンが異なる場合があります。 例えば、Oracle クライアント 19.x は Oracle サーバー 11.2 に正常に接続できます。 ただし、JDBC ドライバーは Oracle インスタントクライアントと同じバージョンである必要があります。 それ以外の場合は、 Native library cannot be loaded や Incompatible version of libocijdbc などのエラーが表示されます。
例: 次の Oracle セットアップを検討してください:
Oracle データベース 12cEnterpriseEdition リリース 12.2.0.1.0-64 ビット本番
Oracle インスタントクライアント 19.8.0.0
Oracle ドライバー 19.3.0.0 を使用する場合、 Incompatible version of libocijdbc を取得します。 ただし、Oracle ドライバー 19.8.0.0 に切り替えると、接続は成功します。 次のアニメーションについて考えてみます。

同じマシンへのインストール
Oracle インスタントクライアントが Oracle サーバーを搭載したマシンにインストールされている場合、JDBC ドライバーはネイティブライブラリを使用して Oracle サーバーに接続します。 そして、このネイティブライブラリは Oracle サーバーソフトウェアの一部です。 そのため、JDBC ドライバーは Oracle サーバーと同じバージョンである必要があります。
要約表
別々のマシン | 同じマシン | |
|---|---|---|
Oracle インスタントクライアントおよびサーバーのバージョン | 異なる場合があります | 同じになります(Oracle インスタントクライアントは Oracle サーバーソフトウェアの一部であるため) |
JDBC ドライバーのバージョン | Oracle インスタントクライアントと同じ | Oracle サーバーと同じバージョン |
バージョンを確認する
DataGrip で JDBC ドライバーのバージョンを確認するには、次の手順を実行してください:
データソースおよびドライバー ダイアログ (Ctrl+Alt+Shift+S) でデータソースを選択し、 ドライバー リストをクリックして ドライバーに移動 を選択し、ダイアログの ドライバー タブにアクセスします。
「ドライバー 」タブの「ドライバーファイル 」ペインで JDBC ドライバーのバージョンを見つけます。
ドライバーの設定の詳細については、 既存のデータソース用の JDBC ドライバーを構成する を参照してください。
Oracle インスタントクライアントとサーバーのバージョンを確認します。
ファイルと環境変数
要件
次の OCI パッケージが必要です。
ベーシックパッケージ
SQL*Plus パッケージ
JDBC サプリメントパッケージ
オペレーティングシステムのパッケージは oracle.com の Oracle インスタントクライアントダウンロードページ(英語)からダウンロードできます。
次の OCI パッケージが必要です。
ベーシックパッケージ
SQL*Plus パッケージ
JDBC サプリメントパッケージ
オペレーティングシステムのパッケージは oracle.com の Oracle インスタントクライアントダウンロードページ(英語)からダウンロードできます。
また、 oraclepki.jar ファイルも必要です。 oracle.com の Oracle データベース JDBC ドライバーおよび UCP のダウンロードページ(英語)からダウンロードできます。
ウォレットファイルを含む ZIP アーカイブ。 ウォレットのダウンロードの詳細については、 docs.oracle.com の「クライアント資格証明 (ウォレット) のダウンロード」(英語)を参照してください。
ステップ 1。 解凍したファイルを確認する
ダウンロードしたパッケージのすべてのファイルは、同じディレクトリに抽出する必要があります。
抽出されたインスタントクライアントファイル ( ~/Oracle/instantclient_19_8/ など) が含まれるディレクトリを見つけて、不足しているファイルがないことを確認します。
インスタントクライアントファイル (たとえば、 ~/Oracle/instantclient_19_8/ ) が含まれるディレクトリを見つけます。
ファイルが不足していないことを確認してください。
oraclepki.jar がそのディレクトリにあることを確認してください。
ウォレットファイルが network ディレクトリ内の wallet ディレクトリにあることを確認してください。 ウォレットファイルへのパスは次のようになります: ~/Oracle/instantclient_19_8/network/wallet 。

ステップ 2. (オプション) 環境変数を確認する
これはオプションです。 環境変数を設定すると、sqlplus ツールを使用して Oracle インスタンスに接続できます。 これらの設定は、コマンドプロンプトの現在のセッションでのみ機能することに注意してください。
次の環境変数を確認してください。
export ORACLE_HOME=~/Oracle/instantclient_19_8export TNS_ADMIN=$ORACLE_HOME/network/adminexport NLS_LANG=English_America.UTF8export PATH=$PATH:$ORACLE_HOMEset ORACLE_HOME=C:\Oracle\instantclient_19_8set TNS_ADMIN=%ORACLE_HOME%\network\adminset NLS_LANG=English_America.UTF8set PATH=%PATH%:%ORACLE_HOME%
ステップ 3. ORA ファイル構成を確認する
tnsnames.ora ファイルが次の方法を使用して作成されていることを確認してください。
ファイルの場所は次のようになります: <directory_with_extracted_files>/network/admin 、
directory_with_extracted_filesは ステップ 1 でチェックされます。例: ~/Oracle/instantclient_19_8/network/admin 。
tnsnames.ora ファイルは次の構造になっている必要があります。
MyTNSAlias = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db.my.domain.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = my_service.my.domain.com) ) )次のファイルの例を考えてみましょう。
# tnsnames.ora Network Configuration File: /Users/jetbrains/Oracle/instantclient_19_8/network/admin/tnsnames.ora # Generated by Oracle configuration tools. MyTNSAlias = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) HOST = my_host.jetbrains.com) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = datagrip.jetbrains.com) ) ) AnotherAlias = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = another_host.jetbrains.com) (PORT = 1521))
tnsnames.ora および sqlnet.ora ファイルは、ウォレットファイルとともに ZIP アーカイブに含まれています。 ウォレットのダウンロードの詳細については、 docs.oracle.com の「クライアント資格証明 (ウォレット) のダウンロード」(英語)を参照してください。
ファイルの場所は ~/Oracle/instantclient_19_8/network/admin のようになります。
テキストエディターで admin ディレクトリから sqlnet.ora ファイルを開き、
DIRECTORY属性の値がウォレットへのパスであることを確認します。 この場合、パスは次のようになります。WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/Users/jetbrains/Oracle/instantclient_19_8/network/wallet"))) SSL_SERVER_DN_MATCH=yes次の admin ディレクトリと構成ファイルのスクリーンショットを検討してください。
