ORA-24247错误需授网络ACL权限:用DBA执行DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE为APEX_PUBLIC_USER(或自定义用户)授予connect权限,并重启PDB;ORDS启动失败常见于Java版本不兼容(需Java 11/17/21)或端口占用(应显式指定--port);Nginx需配置/i/、/apex/、/ords/三处location并设proxy_set_header Host为$host:$server_port;独立模式必须指定--config指向已安装的配置目录,否则使用空配置导致登录失败。
ORA-24247 网络权限错误:安装 APEX 后访问 /apex 失败
装完 apex,浏览器打开 /apex 显示 500 错误或 ora-24247,说明数据库没给网络访问权限——这不是 apex 没装好,而是 oracle 默认禁用所有外部网络调用。
必须手动授予权限,且权限对象要和 APEX 所用的数据库用户(通常是 APEX_PUBLIC_USER 或你自定义的配置用户)匹配:
- 用 DBA 账户执行:
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => '*', ace => xs$ace_type(privilege_list => xs$name_list('connect'), principal_name => 'APEX_PUBLIC_USER', principal_type => xs_acl.ptype_db)); END; - 如果用了自定义用户(比如
ORDS_CONFIG_USER),把'APEX_PUBLIC_USER'换成对应用户名 - ACL 生效有缓存,执行后建议重启 PDB(或实例),单纯刷新连接不生效
ORDS 独立模式启动失败:java.lang.NoClassDefFoundError 或端口被占
运行 java -jar ords.war 报 NoClassDefFoundError,大概率是 Java 版本不兼容——ORDS 23.x 起只支持 Java 11/17/21,Java 8 已彻底不认。
端口冲突更常见:默认 8080 被 Tomcat、Docker 或其他服务占了,别硬改配置文件,直接启动时指定:
- 临时换端口:
java -jar ords.war --port 8081 - 确认端口空闲:
lsof -i :8080(macOS/Linux)或netstat -ano | findstr :8080(Windows) - 独立模式下,
standalone.properties文件里standalone.http.port的值不会自动生效,必须显式传参或用--config指向配置目录
Web 层反向代理配置:Nginx 转发 /apex 到 ORDS 但静态资源 404
用 Nginx 做前端,location /apex 转发到 http://localhost:8080/ords,结果图标、CSS 全挂——因为 APEX 的静态资源路径(如 /i/)默认没被代理规则覆盖。
必须显式补全两个关键 location 块:
-
location /i/→ 直接映射到 APEX 安装目录下的/opt/oracle/product/21c/dbhome_1/apex/images(路径以你实际为准) -
location /apex/和location /ords/都要配,否则部分 AJAX 请求会 404(APEX 页面内请求可能走/ords/前缀) - Nginx 的
proxy_set_header Host必须设为$host:$server_port,否则 ORDS 生成的重定向 URL 会漏端口
ORDS 独立模式下无法登录:提示 “Invalid credentials” 但用户名密码没错
最常踩的坑是:独立模式启动时没指定配置目录,ORDS 自动创建了一套新配置,导致它压根没读你之前在数据库里配好的 APEX_PUBLIC_USER 密码。
启动前务必确认两件事:
- 先运行
java -jar ords.war install advanced,按提示完成配置,生成ords/config目录 - 之后每次启动都加
--config /path/to/ords/config,否则 ORDS 当成首次运行,初始化空配置 - 检查
defaults.xml里db.password是否为空或被 base64 错误解密(手动改过文件易出这问题)
配置路径一旦写错,ORDS 不报错也不提示,静默用内置默认值连库,自然登不进去。

















