EM Express打不开首要原因是HTTPS端口为0,即未配置;需确认数据库OPEN、监听运行、用户具SYSDBA权限,再查GETHTTPSPORT()值,按CDB/PDB上下文设唯一端口,并确保dispatchers参数正确、防火墙放行、浏览器信任自签名证书。

EM Express 为什么打不开?先看端口是不是 0
EM Express 打不开最常见的原因是端口没设——DBMS_XDB_CONFIG.GETHTTPSPORT() 返回 0 就代表 HTTPS 端口完全未启用。这不是配置失败,而是压根没配。它不像传统服务有开关命令,端口为 0 = 功能不可用。
执行前必须确认:数据库已 OPEN、监听器已运行(lsnrctl status 能看到 XDB 服务)、当前用户有 SYSDBA 权限。
-
SELECT DBMS_XDB_CONFIG.GETHTTPSPORT() FROM DUAL;—— 查 HTTPS 端口(推荐,更安全) -
SELECT DBMS_XDB_CONFIG.GETHTTPPORT() FROM DUAL;—— 查 HTTP 端口(不推荐,19c+ 默认禁用明文 HTTP)
设置端口要分清 CDB 和 PDB 容器上下文
在 12c+ 多租户环境下,SETHTTPSPORT 的作用范围取决于你当前连接的容器。连到 CDB$ROOT 设置的是 CDB 级端口;连到某个 PDB(如 ALTER SESSION SET CONTAINER = MY_PDB;)设置的才是该 PDB 独立端口。每个容器必须用**唯一端口**,否则访问会冲突或跳转失败。
- 对 CDB 设置:直接在
CDB$ROOT下执行EXEC DBMS_XDB_CONFIG.SETHTTPSPORT(5500); - 对单个 PDB 设置:先切容器
ALTER SESSION SET CONTAINER = PDB1;,再执行EXEC DBMS_XDB_CONFIG.SETHTTPSPORT(5501); - 想让所有 PDB 共享一个全局端口(仅限 12.2+):在
CDB$ROOT下先运行EXEC DBMS_XDB_CONFIG.SETGLOBALPORTENABLED(TRUE);,再设端口
监听器和 dispatchers 参数不能漏
EM Express 依赖 Oracle 内置的 XDB HTTP Server,而它靠监听器的 dispatchers 参数暴露服务。如果 dispatchers 缺失或格式错误,即使端口设了,浏览器也会显示“无法连接”或“拒绝连接”。
- 检查当前值:
SHOW PARAMETER dispatchers;,正常应含类似(PROTOCOL=TCP)(SERVICE=ORCLXDB)的条目 - 若为空或不匹配,需修改参数:
ALTER SYSTEM SET dispatchers='(PROTOCOL=TCP)(SERVICE=ORCLXDB)' SCOPE=BOTH;(ORCLXDB中的ORCL要替换成你实际的SID) - 改完无需重启库,但若用的是 pfile 且未加
SCOPE=BOTH,下次启动会丢失
访问时被浏览器拦截或提示证书不信任
首次访问 https://host:5500/em,Chrome/Firefox 通常会报“您的连接不是私密连接”,因为 Oracle XML DB 自带的是自签名证书,不是由公共 CA 签发的。这不是配置错误,是设计如此。
- 可临时点“高级 → 继续前往(不安全)”登录;生产环境建议导入自建 CA 证书替换默认 wallet
- 确保 URL 是
https(不是http),且端口号与GETHTTPSPORT()返回值严格一致 - 如果防火墙/SELinux 开启,需放行对应端口(如
firewall-cmd --add-port=5500/tcp --permanent)
lsnrctl status 应能看到类似 Service "ORCLXDB" has 1 instance(s). 的输出,且实例状态为 READY。端口配置本身不难,真正容易卡住的是容器上下文错位、dispatchers 没配、或者浏览器因证书直接中断了 TLS 握手——这三处不排查清楚,光设端口毫无意义。


















