1. ホーム
  2. python-3.x

[解決済み] 修正方法:cx_Oracle.DatabaseError: DPI-1047: 64 ビット Oracle クライアントライブラリが見つかりません - Python

2022-02-10 23:03:01

質問

cx_oracle 7 と python 3.6.7 を使用して、リモートサーバーにある Oracle 11g に接続しているところです。

libclntsh.soでOracleインスタントクライアントライブラリをインストールしましたが、期待された出力が得られません。

以下は、私がOracle DBに接続するために使用しているコードです。

connection = cx_Oracle.connect("username/password@host/port")
print (connection.version)
connection.close()

スクリプトを実行すると、接続バージョンが表示されるはずですが、次のようなエラーメッセージが表示されます。

ファイル "script.py", 行 13, in connection = cx_Oracle.connect("username/password@host/port") cx_Oracle.DatabaseError: DPI-1047: 64ビット版Oracleの場所が見つかりません。 クライアントライブラリ: "libclntsh.so: 共有オブジェクトファイルを開くことができません。そのような ファイルまたはディレクトリ"。参照 https://oracle.github.io/odpi/doc/installation.html#linux ヘルプ

解決方法は?

さらに調べた結果、次のような解決策を得ました。 Ubuntuコミュニティ Oracle Instant-Clientをインストールした後、以下のようにOracleライブラリを統合する必要があります。

export LD_LIBRARY_PATH=/usr/lib/oracle/ です。 <version> /client(64)/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}.

12.1版(Linux x86_64)の例としては、以下のようなものがあります。

輸出 LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} となります。

どこ <version> はお使いのOracle Instant-Clientのバージョンです(例:11.2、12.2)。
接続パラメータは以下のようにします。

connection = cx_Oracle.connect("username/password@host/service_name e.g orcl")

リスナー/サービス名を取得するために、Oracle sqlplusで次のように入力します。

SQL> show parameter local_listener

の下にあるリテラルは、リスナー/サービス名です。