[转帖]深入理解监听_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3652 | 回复: 0   主题: [转帖]深入理解监听        下一篇 
derek
注册用户
等级:中校
经验:1550
发帖:209
精华:0
注册:2011-7-21
状态:离线
发送短消息息给derek 加好友    发送短消息息给derek 发消息
发表于: IP:您无权察看 2011-9-2 13:31:13 | [全部帖] [楼主帖] 楼主

今天上班第二天,发现一个很奇怪的问题。主管发给了我一个tnsname.ora文件,

我用pl/sq developer可以登录 。但使用IP不能连接远程数据库,只能使用连接串。

sqlplus user/4567@10.10.143.148:1521/crmbcv4


SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 8月 31 16:36:06 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:


ORA-12154: TNS: 无法解析指定的连接标识符

在群里问了一下,小路讲使用这种格式可用

sqlplus username/password@连接串


试了一下,解决了。

小顽童猜测他们的tnsname.ora设置里面没有我机器的IP地址。所以你用IP地址的方式连不上去。

最后查了一些资料,把笔记里的资料重新整理了一下。如下:

sqlnet.ora,tnsnames.ora,另外还有listener.ora,都是放在$ORALCE_HOME\network\admin目录下。

sqlnet.ora用在oracle client端,用于配置连接服务端oracle的相关参数.

tnsnames.ora用在oracle client端,用户配置连接数据库的别名参数

listener.ora用在oracle server端,配置oracle服务端程序的监听参数

sqlnet.ora类似于操作系统的/etc/netsvc.conf文件,里面对解析的优先顺序进行编排

tnsname.ora类似于操作系统的/etc/hosts文件,本地将TNS名解析为目标IP地址及Service-Name

listener.ora类似于操作系统的/etc/services文件,里面定义了监听的端口、服务名等

1.1.1.sqlnet.ora(客户端)


通过这个文件来决定怎样找一个连接中出现的连接字符串。例如我们客户端键入

sqlplus test/test@orcl,如果sqlnet.ora是下面这样:
NAMES.DEFAULT_DOMAIN = localdomain
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)


&说明

NAMES.DEFAULT_DOMAIN指定网络域名。

NAMES.DIRECTORY_PATH指定当解析客户端连接标识符时命名方法(naming metthods)采用的优先顺序从左至右递减在CAMS应用中。

这两个参数采用上述所示的系统缺省值。

示例文件:

# sqlnet.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME, ONAMES)
SQLNET.AUTHENTICATION_SERVICES= (NTS)


这个表示采用OS认证,在数据库服务器上,可以利用sqlplus / as sysdba。

一般这个配置在windows上是ok的,在unix环境下可能会有问题,一般在unix下可以去掉这个配置。

NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)


表示将首先利用tnsnames进行解析;如果tnsnames解析不到,将使用hostname通过网络的途径解析IP;��果hostname解析不到,将采用onames进行解析;例如我们客户端输入:sqlplus test1/test1@test,那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.

如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的IP地址然后去连接这个IP上global_name=test这个实例,当然我这里orcl并不是一个主机名。

10g下NAMES.DIRECTORY_PATH增加了EZCONNECT。使用EZCONNECT必须满足以下要求:

1.oracle net servieces 10g必须安装在客户端

2.客户端以及服务器必须支持TCP/IP,并启用

3.不允许高级连接描述特性,如:连接池

方法示例:connect scott/tiger@hostname:port/servicename

ORA-12514一个很常见的原因是NAMES.DIRECTORY_PATH漏了TNSNAMES,可能是Oracle Net Configuration时少选了Oracle Names选项。

1.1.2.Tnsnames.ora客户端


这个文件放在客户端机器上,记录客户端访问数据库的本地配置,其实就是定义网络服务,只有当sqlnet.ora中有"NAMES.DIRECTORY_PATH= (TNSNAMES)"这样的字样时,也就是客户端解析连接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件。

示例文件:

# TNSNAMES.ORA Network Configuration File: D:\oracle\fullOracle\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
test_link =                   //网路服务名
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 108.108.108.108)(PORT = 1521))
//访问数据库使用的协议,数据库计算机的主机名或IP地址,数据库的端口号
)
(CONNECT_DATA =
(SID = test)                    //数据库实例名
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)


protocol一般为TCP,HOST可以为IP,可以是可Ping的通的主机名,Service_Name = orcl是服务器的SID,Server = ?可分为共享服务器和专用服务器两种体系结构。共享服务器依靠调度程序服务处理来自客户端的连接请求,单个调度程序可以同时为多个客户机连接提供服务。而专用服务器进程不要求客户端共享任何资源,一个session启动一个process。

1.1.3.listener.ora(服务器端)


它是listener监听器进程的配置文件。关��listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。

Listener.ora文件的例子

#listener.ora Network Configuration File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
#下面定义LISTENER进程为哪个实例提供服务
#这里是ORCL,并且它对应的ORACLE_HOME和GLOBAL_DBNAME
#其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做数据库连接
SID_LIST_LISTENER =
(SID_LIST =                   //这里定义LISTENER进程为哪个实例提供服务
(SID_DESC =
(GLOBAL_DBNAME = boway)
(ORACLE_HOME = E:\oracle\product\10.1.0\Db_2)
(SID_NAME = ORCL)
)
)
#监听器的名字,一台数据库可以有不止一个监听器
#再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使#用的是主机名
LISTENER =
(DESCRIPTION =
ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))         //监听器监听的协议,IP,端口等
)


上面的例子是一个最简单的例子,但也是最普遍的。一个listener进程为一个instance(SID)提供服务。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论