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建立连接的两种方式之间的交互方式:

Oracle建立连接的过程分析的更多相关文章

  1. jdbc 和oracle数据库 建立连接

    package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException; ...

  2. Linux SSH建立连接过程分析

    https://blog.csdn.net/qwertyupoiuytr/article/details/71213463 SSH建立连接的过程主要分为下面几个阶段: SSH协议版本协商阶段.SSH目 ...

  3. ORACLE会话连接进程三者总结

    概念介绍 通俗来讲,会话(Session) 是通信双方从开始通信到通信结束期间的一个上下文(Context).这个上下文是一段位于服务器端的内存:记录了本次连接的客户端机器.通过哪个应用程序.哪个用户 ...

  4. oracle远程连接配置

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

  5. ArcGis设置到 Oracle 的连接

    设置到 Oracle 的连接 地理数据 » 管理地理数据库 » Oracle 中的地理数据库 要建立从客户端计算机到 Oracle 数据库的连接,必须在客户端计算机上安装 Oracle 客户端应用程序 ...

  6. Sql server2012连接Sql server 2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。)

    以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...

  7. Oracle 表连接方式分析 .

    一 引言 数据仓库技术是目前已知的比较成熟和被广泛采用的解决方案,用于整和电信运营企业内部所有分散的原始业务数据,并通过便捷有效的数据访问手段,可以支持企业内部不同部门,不同需求,不同层次的用户随时获 ...

  8. 理解oracle中连接和会话

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp44 理解oracle中连接和会话 1.  概念不同:概念不同: 连接是指物 ...

  9. vs 或 Sql server2012连接Sql server时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误

    以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...

随机推荐

  1. Mapbox矢量瓦片标准(mapbox vector-tile-spec)

    目录 1. 目标 2. 文件格式 2.1. 文件后缀 2.2 MIME类型 3. 投影和范围 4. 内部结构 4.1. 图层 4.2. 要素 4.3. 几何图形编码 4.4. 要素属性 4.5. 示例 ...

  2. Python 多进程爬虫实例

    Python  多进程爬虫实例 import json import re import time from multiprocessing import Pool import requests f ...

  3. 【转载】 tf.ConfigProto和tf.GPUOptions用法总结

    原文地址: https://blog.csdn.net/C_chuxin/article/details/84990176 -------------------------------------- ...

  4. 【GM4008】GM4008升级固件发布(版本V4.2.1.1)

    ===================== GM4008固件升级发布 ===================== 〇.简介:GM4008 8通道0-24mA电流采集模块,采用全电气隔离方案,配合高性能 ...

  5. JZ落选跟我们有什么关系

    今天中午睡前刷了一下微博,看到JZ派落选了,底下一大堆冷嘲热讽的. 比如,养了一堆白眼狼,给了XG一堆利好政策,却这样FZ. 这种心态像极了多子女家庭的生活. 多子女家庭里,总有几个是性格比较乖巧,也 ...

  6. POI 读取Excel文件 并解析JSON数据

    package skuPrice; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...

  7. VMnet1、VMnet8到底是什么?

    当我们安装VMware Workstation后,在宿主机(物理电脑)上会多出两个网卡,VMNet1.VMNet8,在虚拟机设置里会多出一个配置 VMNet0. vmnet1和vmnet8是两个虚拟网 ...

  8. 01.在Java中如何创建PDF文件

    1.简介 在这篇快速文章中,我们将重点介绍基于流行的iText和PdfBox库从头开始创建 PDF 文档. 2. Maven 依赖 <dependency> <groupId> ...

  9. SQL Server 数据库启动过程(用户数据库加载过程的疑难杂症)

    前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...

  10. CORS解决跨域问题(403问题)

    1.什么是跨域问题? 跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是用当前页同域名同端口的路径,这能有效的阻止跨站攻击. 2.跨域问题出现的条件: 1.跨域问题是a ...