我正在使用 cx_oracle包使用 lambda 和 python 连接到 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生成失败
答案 0 :(得分:0)
该错误通常是由于无法确定您的主机名。这篇文章可能有所帮助:https://osric.com/chris/accidental-developer/2015/10/connecting-to-oracle-instance-in-aws-rds/
答案 1 :(得分:0)
我遇到了同样的问题,发现HOSTALIASES机制需要有效的DNS。如果您的Lambda功能已附加VPC,则必须允许出站DNS到Amazon VPC DNS或您自己的内部DNS服务器(如果有的话)。