设为首页 加入收藏

TOP

《Oracle编程艺术》学习笔记(4)-Oracle体系结构
2014-11-24 13:06:29 】 浏览:3852
Tags:Oracle 编程 艺术 学习 笔记 -Oracle 体系结构

实例和数据库之间的关系
数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。
· 实例是一组后台进程(Unix/Linux下)/线程(Windows下)和共享内存。
· 数据库是磁盘上存储的数据集合。
· 实例“一生”只能装载并打开一个数据库。
· 数据库可以由一个或多个实例(使用RAC)装载和打开。

专用服务器模式和共享服务器模式
Oracle服务器处理请求的两种最常见的方式,分别是专用服务器(dedicated server)连接和共享服务器(shared server)。
一个Oracle实例可以同时使用这两类连接(实际上,即使配置为使用共享服务器连接,Oracle数据库也总是支持专用服务器连接)。
\


专用服务器模式下,客户登录时,Oracle总会创建一个新的进程,这个服务器进程会在会话生存期中进行专门服务。对于每个会话,都会出现一个新的专用服务器,会话与专用服务器之间存在一对一的映射。按照定义,这个专用服务器不是实例的一部分。客户进程(也就是想要连接数据库的程序)会通过某种网络通道(如TCP/IP socket)与这个专用服务器直接通信,并由这个服务器进程接收和执行客户的SQL。
\

共享服务器(shared server),正式的说法是多线程服务器(Multi-Threaded Server)或MTS。如果采用这种方式,就不会对每条用户连接创建另外的线程或新的UNIX 进程。在共享服务器中,Oracle 使用一个“共享进程”池为大量用户提供服务。共享服务器实际上就是一种连接池机制。
共享服务器模式下,客户进程通过网络与一个调度器进程通信,客户连接向调度器发送一个请求。调度器首先将这个请求放在SGA中的请求队列中①。第一个可用的共享服务器从请求队列中取出这个请求②并处理。共享服务器的处理结束后,再把响应(返回码、数据等)放到响应队列中③,接下来调度器拿到这个响应④,传回给客户。
\

专用服务器模式下,因为存在一对一的映射,所以不必担心长时间运行的事务会阻塞其他事务。因此,在非OLTP环境中,也就是可能有长时间运行事务的情况下,应该只考虑使用这种模式。专用服务器是Oracle的推荐配置,它能很好地扩缩。
共享服务器只适用于OLTP 系统,这种系统的特点是事务短而且频繁。
使用共享服务器时,可能还会有人工死锁(artificial deadlock)。考虑下面这种情况,
有5个共享服务器,并建立了100 个用户会话,
假设其中一个用户会话更新了某一行,但没有提交,
这个时候可能又有另外5个用户会话力图锁住这一行,这5个会话会被阻塞,
现在,原来的用户会话(它持有这一行的锁)试图提交事务,相应地释放行上的锁,但是这时所有共享服务器都已经被那5个等待的会话所垄断,
这就出现了一个人工死锁的情况:锁的持有者永远也拿不到共享服务器来完成提交,除非某个等待的会话放弃其共享服务器。

如果应用中已经使用了连接池特性,就不要使用共享模式。

数据库常驻连接池DRCP
11g之后,引入数据库常驻连接池DRCP。有些应用API不提供高效连接池,DRCP为它们提供了一个。DRCP结合了专用服务器模式和共享服务器模式概念,它提供了服务器连接池,但是放入连接池的是专用服务器。
共享服务器模式下,一个会话可能使用多个共享服务器,但是DRCP下,从连接池中选出的专用服务器进程会在整个会话生命周期为客户进程所专用。

TNS 监听器
通过SQL*Plus连接Oracle,例如以下命令:
sqlplus scott/tiger@orcl
orcl是一个TNS服务名。TNS代表透明网络底层(Transparent Network Substrate),这是Oracle客户中处理远程连接的“基础”软件,有了它才有可能建立对等通信。
TNS连接串告诉Oracle软件如何与远程数据库连接。一般地,客户软件会读取一个tnsnames.ora文件。这是一个纯文本的配置文件,通常放在 [ORACLE_HOME]\network\admin 目录下。
在网络环境中,服务器上运行一个称为TNS 监听器的进程。这个监听器进程收到入站连接请求时,它会使用自己的配置文件检查这个请求,并真正建立连接。
如果建立一条专用服务器连接,监听器进程就会为我们创建一个专用服务器。如果是共享服务器连接请求,监听器进程知道实例中运行了哪些调度器。接收到连接请求后,监听器会从可用的调度器池中选择一个调度器进程。监听器会向客户返回连接信息,其中说明了客户如何与调度器进程连接;如果可能的话,还可以把连接“转发”给调度器进程


摘自:NowOrNever
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySql性能相关的一些概念(性能tip.. 下一篇Oracle控制文件恢复案例

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目