0

0

如何配置Oracle的IPv6网络监听_listener.ora中的IPv6地址绑定

P粉602998670

P粉602998670

发布时间:2026-03-10 23:51:11

|

434人浏览过

|

来源于php中文网

原创

oracle监听器配置ipv6必须用方括号包裹地址(如[2001:db8::1]),否则解析失败;需设ip_address_listener=yes禁用ipv4映射,并同步更新local_listener参数。

listener.ora 里写 ipv6 地址必须加方括号

oracle 监听器不识别裸 ipv6 地址(比如 2001:db8::1),直接写会启动失败,报错类似 tns-12545: connect failed because target host or object does not exist 或更底层的 tns-12560: tns:protocol adapter error。根本原因是 oracle 内部解析地址时把冒号当成分隔符,没做 ipv6 字面量封装。

正确写法是把 IPv6 地址用方括号包起来,和 HTTP/URL 里的规则一致:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = [2001:db8::1])(PORT = 1521))
    )
  )
  • 方括号 [ ] 是强制要求,缺一不可
  • HOST 值支持 IPv6 字面量(如 [::1])或 IPv6 域名(如 [mydb-v6.example.com]),但域名需确保 DNS 返回 AAAA 记录且本地 /etc/hosts 或 resolver 能解析
  • 不要混用 IPv4 和 IPv6 在同一个 ADDRESS 块里——Oracle 不支持双栈单地址配置

监听器要真正绑定 IPv6,得关掉 IPv4 映射

默认情况下,Linux/Unix 上的 Oracle 监听器可能启用 IPv4-mapped IPv6 socket(即一个 socket 同时接受 IPv4 和 IPv6 连接),这看起来“能连”,但实际走的是 IPv4 协议栈,netstat -tlnp | grep 1521 会显示 tcp6 但监听在 :::,本质是通配模式,不是真正的 IPv6 绑定。

要让监听器只响应原生 IPv6 流量、并暴露真实 IPv6 端口状态,必须显式禁用映射:

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=OFF
DISABLE_ASYNCH_IO=ON  # 部分版本配合使用,防异步 I/O 干扰
# 关键:强制使用纯 IPv6 socket
IP_ADDRESS_<code>LISTENER</code>=<code>YES</code>
  • IP_ADDRESS_<code>LISTENER=YES 是关键开关,它告诉 Oracle 使用 AF_INET6 socket 创建监听,而非默认的兼容模式
  • 该参数需写在 listener.ora 的顶层(不在 DESCRIPTION 块内),且修改后必须 lsnrctl reloadlsnrctl stop && lsnrctl start
  • 验证是否生效:运行 lsnrctl status,看输出里 Listening Endpoints Summary... 是否明确列出 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=[2001:db8::1])(PORT=1521))),而不是 (HOST=*)(PORT=1521)

客户端连接 IPv6 监听器时,tnsnames.ora 也要套方括号

服务端配好了,客户端如果还用老写法,照样连不上。Oracle 客户端(sqlplus、JDBC thin、ODP.NET)对 IPv6 地址的解析逻辑和监听器一致——必须带方括号。

FaceSwapper
FaceSwapper

FaceSwapper是一款AI在线换脸工具,可以让用户在照片和视频中无缝交换面孔。

下载

错误写法:(HOST = 2001:db8::1) → 解析失败,报 ORA-12170: TNS:Connect timeout occurred

正确写法:

MYDB6 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = [2001:db8::1])(PORT = 1521))
    (CONNECT_DATA = (SERVICE_NAME = orcl))
  )
  • 方括号只包 IP,不包端口、不包协议,[2001:db8::1]:1521 是错的,Oracle 不认这种 URL 风格
  • 如果用 JDBC,URL 格式为 jdbc:oracle:thin:@[2001:db8::1]:1521/orcl,同样不能省略方括号
  • Windows 客户端要注意:某些旧版 Oracle Client(如 11.2.0.1)对 IPv6 支持不完整,建议至少用 12.1+ 版本

IPv6 网络通但连接被拒绝?检查防火墙和 Oracle 的 LOCAL_LISTENER

监听器日志($ORACLE_HOME/network/log/listener.log)里出现 TNS-12535: TNS:operation timed outTNS-12547: TNS:lost contact,但 ping6telnet [2001:db8::1] 1521 都通,问题大概率出在两处:

  • 系统防火墙(iptables / ip6tablesfirewalld)没放开 IPv6 的 1521 端口,注意 ip6tables 是独立服务,和 iptables 无关
  • 数据库实例里 LOCAL_LISTENER 参数没同步更新,导致实例注册到监听器时仍用 IPv4 地址,造成“监听器知道有这个服务,但连过去找不到实例”。查一下:SELECT value FROM v$parameter WHERE name = 'local_listener';,应设为 (ADDRESS=(PROTOCOL=TCP)(HOST=[2001:db8::1])(PORT=1521)),然后执行 ALTER SYSTEM REGISTER;
  • 部分云环境(如 OCI、AWS)的网络 ACL 或安全组默认禁用 IPv6 流量,需手动添加入站规则

IPv6 的地址格式、socket 行为、工具链支持都比 IPv4 更敏感,少一个方括号、漏一条防火墙规则、或者忘了刷新 LOCAL_LISTENER,都会让整个链路静默失败。别依赖“看起来能 ping 通”就认为配置完成。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

492

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

377

2023.10.25

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

442

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

603

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1476

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1169

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

835

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

461

2023.08.02

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号