ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 深入理解监听

深入理解监听

原创 Linux操作系统 作者:zzt0605 时间:2011-08-31 18:28:27 0 删除 编辑

今天上班第二天,发现一个很奇怪的问题。主管发给了我一个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地址然后去连接这个IPglobal_name=test这个实例,当然我这里orcl并不是一个主机名。

 

10gNAMES.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 是服务器的SIDServer = ? 可分为共享服务器和专用服务器两种体系结构。共享服务器依靠调度程序服务处理来自客户端的连接请求,单个调度程序可以同时为多个客户机连接提供服务。而专用服务器进程不要求客户端共享任何资源,一个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_HOMEGLOBAL_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)提供服务。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22957140/viewspace-706371/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-12-02

  • 博文量
    2
  • 访问量
    3859