现在的位置: 首页 > 数据库 > 正文

Oracle体系概述

2014年11月04日 数据库 ⁄ 共 971字 暂无评论 ⁄ 阅读 741 次
文章目录

数据库和实例

  • 数据库(database)是物理操作系统文件或磁盘的集合。
  • 实例(instance)是一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的进程/线程所共享。
  • 任何时候,一个实例只能装载和打开一个数据库。
  • 数据库可以由一个或多个实例(RAC,集群)装载和打开。
  • 大多数情况下,实例和数据库之间存在一对一关系。

db-instance1

专用服务器和共享服务器

专用服务器为每个会话新建一个进程,对于每个会话都会出现一个新的专用服务器进程,会话与专用服务器进程之间存在一对一的映射。专用服务器进程不是实例的一部分,它的作用在于处理会话所提交的SQL。其连接方式如下图:

db-instance2

共享服务器不会对每条用户连接创建新的线程/进程,它使用一个“共享进程”池为大量用户提供服务。利用共享服务器,我们不需要为10000个会话创建10000个专用服务器进程,否则这种规模的负载会所计算机压垮的。

它与专用专用器的一个重要区别:与数据库连接的客户进程不会与共享服务器直接通信,但在专用服务器中,客户进程则直接跟专用服务器进程通信。

客户进程通过网络与一个调度程序进程通信,它将客户的请求放入SGA中的请求队列,第一个空闲的共享服务器进程会得到这个请求,并进行处理,完成命令后把响应放在原调用程序(即接收请求的调度程序)的响应队列。这个调度进程一直在监听这个队列,发现有结果后,就会把结果传给客户。其流程如下图:

db-instance3

数据库连接和会话

一个连接是一个从客户端到一个数据库实例的物理通道。

一个会话是存在于实例中的逻辑实体,它是一个表示唯一会话的内存数据结构的集合,用于执行SQL、提交事务并运行服务器中存储过程等。

连接和会话并不是相同概念,一个连接可能有零个、一个或多个建立在其上的会话。每个会话是分开且独立的,即使他们共享一个同样的物理连接到数据库。会话中的某个提交并不影响在该连接上的任何其他会话。事实上,使用该连接的每个会话可以使用不同用户身份。在Oracle中,一个连接是一个在客户端进程与数据库实例之间的物理线路——网络连接。该连接可能是一个专用服务器进程或一个调度进程。一个连接可以有零个或更多的会话,即一个连接的存在并不一定伴随着对应的会话存在。

声明:该笔记转载自《Oracle Database编程艺术:深入数据库体系结构》,仅用于个人学习,若侵犯到您的版权敬请告知!

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?