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/[email protected]  如果你的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.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 图形化配置

二、连接过程及工作原理

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

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

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

2.1连接过程

当客户端程序发出请求串username/[email protected]_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/[email protected] 这种方式需要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/[email protected]时,命名会被附加上默认域名,变成"sqlplus sys/[email protected]"。 如果正确服务名称只是prod,那当然不可能正确解释了。

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

3.2 常见错误代码

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

参考

Oracle NET配置及工作原理

Oracle Net服务

时间: 2024-08-08 20:10:27

Oracle NET工作原理、配置及连接问题排查的相关文章

Mysql主从复制、读写分离工作原理+配置

Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysqlinstance(我们称之 Slave).在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端. MySQL 复制的基本过程如下: 1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开

Linux课堂作业2(inode工作原理以及软硬连接的区别)

inode工作原理: 一个文件包括元数据和数据内容,元数据存放在inode table中,而数据内容存放在block块中,inode存放着各个文件的元数据条目,其内容包括,一些基本的元数据比如mode,ownership,sizetimestamp,还存放着指向数据的指针,这些指针分为直接指针和间接指针,双重间接指针甚至三种间接指针.直接指针代表直接指向数据内容的block块,间接指针下一层指向虽然是一个数据块,但是数据块内却不是文件的数据内容,而是一个指针数据块,如果块大小为4k,每个指针占4

【JAVA】 Java 连接池的工作原理

什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它究竟是什么.[如果你已经知道了,你可以跳到它的工作原理部分]     创建连接的代码片段: String connUrl = "jdbc:mysql://your.database.domain/yourDBname"; Class.forName("com.mysql.jdbc.Driver");

Java 连接池的工作原理(转)

原文:Java 连接池的工作原理 什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它究竟是什么.[如果你已经知道了,你可以跳到它的工作原理部分] 创建连接的代码片段: String connUrl = "jdbc:mysql://your.database.domain/yourDBname"; Class.forName("com.mysql.jdbc.Dr

【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体系的总结,一则进行回顾复习,另则便于查询使用.本图文文档亦源于此.阅读Oracle RAC安装与使用教程前,笔者先对这篇文章整体构思和形成进行梳理.由于阅读者知识储备层次不同,我将从Oracle RAC安装前的准备与规划开始进行整体介绍安装部署Oracle RAC.始于唐博士指导,对数据库集群进行配置安装,前

连接池的基本工作原理

1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式正是为了解决资源的频繁分配?释放所造成的问题.为解决上述问题,可以采用数据库连接池技术.数据库连接池的基本思想就是为数据库连接 建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定 连接池最大连接数来防止系统无尽的与数据库连接.更

交换机工作原理与配置

以太网交换机分类 2960系:入门级交换机 3560系列:企业级交换机. 4500系列:模块化交换机,可以支持扩展. 6500系列:高端级交换机,主要用于大型企业,电信网通运营商. 交换机的工作原理 1)学习 交换机在转发的过程中会查看自己的MAC地址表,地址表中有目标MAC地址对应的接口号.如果条目中没有源MAC地址,那就对应起来,形成MAC地址表. 2)广播 如果交换机没有在MAC地址表中找到目标数据帧所对应的条目,就不知道从那个接口转发出去,这时候就要广播,好比说:00-00-00-00-

FTP服务器工作原理的及配置详解

FTP服务器工作原理的及配置详解 FTP工作原理概述 FTP:file transfer protocol 它也是一个C/S架构的服务.server:监听在套接字21/tcp端口.按照套接字监听工作状态可以分为两类: 命令连接:发送文件管理类命令,始终处于连接状态,始终监听在21/tcp端口. 数据连接:主要是实现数据传输,这种连接是按需连接的,而且在传输结束会立刻中断. 对于数据连接还有两种不同的工作模式: 主动工作的模式:服务器根据监听在21端口接收到的命令,使用自己的20号端口,将数据传输

L15.1 zabbix基础(1)工作原理及安装配置

zabbix工作原理及安装配置 zabbix介绍 zabbix(音同 zbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题. zabbix由2部分构成,zabbix server与可选组件zabbix agent. zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监