ORA-29273:使用utl_http包时,HTTP请求失败了间歇性错误

时间:2013-11-28 17:11:19

标签: sql oracle plsql oracle11g oracle-apex

我正在使用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上运行,我会遇到同样的问题。

我尝试过的另一件事是使用long utl_htp.begin_request()方法而不是utl_http.request()快捷方式创建我自己的包来执行HTTP请求。这给出了完全相同的问题(有时工作但主要是错误 - 同样的错误)。

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

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

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

UTL_HTTP.set_transfer_timeout(3);

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

有谁知道可能导致此行为的原因?

3 个答案:

答案 0 :(得分:0)

可能的原因

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

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

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

还必须有一个选项,您可以在TNS-listener定义中提供IP号码。这有时也解决了这些问题。

- > IIS问题。

答案 1 :(得分:0)

了解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);

答案 2 :(得分:0)

你能超过并发HTTP连接的限制吗?我隐约记得当我忘记关闭HTTP连接时遇到了类似的问题。