Oracle建立连接的过程

如果我们想登陆数据库并在数据库中真正做事情,就必须先建立连接,首先我会介绍如何建立连接,再介绍建立连接的两种方式的原理,以及建立连接的过程中在客户端和服务端都做了些什么。

如何连接到数据库

客户端和服务端主要是通过TCP/IP协议建立连接的。对于服务端而言,服务端在连接过程中主要关心的是怎么处理请求的问题,Oracle服务器端一定会在固定的地址上启动一个监听器用于专门处理连接请求的进程或者是线程。

对于客户端而言我们需要知道服务端的IP地址,监听器的端口以及服务名,并率先发起请求。

如果在$ORACLE_HOME/network/admin目录下的配置文件tnsnames.ora中配置了数据库的TNS连接字符串如下:

MUPHY =

(DESCREPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = www.muphy.me)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = muphy)

)

)

那么我们就可以按照下面的语法连接到数据库:

$ sqlplus eoda/foo@muphy

如果我们知道数据库主机是127.0.0.1,端口是1521,服务名是muphy,那么可以直接在终端中输入按照下面的语法连接到数据库:

$ sqlplus eoda/foo@127.0.0.1:1521@muphy

这种简单的方式连接到数据库在某些情况非常有用,比如说连接问题的排错,或者手头没有可以使用的tnsnames.ora,或者其他解析方式时。

专用服务器连接

当我们登陆数据库是,Oracle监听器进程总会通过fork()或者exec()系统调用创建一个新进程(windows系统为线程),这个新的进程通常是专用服务器配置,继承了监听器建立的连接,因为这个服务器进程会在会话生存期中专门为此会话访问,会话与专用服务器之间存在一对一的关系,如下图所示:

按照定义,专用服务器不是实例的一部分,客户端会与这个专用服务器直接通信,包括接收和处理客户端发来的SQL,如果必要的话,还会为客户端读取数据文件,在缓存中查找需要的数据,运行PL/SQL代码等操作。

共享服务器连接

Oracle的另外一种连接方式是共享服务器,如果采用这种连接方式,数据库监视器就不会对每个用户连接创建新的线程或者进程。

在共享服务器中,Oracle使用一个“共享进程”池为多个用户提供服务,实际上就是一种连接池机制。利用共享服务器,我们不必为10000个数据库创建10000个进程,而只需要创建很少的进程,这些进程所有会话共享,大大降低了服务器创建和维护进程的开销,能够处理更多的连接请求。

共享服务器与专用服务器之间有一个重大的区别:共享服务器不会与客户端直接通信,因为共享服务器进程是共享的,还需要另外一种机制才能与服务器通信,这种机制就是使用了一个或者一组调度程序的进程,监视器会一直在主机的某一设置好的端口上运行,而调度程序会在服务器上随意指派的端口上接收连接请求。

通过进程监控器进程PMON,监视器进程知道实例中运行了哪些调度程序以及调度程序的信息,监视器接收到客户端的共享服务器连接请求后,他会从调度程序中选择一个调度程序进程,并把这个进程的连接信息返回给客户端,其中说明了如何连接到这个调度程序,监视器返回调度程序的连接信息后与客户端断开连接,监视器的工作到此结束。

客户端通过监视器返回的连接信息与调度程序通信,调度程序的进程将客户端的请求放入SGA中的请求队列,第一个空闲的共享服务器进程会处理这个请求,请求处理完后,共享服务器会把相应放在原调度程序的相应队列中,调度程序进程一直在监视这个队列,当它发现相应队列中有处理结果时,就把结果传给客户端。

共享服务器请求处理流程如下:

用一个图来总结客户端与Oracle建立连接的两种方式之间的交互方式:

转载于:https://www.cnblogs.com/muphy/p/10890085.html

Oracle建立连接的过程分析相关推荐

  1. ftp无法与服务器建立连接_建立与Oracle数据库服务器连接的两种连接模式

    建立与Oracle数据库服务器连接的两种连接模式(专用服务器与共享服务器) 在建立Oracle数据库的时候,应该会在数据库建立助手向导上面看到这么一个选项,就是数据库的连接模式采用什么方式.在Orac ...

  2. (Oracle踩坑指南)项目建立连接的各种坑 ORA-12541: TNS: 无监听程序等等

    在oracle项目建立连接中的各种坑 吐槽甲骨文一波 安装过程中遇到的问题 问题一:下载 问题二:PLSQL工具 问题三:plsql的使用 问题四:接下来到修改VisualStudio里面的web.c ...

  3. 理解oracle中连接和会话

    理解oracle中连接和会话 1.  概念不同:概念不同: 连接是指物理的网络连接. 在已建立的连接上,建立客户端与oracle的会话,以后客户端与oracle的交互都在一个会话环境中进行. 2.   ...

  4. oracle本地连接地址,关于Oracle本地连接出现与监听有关的问题的解决方法探讨,oracle本地连接...

    关于Oracle本地连接出现与监听有关的问题的解决方法探讨,oracle本地连接 关于Oracle本地连接出现与监听有关的问题的解决方法探讨 监听的作用: 用于应用桌面即用户与数据库服务器建立连接的媒 ...

  5. Oracle的连接与会话

    连接并不是会话的同义词,在一条连接上可以建立0个.一个或多个会话.各个会话是单独而且独立的,即使它们共享同一条数据库物理连接也是如此.一个会话中的提交不会影响该连接上的任何其他会话.实际上,一条连接上 ...

  6. ORACLE网络连接配置与文件:listener.ora、sqlnet.ora、tnsnames.ora

    [转自]http://www.chinaunix.net/jh/19/594396.html 最近看到好多人说到tns或者数据库不能登录等问题,就索性总结了下面的东东. 首先来说oracle的网络结构 ...

  7. oracle远程连接配置

    今日需要对站内所有的空间数据做入库处理,所以在服务器上安装了oracle,在本地需要对其进行连接,在网上查阅了相关资料,整理如下: 远程服务端配置: 1. 数据库配置     因为要为外界客户端提供数 ...

  8. python oracle 运维,mysql oracle python连接

    #encoding:utf-8 #dataProc #auth xiajikun import sys # oracle库连接模块 import cx_Oracle # mysql库连接 import ...

  9. Oracle表连接深入浅出

    表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据.如果一个SQL语句的关联表超过两个, 那么连接的顺序如何呢?ORACLE首先连接其中的两个表,产生一个结果 ...

  10. Oracle服务器连接

    1 Oracle服务器的两类连接方式 Oracle数据库连接有多种方式,按照客户端和服务器端是否同机运行可分成两大类,一是本地连接,二是通过网络连接. 本地连接.顾名思义,就是客户端程序和服务器程序运 ...

最新文章

  1. 当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮
  2. VS2017 ASP.NET MVC 5.0 开部署问题汇总
  3. 不用IIS运行ASP.Net网站
  4. 1047 Student List for Course (25 分)【难度: 简单 / 知识点: 模拟】
  5. Java 变量、数据类型
  6. 黑苹果hidp显示不清楚_魔兽世界9.0:盟约指挥台不显示胜率?搞清楚机制,轻松收菜!...
  7. thinkphp5--文章发布后台管理系统
  8. order( )函数--R语言
  9. 解决tomcat内存溢出问题
  10. 使用stm32f103rct6控制adf4351实现30M~~4G的正弦波
  11. 投射式触摸屏自电容与互电容工作原理基础(未完待续)
  12. 批量生成10位数手机号,用作账号注册
  13. lozi混沌映射吸引子,使用python的matplotlib绘制,可以放大和缩小
  14. Cesium结合kriging.js制作降雨等值面
  15. UnityECS-初识
  16. Navicat导入Excel提示无法打开Excel文件
  17. 黑盘-蓝盘-绿盘-红盘
  18. vscode 中python不能跳转问题
  19. 【Hgame2022】第一周misc和web题解
  20. Linux多任务机制

热门文章

  1. 南阳oj-----一种排序(set)
  2. hashmap删除指定key_Java集合:HashMap底层实现和原理(源码解析)
  3. 手把手教你python实现量价形态选股知乎_Python实现量化选股
  4. lstm训练情感分析的优点_「情感分析领域」简单调研
  5. Linux内核分析:跟踪分析Linux内核的启动过程
  6. deepfake ai智能换脸_AI换脸朱茵变杨幂,人工智能时代的“细思恐极”
  7. 初识kmp算法(呕心沥血之文----看视频+总结)
  8. 拉丁正方形 java_LeetCode 221. Maximal Square 最大正方形(C++/Java)
  9. 可转债数据一览表集思录_可转债投资每周记录20200816
  10. java list 模拟查询_java 模拟简单搜索