目标
描述主机命名与本地服务名称解析之间的区别
使用 Oracle Net Configuration Assistant 配置
主机命名方法
本地命名方法
网络服务名
排除简单连接出现的故障
要点
命名方法概览
客户机应用程序在试图连接数据库服务时需要借助命名方法将连接标识符解析为连接描述符
Oracle Net 提供了五种命名方法
主机命名(Host Naming)使 TCP/IP 环境中的用户能够通过其现有名称解析服务来解析名称
本地命名使用在每个客户机的 tnsnamesora 文件中配置和存储的信息查找网络地址
目录命名将数据库服务或网络服务名解析为连接描述符该描述符存储在中央目录服务器中
Oracle Names这是由 Oracle Names 服务器系统构成的 Oracle 目录服务这些服务器可以为网络上的每个服务提供由名称到地址的解析
外部命名使用受支持的第三方命名服务
对于只有几个数据库的小型组织来说应使用主机命名将名称存储在现有名称解析服务中也可使用本地命名将名称存储在客户机上的 tnsnamesora 文件中
对于有多个数据库的大型组织来说应使用目录命名将名称存储在集中管理的符合 LDAP 的目录服务器中
主机命名
在下列情况下客户机可使用主机名来连接服务器
使用 Oracle Net Services Client 软件连接 Oracle 数据库服务
使用 TCP/IP 协议建立客户机与服务器的连接
主机名通过 DNS 或本地的 /etc/hosts 文件等 IP 地址转换机制来解析
不使用 连接管理器 (Connection Manager) 或安全选项等高级功能
主机命名方法具有下列优点
需要的用户配置最少用户只需提供主机名即可建立连接
无需创建与维护本地名称配置文件 (tnsnamesora)
无需了解 Oracle Names 或 Oracle Internet Directory 管理过程
主机命名在每个节点上只能标识一个 SID而使用其它命名方法还可标识其它 SID
如果在主机 (hosts) 文件中对多个全局名称设置了别名让它们指向同一 IP 地址这样即使这些数据库位于同一节点上也可使用主机命名连接任意数据库
客户端要求
如果使用主机命名方法则必须在客户机上安装 TCP/IP 协议此外还必须安装 Oracle Net Services 和 TCP/IP 协议适配器
主机名通过域名服务 (Domain Name Services DNS)网络信息服务 (Network Information Services NIS) 或集中维护的 TCP/IP 主机文件等 IP 地址转换机制来解析
使用主机命名方法之前必须先对客户端进行如上配置
服务器端要求
如果使用主机命名方法除了客户机还必须在服务器上也安装 TCP/IP 协议此外需要在服务器端安装 Oracle Net Services 和 TCP/IP 协议适配器
在 Oraclei 和 Oraclei 中只要满足以下条件之一就可向监听程序自动注册有关数据库的信息(包括全局数据库名称)
在端口 上使用 TCP/IP 运行的名为 LISTENER 的缺省监听程序正在运行
已在初始化文件中设置了 LOCAL_LISTENER 参数
早期版本中是通过listenerora文件向监听程序注册数据库信息的必须静态配置SID_LIST_listener_name段以包含GLOBAL_DBNAME参数
全局数据库名称由数据库名称和数据库域名构成可以从初始化参数文件中的SERVICE_NAMES参数或DB_NAME和DB_DOMAIN参数来获取 GLOBAL_DBNAME 的值
主机名必须与在客户机中指定的连接字符串匹配其它信息还包括要连接的数据库的信息
说明
主机命名在客户端使用sqlnetora文件在服务器端使用listenerora文件
sqlnetora中的NAMESDIRECTORY_PATH参数确定的是连接时搜寻先后顺序例如NAMESDIRECTORY_PATH= (TNSNAMES ONAMES HOSTNAME)
则先从本地TNSNAMES文件中去找连接时提供的描述符如果没有发现匹配的则再去oracle name server上找
再没有则使用主机命名方法进行连接——将连接描述符(假定为test)当作一个主机去连接去该主机上寻找GLOBAL_DBNAME=test的实例(实例名可能不是test)进行连接
本地命名
本地命名的优点
提供了一种相对简单明了的解析服务名地址的方法
对于使用不同协议的各个网络可跨网络解析服务名
可使用图形配置工具轻松配置
本地命名方法要求网络服务名存储在 tnsnamesora 文件中
本地命名在客户端使用tnsnamesora和sqlnetora文件在服务器端使用listenerora文件
在图形化界面中配置网络服务名
service name为该数据库服务的service name一般为db_namedb_domain
net服务名为按该服务在本地的标识符相当于别名
故障排除
ORATNS无法解析服务名
原因Oracle Net Services 找不到在 tnsnamesora 配置文件中指定的连接描述符
操作
检查 tnsnamesora 文件是否存在以及是否可访问
检查 tnsnamesora 文件是否位于 TNS_ADMIN 环境变量指定的位置中
在 tnsnamesora 文件中核实在连接字符串中指定的服务名已经映射为tnsnamesora文件中的连接描述符还要核实文件中没有语法错误
确认不存在 sqlnetora 文件的重复副本
如果正从登录对话框连接则应核实连接服务名前没有 at 符号 (@)
ORATNS找不到指向目标的路径和ORATNS无法连接目标
原因客户机找不到所需数据库
操作
核实已正确输入要连接的数据库的服务名
核实 TNSNAMESORA 文件的连接描述符中的服务名 ADDRESS 参数是正确的
核实 TNSNAMESORA 文件已存储在 TNS_ADMIN 环境变量定义的目录中
核实远程节点上的监听程序已经启动并正在运行如果未启动可使用 监听程序控制实用程序启动监听程序
如果正从登录对话框连接则应核实连接服务名前没有 at 符号 (@)
ORATNSADDRESS 参数非法
原因tnsnamesora 文件内指定的连接描述符的 ADDRESS 段中的协议特定参数不正确
操作
有关针对不同协议的关键字的详细信息请参考适用于平台的 Oracle 操作系统文档
ORATNS没有监听程序
原因无法与远程节点上的监听程序取得联系
操作
核实远程节点上的监听程序已经启动可使用 监听程序控制实用程序 的 STATUS 命令检查监听程序的状态如果需要还可使用 START 命令启动该监听程序