在oracle安装目录$HOME/network/admin下,,经常看到sqlnet.ora tnsnames.ora listener.ora这三个文件,除了tnsnames.ora,其他两个文件详细的用途很多人都不太了解。
1. sqlnet.ora 用在oracle client端,用于配置连接服务端oracle的相关参数.
2. tnsnames.ora 用在oracle client端,用户配置连接数据库的别名参数,就像系统中的hosts文件一样。
3. listener.ora 用在oracle server端,配置oracle服务端程序的监听办法,比如限制某些ip等参数。
在安装目录$HOME/network/admin/samples下,会看到如上上个文件的示例文件,里面会有相关参数的说明和用法,如果遇到什么问题,大家可以对照这些示例文件中相关参数的说明进行解决。
如果连接数据库出了什么问题,在保证网络出正常,没有防火墙干扰的情况下,查找问题的步骤是:
1)在客户端顺序检查sqlnet.ora,tnsnames.ora是有问题。
2)在服务器端检查listener.ora配置,并且保证监听程序启动,数据库服务加载。
 
1. 认识sqlnet.ora
 
下面只讲述几个常用参数配置,详细的资料,大家可以查看示例sqlnet.ora得到。
sqlnet.ora可以删除,这样在oracle客户端连接数据库的时候,默认采用tnsnames.ora中的配置。
1).NAMES.DEFAULT_DOMAIN
域名domain定义,在你用sqlplus访问数据库的时候,会在tns别名后面加上".domain"
示例:
sqlnet.ora中:
NAMES.DEFAULT_DOMAIN=com
tnsnames.ora中的tns定义如下:
local_dev =
   (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
          (CONNECT_DATA =
        (SERVER = DEDICATED)
      (SERVICE_NAME = linuxdb)
   )
)
在客户端执行命令:sqlplus username/password@local_dev[/email]的时候,会出现如下错误信息:
"ORA-12154: TNS: 无法处理服务名"或者"ORA-12154: TNS:could not resolve service name"这样的错误信息。
因为sqlplus username/password@local_dev[/email]的时候,将tns别名“local_dev”转换成了“local_dev.com”,所以local_dev.com在tnsnames.ora中找不到,就报错了。
修改tnsnames.ora中的定义如下:
local_dev.com =
   (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
          (CONNECT_DATA =
        (SERVER = DEDICATED)
      (SERVICE_NAME = linuxdb)
   )
)
再执行sqlplus [email=username/password@local_dev]username/password@local_dev[/email],连接成功。
2)NAMES.DIRECTORY_PATH
定义了在客户端连接数据库时,采用什么样的匹配方式。
示例
sqlnet.ora内容如下:
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
那么在客户端执行sqlplus  username/password@local_dev[/email]连接数据库的时
首先采用tnsnames.ora的别名配置连接数据库,若连不上再采用ONAMES进行解析,最后采用主机名进行解析。
ONAMES表示Oracle使用自己的名称服务器(Oracle Name Server)来解析,目前Oracle建议使用轻量目录访问协议LDAP来取代ONAMES;
HOSTNAME表示使用host文件,DNS,NIS等来解析;
3)SQLNET.AUTHENTICATION_SERVICES
定义登录数据库的认证方式。
NONE表示Oracle数据库身份验证,NTS表示操作系统身份验证,两种方式可以并用。 
可以设置成SQLNET.AUTHENTICATION_SERVICES=(NONE,NTS)先后顺序表明验证的优先方式。
示例
sqlnet.ora内容如下:
SQLNET.AUTHENTICATION_SERVICES=(NONE)
在命令行上执行如下命令:
sqlplus "/ as sysdba"时,执行失败。
提示错误信息ORA-01031: insufficient privileges
这个参数默认没有设置。 
 
2. 认识tnsnames.ora
 
提供了客户端连接某个数据库的详细信息,主机地址,端口,数据库实例名等。
下面给出一个示例来说明问题:
local_dev =
   (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
          (CONNECT_DATA =
        (SERVER = DEDICATED)
      (SERVICE_NAME = linuxdb)
   )
)
PROTOCOL参数一般是TCP,可以根据服务器情况选择一种配置方式。
HOST 一般是ip地址,也可以是主机名,这个主机名字只要能用ping hostname通就行,一般在客户端系统的host文件上配好主机名和ip地址的映射关系。PORT 标准是1521,根据服务器端的监听端口而定。SERVICE_NAME 就是数据库的服务名,用system用户登陆后,sqlplus> show parameter service_name命令查看。
 
3. 认识listener.ora
 
tnslsnr进程是监听、并接受远程连接数据库请求的监听进程,listener.ora是tnslsnr进程的配置文件,监听的参数都是从该配置文件中读取。
该文件位于服务端,如果只安装oracle客户端,一般不存在这个文件。
如果你只需要在本地连接数据库,不接受远程连接,那么也不需要启动tnslsnr进程,也不需要去维护listener.ora文件。
启动监听进程的命令,在命令模式下,执行lsnrctl start命令就启动了监听进程tnslsnr。
监听可以有多个,也就是说,可以同时监听多个oracle实例,可以在listener.ora中定义多个监听器进行监听。
下面给出一个简单的示例
listener.ora中的内容:
LISTENER_CSB =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.14)(PORT = 1621))
      )
    )
  )
SID_LIST_LISTENER_CSB =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
      (SID_NAME = zjdevcsb)
    )
  )
#############################################
LISTENER_CSA =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.14)(PORT = 1521))
      )
    )
  )
SID_LIST_LISTENER_CSA =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
      (SID_NAME = zjdevcsa)
    )
  )
在上面:
1). LISTENER_CSB,LISTENER_CSA定义了监听器的两个监听名字,和这两个监听器监听的参数:ip,port等。
2). SID_LIST_LISTENER_CSB,SID_LIST_LISTENER_CSA定义了两个监听服务,服务名字格式SID_LIST_<lsnrname>,lsnrname就是上面两个监听器的名字,指定了这个服务将会接受的服务将提交给那个监听器;监听的实例名zjdevcsb,zjdevcsa是在tnsnames.ora中需要指定的SERVICE_NAME参数对应。

Oracle配置文件的更多相关文章

  1. java项目连接Oracle配置文件

    转载自:https://blog.csdn.net/shijing266/article/details/42527471 driverClassName=oracle.jdbc.driver.Ora ...

  2. Oracle配置文件tnsnames.ora新增链接后连接报错:ORA-12154: TNS:无法解析指定的标识符

    一个空格引发的血案:在tnsnames. ora文件中新加了一个配置,该配置估计当时是拷的别人的直接粘贴上去的,然后发现用pl/sql连接就一直报错了,后面排除了用户名和密码问题和后,仔细看了该文件才 ...

  3. Web项目从Oracle转为Mysql,fluentnhibernate-1.0和NHibernate2.1.0升级到NHibernate3.3的注意事项

    1.Oracel数据库没有字段自增长属性,要实现自增长通常是通过查询序列或者触发器来实现的. 设置自增长主键 alter table SUB_SUBSCRIPTION add primary key( ...

  4. ORACLE 连接SQLSERVER 数据库备忘

    最近工作需要,要从SQL SERVER数据库中同步提取数据. 这里采用了  Oracle Gateway 来连接,折腾了半天,终于搞定,记录下已备下次使用. 基本资料网上都可以搜很多,官网配置说明在这 ...

  5. ORACLE查看并修改session和连接最大数

    第一步,在cmd命令行,输入sqlplus 第二步,根据提示输入用户名与密码 1. 查看processes和sessions参数 SQL> show parameter processes NA ...

  6. 【Oracle】配置oracle数据库最大连接数

    数据库中教你如何修改ORACLE最大连接数 Oracle的连接数相关参数:processes.sessions. Oracle的sessions是个派生值,由processes的值决定,session ...

  7. oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)

    From :http://www.cnblogs.com/wangyt223/archive/2012/12/11/2812931.html em无法浏览,同时监听起不来.同时他的监听服务还是正常的, ...

  8. oracle启动 init.ora spfile pfile[转]

    昨天晚上快下班的时候,公司数据库突然堵住了,一个buf表中累计了20多W的数据提取不出来,改了程序,效果不明显.因为之前有一次也重启过oracle,所以这次还是想把oracle重启一下,因为那些数据都 ...

  9. Oracle 的process和Session

    Oracle 的process和Session 1.process 和session的概念:process:这个参数限制了能够连接到SGA的操作系统进程数(或者是Windows 系统中的线程数),这个 ...

随机推荐

  1. WPF绑定Binding及模式

    绑定,就是把一个对象属性的值绑定在别的对象的属性上 1. 默认绑定 public class Company { public string Name { get; set; } } XAML代码 1 ...

  2. unity3d面试题与参考答案

    1.C#程序题 1 2 3 4 5 6 7 8 9 10 11 private static void aaa(int x) { x = 10; }   private static void bbb ...

  3. Unity3D学习笔记——NGUI之Property Binding

    Property Binding:用于绑定两个组件,然后可以将一个组件的信息发送给另一个组件. 效果图如下: 一:使用步骤 1.建立一个Sprite 2.建立一个Label 3.为Sprite添加Pr ...

  4. poj 2117(割点的应用)

    题目链接:http://poj.org/problem?id=2117 思路:题目的意思是要求对于给定的无向图,删除某个顶点后,求最大的连通分量数.显然我们只有删掉割点后,连通分支数才会增加,因此我们 ...

  5. Android开发:《Gradle Recipes for Android》阅读笔记1.4

    在android studio下可以使用gradle视图运行gradle. gradle任务被分别组织在不同目录下,如android,build,install. 需要执行特定的任务只要双击任务名称. ...

  6. IndiaHacks 2016 - Online Edition (CF) . D

    这题思路很简单,二分m,求最大流是否大于等于x. 但是比赛过程中大部分的代码都被hack了... 精度问题,和流量可能超int 关于精度问题,这题真是提醒的到位,如果是先用二分将精度控制在10^-8左 ...

  7. 【BZOJ1880】[Sdoi2009]Elaxia的路线 最短路+DP

    [BZOJ1880][Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起 ...

  8. DataTable数据筛选

    DataView view = newDt.DefaultView;view.Sort = "Description asc,replyEnd desc";DataTable ta ...

  9. 【python】-- Django ModelForm

    Django ModelForm Django的ModelForm的验证方式相比较form + Model的验证方式有下列区别: ModelForm没有form + Model的低耦合性 ModelF ...

  10. Delphi重定义的消息结构

    // 除去DDE和MDI消息,一共159个消息,其中部分消息仅仅的转定义 // 普通消息,有两个参数和结果 PMessage = ^TMessage; TMessage = packed record ...