请求 utl_http 包时 Oracle 错误“ORA-28759:打开文件失败”
Posted
技术标签:
【中文标题】请求 utl_http 包时 Oracle 错误“ORA-28759:打开文件失败”【英文标题】:Oracle error "ORA-28759: failure to open file" when requesting utl_http package 【发布时间】:2014-12-29 03:23:17 【问题描述】:我无法执行以下语句-
DECLARE
lo_req UTL_HTTP.req;
lo_resp UTL_HTTP.resp;
BEGIN
UTL_HTTP.SET_WALLET ('file: C:\app\wallet','abcd@1234');
lo_req := UTL_HTTP.begin_request('https://wordpress.org/');
lo_resp := UTL_HTTP.get_response(lo_req);
dbms_output.put_line(lo_resp.status_code);
UTL_HTTP.end_response(lo_resp);
END;
我的钱包路径是 C:\app\wallet,密码是 abcd@1234。 执行此代码时,显示以下错误:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1130
ORA-28759: failure to open file
我该如何解决?
【问题讨论】:
你能检查一下Oracle用户是否有文件的读取权限吗? 删除file:
和C:\app\wallet
之间的空格。祝你好运。
如何检查? @vishad
【参考方案1】:
documentation for UTL_HTTP.SET_WALLET() 关于路径有两点要说:
-
Windows上的格式是这样的
file:c:\WINNT\Profiles\username\WALLETS
钱包路径必须可以从数据库服务器访问。
很明显,您的代码未能通过第一点,因为您在 file
关键字和驱动器号之间有一个空格。
也许第二点也适用:那是您数据库服务器上的驱动器吗?
【讨论】:
我已删除文件:和路径之间的您需要为 cwallet.sso 和 ewallet.p12 文件的相应用户或组添加权限。如果您使用了 orakpi 实用程序,则可能不存在权限。
对于 Windows,
1.选择文件,右击,选择属性。
2.选择安全选项卡并单击更改权限。
3.单击添加 > 位置,然后选择适当的位置。
4.在选择用户或组字段中,输入 ora_dba。单击检查名称按钮以验证 ora_dba 组是否存在。
5.单击“确定”,显示“权限条目”对话框。
6.选中完全控制旁边的允许复选框,然后单击确定。
7.在高级安全对话框中单击应用。
8.单击确定退出对话框。
【讨论】:
以上是关于请求 utl_http 包时 Oracle 错误“ORA-28759:打开文件失败”的主要内容,如果未能解决你的问题,请参考以下文章
对于使用 Oracle pl sql 的 http 请求,是不是有替代 utl_http 包的方法?
通过具有 78000 个字符的 Oracle 12c DB 使用 utl_http 请求 REST 调用正文
Oracle 10g UTL_HTTP begin_request 返回 ORA-29273: HTTP 请求失败
Oracle UTL_HTTP 请求返回比在 Python 或 curl 中完成相同请求时更短的响应