导读:本期聚焦于小伙伴创作的《Oracle数据库TNS配置全攻略:从tnsnames.ora到listener.ora连接设置与故障排查详解》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Oracle数据库TNS配置全攻略:从tnsnames.ora到listener.ora连接设置与故障排查详解》有用,将其分享出去将是对创作者最好的鼓励。

Oracle数据库TNS配置方法详解

TNS(Transparent Network Substrate)是Oracle数据库的网络通信基础层,负责客户端与数据库服务器之间的连接建立与数据传输。正确的TNS配置是Oracle客户端能够成功连接数据库的前提,本文将详细介绍TNS的配置方法、核心参数说明以及常见问题排查。

一、TNS配置文件说明

Oracle的TNS配置主要依赖两个核心文件:tnsnames.oralistener.ora,两个文件的默认存储路径根据操作系统不同有所区别:

  • Windows系统:通常位于%ORACLE_HOME%\network\admin目录下,例如C:\app\oracle\product\19.0.0\dbhome_1\network\admin

  • Linux/Unix系统:通常位于$ORACLE_HOME/network/admin目录下,例如/u01/app/oracle/product/19.0.0/dbhome_1/network/admin

如果上述目录下没有对应文件,可以手动创建,Oracle会优先读取该路径下的配置,也可以通过环境变量TNS_ADMIN指定自定义配置文件路径。

二、tnsnames.ora配置详解

tnsnames.ora是客户端使用的配置文件,用于定义数据库服务的连接别名,客户端通过别名即可定位到目标数据库服务器。以下是标准配置模板:

# tnsnames.ora配置示例
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orclpdb)
    )
  )

各参数含义说明:

参数名说明
ORCL连接别名,客户端连接时使用的名称,可自定义,建议与数据库服务名对应
DESCRIPTION描述连接的整体信息,是固定关键字
ADDRESS定义数据库服务器的网络地址信息
PROTOCOL通信协议,常用TCP协议,也可使用IPC、BEQ等本地协议
HOST数据库服务器的IP地址或主机名,如果使用主机名需要确保客户端能正确解析
PORT数据库监听端口,默认是1521,若服务器修改了监听端口需对应调整
CONNECT_DATA定义连接时的数据库实例或服务信息
SERVER服务器模式,DEDICATED表示专用服务器模式,SHARED表示共享服务器模式
SERVICE_NAME数据库服务名,Oracle 12c及之后版本推荐使用服务名连接,而非传统的SID

如果需要使用SID连接,可将SERVICE_NAME替换为SID,示例如下:

ORCL_SID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = orcl)
    )
  )

三、listener.ora配置详解

listener.ora是数据库服务器端使用的配置文件,用于定义监听器的运行参数,监听器负责接收客户端的连接请求并转发给对应的数据库标准配置模板:

# listener.ora配置示例
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (PROGRAM = extproc)
    )
  )

各参数含义说明:

  • LISTENER:监听器名称,默认是LISTENER,可自定义

  • DESCRIPTION_LIST:监听器支持的地址列表,可配置多个监听地址

  • IPC:进程间通信协议,用于本地客户端连接

  • SID_LIST_LISTENER:定义监听器关联的数据库实例列表,静态注册实例时需要配置该部分

  • SID_NAME:数据库实例的SID名称

  • ORACLE_HOME:Oracle数据库的安装目录

Oracle 12c及之后版本支持动态服务注册,数据库实例启动后会自动向监听器注册服务,此时SID_LIST_LISTENER部分可以省略,监听器会自动识别运行中的服务。

四、配置验证与测试

完成配置后,可以通过以下方法验证配置是否正确:

1. 服务器端验证监听器状态

在数据库服务器上执行以下命令查看监听器运行状态:

# Linux/Unix系统
lsnrctl status

# Windows系统
lsnrctl status

如果输出中包含配置的服务名或SID,说明监听器配置正常。若需要重启监听器,执行以下命令:

lsnrctl stop
lsnrctl start

2. 客户端连接测试

在客户端使用tnsping工具测试TNS别名连通性:

tnsping ORCL

如果返回TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 01-JAN-2024 10:00:00以及OK (10 msec)类似信息,说明TNS配置连通性正常。

进一步使用SQL*Plus测试实际连接:

sqlplus username/password@ORCL

如果能成功登录到数据库,说明整个TNS配置完全正确。

五、常见问题排查

  • 连接超时:检查服务器IP、端口是否正确,服务器防火墙是否开放了对应端口,可先使用telnet 192.168.0.1 1521测试端口连通性

  • TNS-12154错误:提示无法解析指定的连接标识符,检查tnsnames.ora中别名是否存在,文件路径是否正确,或者TNS_ADMIN环境变量是否指向了正确的配置目录

  • 服务名不存在:检查tnsnames.ora中的SERVICE_NAMESID是否与数据库实际的服务名一致,可在服务器端执行select name from v$services;查看当前数据库的服务名

  • 监听器未启动:服务器端执行lsnrctl start启动监听器,若启动失败检查listener.ora配置是否有语法错误,比如括号不匹配、参数拼写错误等

六、多数据库环境配置示例

如果客户端需要连接多个不同的Oracle数据库,只需要在tnsnames.ora中追加多个配置块即可,示例如下:

# 第一个数据库配置
DB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = db1pdb)
    )
  )

# 第二个数据库配置
DB2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = db2pdb)
    )
  )

连接时分别使用sqlplus username/password@DB1sqlplus username/password@DB2即可访问不同的数据库。

OracleTNS配置 tnsnames.ora listener.ora 数据库连接 Oracle网络配置

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。