使用 AWS Lambda 连接到 Oracle RDS 时出现错误 (DPI-1047)

Posted

技术标签:

【中文标题】使用 AWS Lambda 连接到 Oracle RDS 时出现错误 (DPI-1047)【英文标题】:Getting an error (DPI-1047) while connecting to Oracle RDS with AWS Lambda 【发布时间】:2022-01-06 04:32:25 【问题描述】:

我正在使用 AWS Lambda 函数(在 Python 中)通过 cx_Oracle 库连接到 Oracle 数据库 (RDS)。但它给了我以下错误 - “DPI-1047:无法找到 64 位 Oracle 客户端库:“libclntsh.so:无法打开共享对象文件:没有这样的文件或目录”。

我遵循的步骤 -

    创建了一个 python 虚拟环境并在 EC2 实例上下载了 cx_Oracle 库。 将下载的库上传到 S3 存储桶并使用它创建 Lambda 层 在 Lambda 函数中使用此层连接到 Oracle RDS 使用以下命令连接数据库 -

conn = cx_Oracle.connect(user="user-name", password="password", dsn="DB-Endpoint :1521/"数据库名称",encoding="UTF-8")

请帮我解决这个问题。

【问题讨论】:

您创建libclntsh.so 的精确度如何?你是针对 lambda linux 环境编译的吗? @Marcin - 我没有单独编译它。我添加了一个具有 cx_Oracle 库的 lambda 层。 在 *** 中搜索类似问题。 【参考方案1】:

将环境变量DPI_DEBUG_LEVEL 设置为值64,然后重新运行您的代码。调试输出应该可以帮助您找出正在搜索的内容。请注意,您还需要安装 64 位即时客户端!

【讨论】:

感谢您的帮助!我遇到以下错误 - 使用名称 /opt/python/libclntsh.so 加载由操作系统失败:/opt/python/libclntsh.so:无法打开共享对象文件:没有这样的文件或目录加载与操作系统搜索启发式加载名称为 libclntsh.so 由操作系统失败加载:libclntsh.so:无法打开共享对象文件:没有名称为 libclntsh.so.19.1 的此类文件或目录加载并且在 libclntsh.so.21.1 之前的文件存在类似错误 请在您的问题中显示完整的输出。该错误似乎表明找不到共享库 - 检查 LD_LIBRARY_PATH(必须在启动应用程序之前设置)或 ld 配置。【参考方案2】:

我遇到这个问题的原因是我刚刚下载了 cx_Oracle 库。为了从 Lambda 函数连接到 Oracle 数据库,我们还需要下载 Oracle 客户端和 libaio 库并将它们与 cx_Oracle 组合以创建一个 Lambda 层。完成这些步骤后,我就能够连接到 Oracle 数据库并查询其表。我为这个过程制作了一个视频,这样其他人就不必经历我面临的问题。希望对大家有所帮助-https://youtu.be/BYiueNog-TI

【讨论】:

以上是关于使用 AWS Lambda 连接到 Oracle RDS 时出现错误 (DPI-1047)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ngrok 从 AWS Lambda 连接到本地 PostgreSQL

将 AWS Lambda 连接到 Redshift - 60 秒后超时

Lambda 在本地连接到 Aurora MySql - 部署到 AWS 时超时

我应该如何从 AWS Lambda 函数连接到 Redis 实例?

如何从 AWS Lambda Python 连接到 Informix DB

如何将特定 AWS API Gateway 阶段连接到特定 AWS lambda 别名