【问题标题】:ORA-29273: HTTP request failed intermittent error using the utl_http packageORA-29273: 使用 utl_http 包的 HTTP 请求失败间歇性错误
【发布时间】:2013-12-14 19:32:07
【问题描述】:

我正在使用utl_http 包向与Oracle 位于同一服务器(本地)上的IIS 站点发出HTTP GET 请求。有时它可以工作并且我得到响应,但通常它会挂起大约 15 秒然后我得到这个错误:

ORA-29273:HTTP 请求失败 ORA-06512:在“SYS.UTL_HTTP”,第 1722 行 ORA-29263:HTTP 协议错误

作为测试,我在 IIS 站点中有一个小的静态文本文件,所以我是这样测试它的:

select utl_http.request('http://domain.com/test.txt') from dual

如果我在 Oracle Apex 而不是直接在 db 上运行它,我会遇到同样的问题。

我尝试的另一件事是创建自己的包,它使用长 utl_htp.begin_request() 方法而不是 utl_http.request() 快​​捷方式来执行 HTTP 请求。这给出了完全相同的问题(有时有效,但大多数错误 - 相同的错误)。

我看到的模式是,如果我等待一段时间然后尝试,它会在前 2-10 次有效,然后开始出错。当它起作用时,我会立即得到响应,当它出错时,总是会在出错之前有延迟。

如果我使用远程 Web 浏览器请求文本文件 URL(或站点中的任何其他资源),那么我每次都会得到正确的响应。

我已尝试设置如下所示的超时,但没有任何效果。例如,不是在 3 秒后超时,而是在显示错误之前持续 10 或 15 秒。

UTL_HTTP.set_transfer_timeout(3);

我想我可以排除 ACL,因为它有时会起作用。

有谁知道什么可能导致这种行为?

【问题讨论】:

    标签: sql oracle plsql oracle11g oracle-apex


    【解决方案1】:

    可能的原因

    -> 你的 TNS-Listener 可能有问题。

    在命令提示符窗口中,尝试运行TNSPING service_name ..尝试快速运行几次,并检查其中一些是否失败。

    我曾经遇到过类似的问题。尝试重新配置您的 TNS-Listener。

    还必须有一个选项,您可以在其中在 TNS 侦听器定义中提供 IP 编号。这有时也解决了这类问题。

    -> IIS 问题。

    【讨论】:

    • 感谢您的指点。我已经尝试过 TNSPING,它每次都会返回 OK
    【解决方案2】:

    阅读 SET_PERSISTENT_CONN_SUPPORT 程序: https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_http.htm#i1027673

    使用:utl_http.set_persistent_conn_support(true, 30);

    【讨论】:

      【解决方案3】:

      您是否超出了并发 HTTP 连接的限制?我依稀记得我忘记关闭 HTTP 连接时遇到了类似的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-08
        • 1970-01-01
        相关资源
        最近更新 更多