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. 浅析String.intern()方法

    1.String类型“==”比较样例代码如下:package com.luna.test;public class StringTest { public static void main(Strin ...

  2. pandas.DataFrame.astype数据结构转换

    网易云课堂该课程链接地址 https://study.163.com/course/courseMain.htm?share=2&shareId=400000000398149&cou ...

  3. fiddler抓包详解

    image.png 前言 fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不安全,这时候需要在浏览器上安装证书. 一.网页不安全 1.用fiddler ...

  4. 【C#】使用C# 读取Http的Post数据

    private string Post(string num) { Encoding myEncoding = Encoding.GetEncoding("gb2312"); // ...

  5. IDEA快捷键无法使用

    IDEA快捷键无法使用 觉得有用的话,欢迎一起讨论相互学习~Follow Me 今天新换了一台主机,但是很奇怪的是自己的IDEA快捷键使用不了了,以为是主机还是硬件的问题,最终解决后,发现是软件之间的 ...

  6. 深入理解Python变量与常量

    深入理解Python变量与常量 变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内 ...

  7. C# HashSet集合类型使用介绍

    1.HashSet集合 使用HashSet可以提高集合的运算.使用HashSet集合不自带排序方法,如果需要排序的需求可以参考使用List<T>集合配合Sort方法. HashSet的优势 ...

  8. elk配置路径

    elk/usr/local/etc/elasticsearch-6.5.1/usr/local/Cellar/logstash/6.5.1/./logstash -f/usr/local/Cellar ...

  9. flutter本地环境的安装以及编辑器的配置

    由于本文图片比较多,所有都缩小了不少,点击图片就可以放大看到原始图片 使用镜像 cmd打开终端,贴上以下代码,以加入到环境变量中,如果添加失败,可以手动添加 export PUB_HOSTED_URL ...

  10. odoo连接外部数据库

    odoo框架默认的访问时Postgres数据库,但在实际的应用场景中,不可避免的使用到其他数据库,所以有必要研究如何连接其他第三方数据库,这里分享下OCA的相关模块,具体的源代码在这里. 我将第三方的 ...