【问题标题】:AWS Python Lambda with Oracle - OID Generation Failed even after adding HOSTALIASESAWS Python Lambda with Oracle - 即使在添加 HOSTALIASES 后 OID 生成也失败
【发布时间】:2018-11-07 19:31:21
【问题描述】:

我正在尝试使用 lambdapython 使用 cx_oracle 包连接到 rds 上的 oracle 但我明白了:

ORA-21561:OID 生成失败:DatabaseError。

即使在使用 lambda-server-name localhost 添加文件 /tmp/HOSTALIASES 之后。还将HOSTALIASES 添加到lambda 环境变量。引用自:AWS Python Lambda with Oracle - OID Generation Failed

如何在 aws lambda

中解决此 OID 生成问题

这是我的代码

import cx_Oracle
import os
import sys
import time

# sys.path.append('lib')
# os.environ['ORACLE_SID'] = 'DEVDB'


with open('/tmp/HOSTALIASES', 'w') as hosts_file:
    hosts_file.write('{} localhost\n'.format(os.uname()[1]))

def orcl_fetch_records(event, context):
    # print (sys.path)
    # print (os.listdir(os.getcwd()))
    # print (os.environ['LD_LIBRARY_PATH'])

    # print (os.environ['ORACLE_HOME'])
    # print (sys.path)
    print (os.environ['HOSTALIASES'])
    with open('/tmp/HOSTALIASES', 'r') as hosts_file:
        print hosts_file.read()
    dsn = cx_Oracle.makedsn("aws-rds-oracle-server-name", "1521", "SID")
    print (dsn)
    conn = cx_Oracle.connect("username", "password", dsn)
    print ("Oracle DB version = " + conn.version)
    cur = conn.cursor()
    cur.execute('select * from lambda_test')
    for result in cur:
        print (result)
    cur.close()
    conn.close()

输出:

ORA-21561:OID 生成失败:DatabaseError Traceback(最近 最后调用):文件“/var/task/orcl_fetch_function.py”,第 25 行,在 orcl_fetch_records conn = cx_Oracle.connect("用户名", "密码", dsn) DatabaseError: ORA-21561: OID 生成失败

【问题讨论】:

  • 欢迎来到 SO。 Hoora 完成了巡演和好问题并显示了错误代码(提示:尝试使用“>”,你会得到一个黄色框作为引用的背景)。审查方面没有进一步的cmets。尽情享受吧 ;-)

标签: python oracle amazon-web-services aws-lambda cx-oracle


【解决方案1】:

该错误通常是由于无法确定您的主机名。这篇文章可能会有所帮助:https://osric.com/chris/accidental-developer/2015/10/connecting-to-oracle-instance-in-aws-rds/

【讨论】:

  • 在 AWS Lambda 中,我没有对 etc/hosts 文件的写入权限。所以我通过添加 HOSTALIASES 文件并将 HOSTALIASES 文件中的值设置为 "host-name localhost" 来设置主机。我还尝试了您提供“127.0.0.1 主机名 localhost”的 URL 格式。它仍然会引发相同的 OID 生成错误。
  • 客户端和服务器一样吗?还是您使用不同的机器?
  • 我试图连接到正在执行 lambda 函数的同一 aws vpc 上的 rds oracle DB。
  • 那么您的 /tmp/HOSTALIASES 的价值是多少?以及环境变量 HOSTALIASES 的值?我所看到的一切都表明这应该有效。您使用的是什么版本的 cx_Oracle?
【解决方案2】:

我遇到了同样的问题,发现 HOSTALIASES 机制需要有效的 DNS。如果您的 Lambda 函数附加了 VPC,则必须允许将出站 DNS 连接到 Amazon VPC DNS 或您自己的内部 DNS 服务器(如果有的话)。

【讨论】:

    猜你喜欢
    • 2017-01-05
    • 2015-09-25
    • 2012-01-14
    • 2020-07-13
    • 2013-11-08
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多