2016-08-29 56 views
3

AWS Lambda Pythonコードを使用してOracle DBに接続しようとしています。AWS Python Lambda with Oracle - OID生成が失敗しました

私のコードは以下の通りです:

import sys, os 
import cx_Oracle 
import traceback 

def main_handler(event, context): 

    # Enter your database connection details here 
    host = "server_ip_or_name" 
    port = 1521 
    sid = "server_sid" 
    username = "myusername" 
    password = "mypassword" 

    try: 
    dsn = cx_Oracle.makedsn(host, port, sid) 
    print dsn 
    connection = cx_Oracle.Connection("%s/%[email protected]%s" % (username, password, dsn)) 
    cursor = connection.cursor() 
    cursor.execute("select 1/0 from dual") 
    except cx_Oracle.DatabaseError, exc: 
    error, = exc.args 
    print >> sys.stderr, "Oracle-Error-Code:", error.code 
    print >> sys.stderr, "Oracle-Error-Message:", error.message 
    tb = traceback.format_exc() 
    else: 
    tb = "No error" 
    finally: 
    print tb 


if __name__ == "__main__": 
    main_handler(sys.argv[0], None) 

このコードを実行している場合は、すでに、 "LIB" フォルダにAWS Python Lambda with Oracle

のおかげで、すべての依存関係を追加した場合、私は取得しています: DatabaseError:ORA-を21561:OIDの生成に失敗しました

OracleサーバーのIPと名前を使用して接続しようとしました。同じエラーです。ここで

が正常にAWSラムダPythonでCX_Oracleを実行している人のために

Oracle-Error-Code: 21561 
Oracle-Error-Message: ORA-21561: OID generation failed 

Traceback (most recent call last): 
    File "/var/task/main.py", line 20, in main_handler 
    connection = cx_Oracle.Connection("%s/%[email protected]%s" % (username, password, dsn)) 
DatabaseError: ORA-21561: OID generation failed 

エラーの出力である、あなたが助けてくださいすることができますか?

ありがとうございました

+0

FYIでは、接続文字列を作成する代わりにcx_Oracle.Connection(username、password、dsn)を実行することができます。この場合、cx_Oracleは別のコンポーネントに分割する必要があります。 –

答えて

3

OK:ここに説明があります。 Oracleは、ホスト名で指定されたホスト名を解決できない場合、DBへの接続に失敗します。幸いにも、Linuxでは、/ tmpにエイリアスファイルを書き込んだ後、そのファイルに環境変数HOSTALIASESを設定することで、セッションのDNSエントリを上書きすることができます。

ので、このファイルを生成するために、私の機能のヘルプにこのコードを追加し、そして今私は正常に接続できます。

f = open('/tmp/HOSTALIASES','w') 
str_host = os.uname()[1] 
f.write(str_host + ' localhost\n') 
f.close() 

は、それが他の誰かを助けることを願って!

+0

ありがとう...ラムダで動作するようにOracleノードライブラリを取得しました。 ORA-24408:一意のサーバー・グループ名を生成できませんでした。 ORA-24454:クライアント・ホスト名が設定されていません。 – Metallikanz

0

この問題を解決するには、次の他の質問を参照してください。

sqlplus remote connection giving ORA-21561

効果的にクライアントがデータベースに接続するときに使用される一意の識別子を生成するために、ホスト名が必要です。

+0

AWSラムダで/ etc/hostsを変更することはできませんので、この解決策は適用できません。 –

+0

それは私が今までにこの問題について見た唯一の解決策です。 IPアドレスの代わりに名前を使用してみることができます。私が知っているところから、IPアドレスは何らかの形で名前に解決できなければなりません。 AWSはあなたにそれを行う能力を与えなければなりません! –

+0

クライアントに有効なホスト名の要件に関する情報を含めるように答えを編集しました。うまくいけば、AWS Lambdaがあなたのためにその情報を設定するいくつかの方法があります! –

関連する問題