2016-10-20 7 views
1

におけるOracle環境ハンドルを取得できません、私はエラーcx_Oracle.InterfaceError:私は、任意のOracleクライアントをインストールするには、Linuxの

server_IP = ipaddress:1221/xyz 
try: 
    db = cx_Oracle.connect('username', 'password', server_IP) 
    print db 

except cx_Oracle.DatabaseError as e: 
     error, = e.args 
     if error.code == 1017: 
      print('Please check your credentials.') 
     else: 
      print('Database connection error: %s'.format(e)) 
     raise 

cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle

の下に私の質問を取得していますcx_Oracleモジュールを使用してデータベースに接続しようとしていますが必要なのか私はこのエラーが発生しないようにLinuxでそれを構成する方法。助けてください linuxでcx_Oracleモジュールを使用するために必要な前提条件は

答えて

1

cx_Oracle.connectへの呼び出しの構文を確認してください。それは、ユーザー名、パスワード、DSN、またはそれをすべて持つ1つの引数をとります。はい、あなたは、Oracleクライアントがあなたにインストールされている必要があります。最初の質問に答えるために

ip = 'ipaddress' 
port = 1221 
SID = 'xyz' 
dsn_tns = cx_Oracle.makedsn(ip, port, SID) 
db = cx_Oracle.connect('username', 'password', dsn_tns) 

Using Python With Oracle

+0

oracleクライアントがインストールされているため、同じコードが正常に動作しています –

+0

Windowsクライアントは、おそらく 'TNSNAMES'でデータベース名を解決して処理します。 TNSNAMESには、データベースを参照するためのIPアドレスだけが含まれているということは、私にはまだ驚きです。それは一般的なことではありません。 –

+0

まだ同じエラーが発生しています。私はlinuxに欠けている設定はありますか?私はリモートアクセスマシンとデータベースコマンドを実行しようとしています。 –

0

con = cx_Oracle.connect('username/[email protected]/xyz') 

または完全なDSNを構築する例えば

マシンを使用してcx_Oracleを使用します。完全なクライアントをインストールすることはできますが、インスタントクライアントを使用する方がはるかに簡単です。 RPMベースのLinuxディストリビューションを使用している場合は、RPMを使用するとかなり簡単になります。インスタントクライアントのためにここに行く:

http://www.oracle.com/technetwork/database/features/instant-client/index.html

あなたが取得しているエラーは、しかし、設定の問題を示唆しています。使用するOracleクライアントと使用するcx_Oracleのバージョンが互いに互換性があることを確認してください。つまり、Pythonが64ビットの場合、Oracleクライアントも64ビットでなければなりません。 Pythonが32ビットの場合、Oracleクライアントは32ビットでなければなりません。環境変数ORACLE_HOME(完全なOracleクライアントを使用する場合)、PATHおよびLD_LIBRARY_PATHを確認します。これは、インスタントクライアントRPMを使用する利点の1つです。コンパイル時には環境変数は必要なく、実行時には何も必要ありません。

最後の1コメント:EZ Connect構文を使用してデータベースに接続しているようです。リスナーのデフォルトポートは1221ではなく1521です。デフォルトのポートを使用している場合は、そのセクションを省略することができます(つまり、Martinが指摘しているようにipaddress/xyz)。

関連する問題