代码之家  ›  专栏  ›  技术社区  ›  Sayed Zainul Abideen

连接到Oracle RDS

  •  6
  • Sayed Zainul Abideen  · 技术社区  · 7 年前

    我正在尝试使用AWS lambda和python连接到Oracle。

    这就是我遵循的步骤。(EC2实例一切就绪)

    1. 下载了instantclient basic linux。x64-12.2.0.1.0。拉链和
      instantclient sdk linux。x64-12.2.0.1.0。拉链
    2. ~/lambda/lib/
    3. 提取了 zip 中的文件 ~/lambda/lib/
    4. libaio.so.1.0.1 从…起 /lib64/ 进入
    5. 已创建的符号链接 李白。所以1.0.1 libaio.so 在里面 ~/lambda
    6. cx_Oracle 在里面 ~/λ
    7. 写在下面 index.py 在中编写脚本 ~lambda

    `

    import cx_Oracle
    
    def handler(event, context):
        message = ""
        cursor = None
        connection = None    
        try:
            connection = cx_Oracle.connect("USERNAME", "PASSWORD", "DOMAIN/orcl")
            cursor = connection.cursor()
            cursor.execute("""QUERY""")
        except Exception as e:
            message += " {Error in connection} " + str(e)
        finally:
            if cursor:
                cursor.close()
            if connection:
                connection.close()
        return {'message' : message}
    

    `

    1. 然后使用 zip -r9 ~/upload.zip *

    在AWS lambda上运行代码后,会出现以下错误。

    Error while trying to retrieve text for error ORA-01804

    我尝试设置ENV ORACLE\u HOME=/var/task和/var/task/lib,但没有成功

    我看了下面的答案,但还没有找到帮助

    Error while trying to retrieve text for error ORA-01019

    Oracle with node-oracle: Error while trying to retrieve text for error ORA-01804

    2 回复  |  直到 6 年前
        1
  •  4
  •   surya k    7 年前

    这篇文章对我使用cx\u Oracle和Lambda函数很有帮助。它按预期工作。感谢您在Sayed Zainul Abideen创建此帖子

    但lambda又犯了一个错误

    我通过在python代码中添加以下行解决了这个问题:

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

    HOSTALIASES = /tmp/HOSTALIASES
    

    希望它能帮助别人。

    如果有任何与cx_Oracle相关的问题,请添加评论。我很乐意帮忙,因为我为解决这个问题付出了很多努力。

        2
  •  2
  •   Sayed Zainul Abideen    7 年前

    首先,我创建了三个符号链接(关于上面的dir结构):

    ln -s ./lib/libaio.so.1.0.1 ./lib/libaio.so.1

    ln -s ./lib/libaio.so.1.0.1 ./lib/libaio.so

    ln -s ./lib/libaio.so.1.0.1 ./libaio.so.1.0.1

    ln -s ./lib/libclntsh.so.12.1 ./lib/libclntsh.so

    然后我不正确地拉上拉链,我这样做:

    zip --symlinks -r9 ~/lamda.zip *

    成功了!那么正确地说。希望它能帮助别人。