Oracle 使用utl_http.read_文本时使用ORA-24247。仅在延迟约60秒后出现

Oracle 使用utl_http.read_文本时使用ORA-24247。仅在延迟约60秒后出现,oracle,oracle11g,ora-24247,Oracle,Oracle11g,Ora 24247,我使用以下代码读取http请求的响应: FUNCTION readClob (ww_reponse IN OUT NOCOPY UTL_HTTP.resp) RETURN CLOB IS l_clob CLOB; l_text VARCHAR2 (32767); BEGIN DBMS_LOB.createtemporary (l_clob, FALSE); BEGIN

我使用以下代码读取http请求的响应:

      FUNCTION readClob (ww_reponse IN OUT NOCOPY UTL_HTTP.resp)
        RETURN CLOB
      IS
        l_clob   CLOB;
        l_text   VARCHAR2 (32767);
      BEGIN
        DBMS_LOB.createtemporary (l_clob, FALSE);
        BEGIN
          LOOP
=>          UTL_HTTP.read_text (ww_reponse, l_text, 32767);
            DBMS_LOB.writeappend (l_clob, LENGTH (l_text), l_text);
          END LOOP;
        EXCEPTION
          WHEN UTL_HTTP.end_of_body
          THEN
            UTL_HTTP.end_response (ww_reponse);
        END;
这对于小请求来说效果很好,但是对于较长的请求(大约>60秒),我在
read_text
指令中得到了ORA-24247错误(
访问控制列表(ACL)
),但令我惊讶的是,不是第一次调用,而是在大约60秒后的某个随机下一次迭代中。我的ACL是正常的,否则什么都不会起作用。 我还设置了更大的超时。显然,这个错误不是真正的错误。有人有相同的问题和解决方案吗?多谢各位

环境:
Windows Server 2008上的Oracle Database 11g Enterprise Edition(64位)

我终于找到了Oracle支持,并发现了以下内容: 如下图所示,删除并重新创建ACL

BEGIN 
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL( 
  acl => 'wallet-acl.xml', 
  description => 'Wallet ACL', 
  principal => 'APPS', 
  is_grant => TRUE, 
  privilege => 'use-client-certificates'); 

  DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE( 
  acl => 'wallet-acl.xml', 
  principal => 'APPS', 
  is_grant => TRUE, 
  privilege => 'use-passwords'); 

  DBMS_NETWORK_ACL_ADMIN.ASSIGN_WALLET_ACL( 
  acl => 'wallet-acl.xml', 
  wallet_path => 'file:'); 
 END; 
 /
但是我得到的消息被破坏了(遗漏了一些字符)

我已经在循环中添加了睡眠指令,现在一切都好了。这不是一个真正的解决方案,但充其量只是一个变通办法

      FUNCTION readClob (ww_reponse IN OUT NOCOPY UTL_HTTP.resp)
        RETURN CLOB
      IS
        l_clob   CLOB;
        l_text   VARCHAR2 (32767);
      BEGIN
        DBMS_LOB.createtemporary (l_clob, FALSE);
        BEGIN
          LOOP
            UTL_HTTP.read_text (ww_reponse, l_text, 32767);
=>          **dbms_lock.sleep(0.1);**
            DBMS_LOB.writeappend (l_clob, LENGTH (l_text), l_text);
          END LOOP;
        EXCEPTION
          WHEN UTL_HTTP.end_of_body
          THEN
            UTL_HTTP.end_response (ww_reponse);
        END;

请查看以获取有关如何解决和纠正此问题的信息。顺便说一句,当谷歌搜索ORA-24247时,引用的页面是第一个被点击的页面。分享和享受。我从这篇文章开始,我的ACL配置很好。要么你有权利,要么你没有,这并不取决于请求的持续时间。这是这个问题中真正令人不安的部分,也许这篇文章更适合描述它