Oracle 使用utl_http.read_文本时使用ORA-24247。仅在延迟约60秒后出现
我使用以下代码读取http请求的响应: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
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配置很好。要么你有权利,要么你没有,这并不取决于请求的持续时间。这是这个问题中真正令人不安的部分,也许这篇文章更适合描述它