文档章节

Oracle NET工作原理、配置及连接问题排查

小强斋太
 小强斋太
发布于 2016/11/09 20:06
字数 1917
阅读 12
收藏 0
点赞 0
评论 0

一、Oracle NET配置文件

Oracle NET是一个软件层,支持不同网络协议之间的转换。不同的物理机器可以借助这个软件层实现相互间的通信,具体而言就是实现对oracle的远程访问。

oracle net配置文件包括listener.ora,tnsnames.ora,sqlnet.ora和ldap.ora;配置文件都是放在$ORACLE_HOME\network\admin目录下。

  • sqlnet.ora文件在客户端上,确定解析方式,通过这个文件来决定怎么样找一个连接中出现的连接字符串
  • tnsnames.ora文件在客户端上,记录每个oracle net 别名对应的主机和oracle实例;
  • listener.ora工作在数据库服务器端,负责监听希望通过网络访问oracle数据库的客户端连接要求;

1.1 sqlnet.ora

sqlnet.ora用来决定oracle怎么解析一个连接中出现的字符串,

# sqlnet.ora Network Configuration File: C:\app\ORACLE\product\12.1.0\dbhome_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, EZCONNECT)
View Code

例如: sqlplus sys/oracle@orcl  如果你的sqlnet.ora这样配置的:

SQLNET.AUTHENTICATION_SERVICES= (NTS) 
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)

那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,

如果是这个样子

NAMES.DIRECTORY_PATH= (TNSNAMES)

那么客户端就只会从tnsnames.ora查找orcl的记录

1.2 tnsnames.ora

这个文件类似于unix 的hosts文件,客户端上tnsnames.ora文件记录每个oracle net 别名对应的主机和oracle实例;只有当sqlnet.ora中类似NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件,oracle net服务根据tnsnames.ora将用户指定的服务名称解析为对应服务器主机和数据库实例。

# tnsnames.ora Network Configuration File: C:\app\ORACLE\product\12.1.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

PDBORCL =

    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = pdborcl)
      )

  )
View Code

1.3 listener.ora

listener监听器进程的配置文件 ,工作在数据库服务器端,接受远程对数据库的接入申请并转交给oracle的服务器进程。

所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。

(创建Oracle实例的时候,指定了1521对口,根据端口选择Oracle实例?)

# listener.ora Network Configuration File: C:\app\ORACLE\product\12.1.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\ORACLE\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\ORACLE\product\12.1.0\dbhome_1\bin\oraclr12.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )
View Code

1.4 图形化配置

linux下 运行netca命令

[ oracle@xqzt ~]$ netca

windows下

clip_image001

 

clip_image003

clip_image005

二、连接过程及工作原理

        访问数据库的过程由客户端进程和服务器进程组成。客户端进程发起请求,例如sqlplus;服务器进程读写数据库,完成用户提交的各种命令。服务器 进程又叫影子进程,服务器进程与数据库实例运行在同一台机器上。而服务器端监听器根据配置文件listener.ora工作,作为桥梁负责为客户端进程和影子进程搭桥牵线。

oracle net的启动和停止独立于数据库实例,它只负责将来自客户端进程的请求交给影子进程,由影子进程完成对数据库实例的读写。

当两个进程在同一台机器上运行,oracle使用基于进程间(ipc)的本地通信;而当两个进程运行在不同机器,oracle使用oracle net实现两个进程的网络通信。

2.1连接过程

当客户端程序发出请求串username/passwd@net_service_name之后,oracle NET 组件首先在本地查找sqlnet.ora文件确定命名方法,这里假设为local naming,则sqlnet.ora中内容如下:NAMES.DIRECTORY_PATH=(TNSNAMES).oracle NET紧接着查找tnsnames.ora,读取该文件,匹配net_service_name.如果该net_service_name匹配失败,则提 示错误;如果成功则根据connect descriptor中protocol,host,port信息发给正确的listener.listener再根据connect descritpor中的service_name与向它注册了的oracle services 进行比对.如果比对成功, 则建立连接,否则提示错误。

2.2几种连接用到的命令形式

1.sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程

2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程

3.sqlplus sys/oracle@orcl 这种方式需要listener进程处于可用状态。最普遍的通过网络连接。  以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。

三、诊断并解决客户端连接问题

3.1 连接问题诊断过程

  • 证实客户能够联系服务器
  • 确定客户到大服务器采取的网络路径
  • 证实本地命名配置文件
  • 检查多客户网络配置文件
  • 检查网络文件位置(如果使用TNSNAME.ORA)
  • 检查NAMES.DIRECTORY_PATH参数
  • 检查NAMES.DEFAULT_DOMAIN参数
  • 检查得到安装的客户协议适配器
  • 检查任何常用客户端错误代码
检查客户/服务器联系

ping

确定客户正用来到达服务器的网络路由

TRACERT命令

检查客户/监听器联系

使用TNSPING,它会尝试联系一个ORACLE监听器。它证实客户能联系监听器,但不证实能实际连接到ORACLE服务器。该工具还能显示联系监听器所花费的时间。在后面跟一个数字可以告诉它尝试连接的次数。如:tnsping orcl 3

检查本地命名配置文件
检查客户网络配置文件

通常客户只有网络文件(比如tnsnames.ora和sqlnet.ora)的一个副本,但是如果机器上装了很多ORACLE的软件,有可能有多个网络文件在工作,需要确保这些文件是一致的,以免产生意想不到的效果。

检查网络文件位置

如果网络文件不在TNS_ADMIN环境变量指定的目录下,则ORACLE会找不到这些文件

检查NAMES.DIRECTORY_PATH

检查SQLNET.ORA文件中该参数设置值正确,并且名称解释的优先顺序正确.

检查NAMES.DEFAULT_DOMAIN

如果该参数被设置,如"vicp.net",当输入sqlplus sys/sys@prod时,命名会被附加上默认域名,变成"sqlplus sys/sys@prod.vicp.net"。 如果正确服务名称只是prod,那当然不可能正确解释了。

检查客户协议适配器
检查客户端代码

3.2 常见错误代码

  • ORA-12154 -- 有可能TNSNAMES.ORA放在不正确的位置
  • ORA-12198和ORA-12203 -- 指出tnsnames.ora是列出的服务无法联系到。有可能指定的服务名称错误。
  • ORA-12533 -- 指出配置ADDRESS不正确
  • ORA-12541 -- 指出指定端口未找到相应监听器。

参考

Oracle NET配置及工作原理

Oracle Net服务

本文转载自:http://www.cnblogs.com/xqzt/p/4470228.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
故障诊断 | 系统级追踪诊断方法及案例分享

我们在进行Oracle故障调试和内核原理工作的时候,经常需要了解后台运行的动作和细节。一些故障场景,如ORACLE后台进展慢、程序无法启动、无法登陆、相同环境执行结果却大不相同等问题,就需要...

技术小能手 ⋅ 01/03 ⋅ 0

oracle客户端PLSQL连接失败解决方案

上周博客中写了oracle客户端连接服务器的文章,解决了在自己本本上安装的烦恼。 原来自己的电脑与服务器在一个局域网,所以每次都是远程服务器,但是远程也不是解决的办法哈,因为多个人使用...

晨曦之光 ⋅ 2012/08/22 ⋅ 0

[解决办法]windows的非administrator账户无法通过plsql工具登录oracle数据库

环境: windows2008服务器、使用的非administrator账户,而是新建了一个windows2008账户、安装好了plsql工具。 问题: 使用administrator账户可以用plsql工具连接成功oracle数据库; 但是使用...

子羲有曰 ⋅ 2015/12/22 ⋅ 0

Error 12154 received logging on to the standby

环境为 操作系统:AIX 6.1 oracle版本:11.2.0.3 (psu5) 本编记录了本人一次DG搭建失败的经历,只是一个小的错误,但却导致我排查了半天。记录本次经历用来警醒自己,作为一名dba任何时候我...

shaochenshuo ⋅ 2014/03/19 ⋅ 0

我的“ORA-28547:connection to server failed,probab...

连接oracle 11g突然蹦出了一个错误“ORA-28547:connection to server failed,probable Oracle Net admin error”,见下图,我勒个去,真是郁闷死了,无奈在网上搜索了好久找到了解决方法,写...

SANSOM ⋅ 2013/07/29 ⋅ 0

连接oracle报错“ORA-28547:connection ... admin 解决办法

第一种、解决方案如下: listener.ora是服务器端的配置oracle的文件。 后来将listener.ora的这一行注释掉,就行了,, (PROGRAM = extproc) 修改为: SIDLISTLISTENER = (SID_LIST = (SID_D...

Junn ⋅ 2014/02/25 ⋅ 0

Oracle Error:ORA-12514

这应该算是连续剧了,在解决上篇记录的错误后,使用客户端连接Oracle时发生ORA-12514(TNS:监听程序当前无法识别连接描述符中请求的服务)的错误。 经过排查发现是Oracle 实例往Listener里动...

旺旺的钥匙 ⋅ 2012/11/15 ⋅ 0

Linux系统中使用druid连接池获取db2和oracle数据库连接缓慢

@wenshao 你好,想跟你请教个问题: 能够正常获取数据库连接的环境为:Windows 8.0 + jdk 1.6 + tomcat 6.0 + druid 1.0.7+quartz 1.8.6 出问题的软件运行环境为:Linux redhat 6.4 + jdk 1....

italy ⋅ 2016/04/06 ⋅ 1

架构设计:系统存储(28)——分布式文件系统Ceph(挂载)

(接上文《架构设计:系统存储(27)——分布式文件系统Ceph(安装)》) 3. 连接到Ceph系统 3-1. 连接客户端 完成Ceph文件系统的创建过程后,就可以让客户端连接过去。Ceph支持两种客户端挂...

yinwenjie ⋅ 2017/04/14 ⋅ 0

出现身份验证错误,要求的函数不受支持(这可能是由于CredSSP加密Oracle修正)

问题描述: 从5月89日开始客户端Win10WinSer2016突然无法访问测试环境下所有远程Win Ser2012/16资源,提示"出现身份验证错误。要求的函数不受支持... 这可能是由于CredSSP加密Oracle修正......

wenzhongxiang ⋅ 05/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

行政区划代码转为字典形式

原数据为: http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/201804-06041553.html 手动替换了一下格式,并使用下面的代码处理. # 输入格式s = """110000:北京市110101:东城区1101...

漫步海边小路 ⋅ 18分钟前 ⋅ 0

android apk 签名

创建key,需要用到keytool.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),把...

国仔饼 ⋅ 27分钟前 ⋅ 0

springcloud+jps+mybatis多数据库配置

多数据库配置 配置我们目录结构设置: config ---datasource ----jpa ----mybatis ----redis Datasource中是数据的相关配置 Jap中是springDatajpa的相关配置 Mybatis中是mybatis的相关配置 ...

大-智-若-愚 ⋅ 34分钟前 ⋅ 0

Spring mvc HandlerMapping 实现机制

概述 当DispatcherServlet接受到客户端的请求后,SpringMVC 通过 HandlerMapping 找到请求的Controller。 HandlerMapping 在这里起到路由的作用,负责找到请求的Controller。 Spring MVC 默认...

轨迹_ ⋅ 37分钟前 ⋅ 0

JavaScript零基础入门——(十)JavaScript的DOM基础

JavaScript零基础入门——(十)JavaScript的DOM基础 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们了解了JavaScript中的函数,这一节课,我们来了解一下JavaScript的DOM。 第一节...

JandenMa ⋅ 今天 ⋅ 0

Weex起步

本教程假设你已经在你的本地环境安装了node 其实weex起步教程在 https://github.com/lilugirl/incubator-weex 项目说明文件中都已经有了,但为了有些同学看到英文秒变文盲,所以这里我重新写...

lilugirl ⋅ 今天 ⋅ 0

Jenkins实践1 之安装

1 下载 http://mirrors.jenkins.io/war/latest/jenkins.war 2 启动 java -jar jenkins.war 前提:安装jdk并配置环境变量 启动结果节选: ************************************************......

晨猫 ⋅ 今天 ⋅ 0

组合数学 1-2000 中,能被6或10整除的数的个数

1--2000 中,能被6或10整除的数的个数 利用集合的性质 能被6整除的个数 2000/6 = 333 能被10整除的个数 2000/10 = 200 能被6和10整除的个数 2000/30 = 66 能被6或10整除的个数 333+200-66 =...

阿豪boy ⋅ 今天 ⋅ 0

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 今天 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部