oracle 23c free 默认pdb不自动open、服务名必须为freepdb1且大小写敏感、/etc/hosts与hostname-f必须匹配,三者任一缺失均导致连接失败。

连接失败根本不是密码或监听器问题
绝大多数人卡在 sqlplus / as sysdba 报 ORA-01017 或用客户端连不上,第一反应是改密码、重启监听、查防火墙——但 Oracle 23c Free 的默认行为是:CDB 启动了,PDB 默认处于 MOUNTED 状态,不手动 ALTER PLUGGABLE DATABASE FREEPDB1 OPEN;,它就永远不接受连接。
验证方法很简单:sqlplus / as sysdba 能进 CDB(哪怕只输错一次密码后重试成功),执行 show pdbs 就会看到 FREEPDB1 状态是 MOUNTED 而非 READ WRITE。
必须确认连接串中的 service_name 是 FREEPDB1
很多人照着日志里写的 VM-130-23-tencentos:1539/FREE 去连,结果失败——FREE 是 CDB 名,不是 PDB 名。23c Free 的默认可插拔数据库服务名固定为 FREEPDB1,大小写敏感,不能简写、不能省略。
- SQL*Plus 正确写法:
sqlplus sys/<password>@localhost:1539/FREEPDB1 as sysdba</password> - SQL Developer 或 JDBC 连接时,Service Name 字段必须填
FREEPDB1,不是FREE、ORCLPDB1或空 - tnsnames.ora 中对应条目里的
SERVICE_NAME值也必须是FREEPDB1
/etc/hosts 和 hostname -f 不匹配会导致静默连接失败
即使 PDB 已 OPEN、service_name 写对,lsnrctl status 显示服务注册正常,客户端仍可能报 ORA-12545 或超时。根源常是主机名解析失效:
-
/etc/hostname必须是完整域名格式,例如ol8-23.localdomain,不能是ol8-23 -
/etc/hosts中必须有对应行:127.0.0.1 ol8-23.localdomain ol8-23 - 执行
hostname -f输出必须与/etc/hostname完全一致;不一致则监听器注册的地址不可达,客户端无法反向解析
configure 脚本中途失败会导致 PDB 根本没创建
如果 /etc/init.d/oracle-free-23c configure 执行到一半退出(比如密码不合规、CV_ASSUME_DISTID 没设对、磁盘空间不足),日志可能显示 “Database created”,但实际只建了 CDB,FREEPDB1 并未生成。此时 show pdbs 返回空,lsnrctl status 也看不到 FREEPDB1 服务。
补救方式不是重跑 configure,而是先清理:rm -rf /opt/oracle/oradata/FREE,再确保 CV_ASSUME_DISTID=OL8 已生效,然后重新运行 configure——否则残留状态会干扰重建。











