Oracle 19c云服务器默认监听localhost,外部无法连接;必须同时配置安全组放行1521端口、修改listener.ora中HOST为0.0.0.0或公网IP并执行lsnrctl reload,且tnsnames.ora中HOST需与访问方式匹配。
云服务器上部署 oracle 19c 后,默认监听只绑定 localhost,外部根本连不上——不是数据库没装好,是安全组没放行端口。
你得手动开 1521(默认监听端口),否则客户端一连就报 ORA-12170: TNS:Connect timeout occurred 或直接拒绝连接。
安全组必须放行 1521 TCP 入站规则
- 云厂商控制台里,“安全组 → 修改规则 → 添加入站规则”是唯一生效路径,
firewalld或iptables在云环境里常被绕过,不能替代安全组 - 规则类型选
TCP,端口填1521,源地址建议限制为具体 IP 段(如192.168.10.0/24),别用0.0.0.0/0(除非测试阶段且确认无风险) - 若启用了非默认端口(比如用
lsnrctl改成1522),规则里端口必须同步改,且检查listener.ora中的PORT值是否一致 - 多节点 RAC 场景下,每个节点都要单独配安全组规则,SCAN IP 和 VIP 对应的节点也需分别放行
tnsnames.ora 和 listener.ora 的绑定地址影响实际生效范围
Oracle 监听器默认可能只监听 127.0.0.1,即使开了安全组也没用:
- 检查
$ORACLE_HOME/network/admin/listener.ora中的ADDRESS配置:- 错误写法:
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) - 正确写法:
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))或明确填云服务器的公网/内网 IP(如172.18.12.82)
- 错误写法:
- 修改后执行
lsnrctl reload生效,别只重启数据库实例 -
tnsnames.ora中的HOST字段要和安全组允许访问的 IP 一致——比如你用公网 IP 连,HOST就不能写localhost
RAC 环境下 SCAN IP 和 VIP 的安全组配置容易漏项
RAC 不是只开一个 1521 就完事:
-
SCAN IP是负载入口,必须在对应节点的安全组中放行其绑定的物理网卡 IP 的1521端口(不是 SCAN IP 本身) - 每个节点的
VIP也需要独立放行:VIP 是漂移地址,但监听进程仍跑在物理节点上,安全组规则要落在该节点上 - 如果用了私网心跳网卡(如
10.10.10.0/24),千万别把1521开在这个网段——业务流量不该走心跳网络
安全组规则生效快,但监听绑定和网络配置不匹配时,你会反复怀疑是不是规则没生效。真正卡住的往往不是“有没有开”,而是“开给谁、绑在哪、连到哪”。











