Oracle NET工作原理、配置及连接问题排查
一、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)
例如: 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)
) )
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))
)
)
1.4 图形化配置
linux下 运行netca命令
[ oracle@xqzt ~]$ netca
windows下



二、连接过程及工作原理
访问数据库的过程由客户端进程和服务器进程组成。客户端进程发起请求,例如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 latch工作原理
latch是一种轻量级用于保护oracle共享内存结构,用户并发操作一致性的串行化锁定机制,如SGA中,各种数据被反复从磁盘读取到内存,又被重新写回到磁盘上,如果有并发用户做相同的事情,oracle必 ...
- Oracle Goldengate工作原理
- 【JAVA】 Java 连接池的工作原理
什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它 ...
- Java 连接池的工作原理(转)
原文:Java 连接池的工作原理 什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释 ...
- Java 连接池的工作原理
什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它究竟是什么.[如果你已经知道了, ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- 转载:【Oracle 集群】RAC知识图文详细教程(三)--RAC工作原理和相关组件
文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...
- 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
原文地址:http://www.cnblogs.com/baiboy/p/orc3.html 阅读目录 目录 RAC 工作原理和相关组件 ClusterWare 架构 RAC 软件结构 集群注册(OC ...
- zookeeper工作原理、安装配置、工具命令简介
1.Zookeeper简介 Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等等. 2.zo ...
随机推荐
- ListView单条刷新的方法
我们一般会调用notifydatasetchange通知listView刷新界面.但会造成getView方法被多次调用(画面上能显示多少就会被调用多少次),如果是很明确的知道只更新了list中的某一个 ...
- ASP.NET MVC4 HtmlHelper扩展类,实现分页功能 @Html.ShowPageNavigate
本文主要做了一个HtmHelper类的分页扩展函数,方便在视图中调用,有需要的朋友可以参考一下,希望对大家有所帮助. 1.扩展HtmlHelper类方法ShowPageNavigate output. ...
- iOS測试——置换測试: Mock, Stub 和其它
文章地址:http://ryantang.me/blog/2014/08/21/test-doubles/
- iOS:viewController 和 view 的生命周期、不错的代码设计风格
一.介绍: viwe和viewController的生命周期是最基本的知识,如果很好地理解它们的方法调用的执行顺序,就能很好地设计代码的风格.这篇博客转载自:http://www.cnblogs.co ...
- windows核心编程-互斥器(Mutexes)
线程同步的方式主要有:临界区.互斥区.事件.信号量四种方式. 前边讲过了临界区线程同步-----windows核心编程-关键段(临界区)线程同步,这章我来介绍一下互斥器(Mutexes)在线程同步中的 ...
- WHY数学图形显示工具
软件功能:输入一个二元数学表达式,含有两个参数变量X和Y,显示该数学表达式的三维图形. 很久之前就有写这个软件的想法,却一直没有激情和动力,终于在年假这两天完成了.以此软件纪念我那十几年前的高中生活, ...
- Android JNI中C和JAVA代码之间的互相调用
关于Android studio中使用NDK/JNI环境和入门:http://blog.csdn.net/quan648997767/article/details/64923143 1. C代码回调 ...
- Scramble String leetcode java
题目: Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty subs ...
- C#基础知识整理:C#类和结构(1)
1.结构功能特性? 实现代码?结构用struct关键字定义的,与类类似,但有本质区别.结构实质是一个值类型,它不需要对分配的.结构的特性:(1).结构作为参数传递时,是值传递.(2).结构的构造函数必 ...
- Linux服务器安装zabbix监控平台
zabbix是基于web界面的开源分布式监控平台,可以监控各种服务器的配置参数,支持自定义配置和自定义告警,并且可以实现邮件.短信等方式的告警,zabbix基本组件如下: zabbix_server: ...