`
足至迹留
  • 浏览: 495599 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<Oracle-1> oracle体系结构概述

阅读更多
本系列主要参考《Oracle Database 9i/10g/11g编程艺术》第二版  -Thomas kyte著

书中有段话:
通常解决问题有简单方案和复杂方案,而选择后者居多,这并不是故意,只是出于无知。

此书推荐
引用
“针对不同数据库写不同的程序,而不是写一个可随意移植到不同数据库的程序,代价高而且不能充分利用不同数据库的特性。”
这与通常使用通用ORM框架不同,实际上一般也就是小型程序才完全采用ORM框架。

1.oracle体系结构概述
1.1 定义数据库和实例
在oracle领域中有两个词很容易混淆,这就是“实例”instance和“数据库”database。作为oracle术语,这两个词定义如下:
数据库:物理操作系统文件或磁盘的集合。使用oracle的自动存储管理(Automatic Storage Management, ASM)或RAW分区时,数据库可能不作为操作系统中单独的文件,但定义仍然不变。

实例一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。这里可以维护易失的,非持久性内容(有些可以刷新输出到磁盘)。就算没有磁盘存储,数据库实例也能存在。有点程序和进程的关系。

这两个词有时可以互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。实际上准确地讲,实例在其整个生存期中最多能装载和打开一个数据库。
实例就是一组操作系统进程以及一些内存。这些进程可以操作数据库;而数据库只是一个文件集合(包括数据文件,临时文件,重做日志文件和控制文件)。在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。

1.2 SGA和后台进程
下图以最简单的形式展示了Oracle实例和数据库。Oracle有一个很大的内存块,称为系统全局区(SGA),在这里他会做以下工作:

1. 维护所有进程需要访问的多种内部数据结构;
2. 缓存磁盘上的数据,另外重做数据写至磁盘之前先在这里缓存;
3. 保存已解析的sql计划等等。

Oracle有一组附加到SGA的进程,附加机制因操作系统而异。在Unix环境中,这些进程会物理地附加到一个很大的共享内存段,这是操作系统中分配的一个内存块,可以由多个进程并发地访问(通常要使用shmget()和shmat())。在windows中,这些进程只是使用C调用(malloc())来分配内存,因为他们实际上是一个大进程中的线程,所以会共享相同的虚拟内存空间。
Oracle还有一组供数据库进程/线程读写的文件(只允许Oracle进程读写这些文件)。这些文件保存了所有的表数据、索引、临时空间、重做日志等。

1.3 连接oracle
Oracle服务器处理请求有两种最常见的方式,分别是专用服务器(dedicated server)连接共享服务器(shared server)连接。要想登陆数据库并在数据库中真正做事情,必须先连接,下面会说明建立连接时客户端和服务器会发生什么。

1.3.1 专用服务器
按最常用的配置连接Oracle,如下图所示:


登录时,Oracle总会为客户创建一个新的进程。这通常称为专用服务器配置,因为这个服务器进程会在客户的会话生存期中专门为客户服务。对于每个会话,都会出现一个新的专用服务器,会话与专用服务器之间存在一对一的映射。按照定义,这个专用服务器不是实例的一部分。连接数据库的程序会通过某种网络通道(如socket)与这个专用服务器直接通信,并由这个服务器进程接收和执行sql。如果必要,他会读取数据文件,并在数据库的缓存中查找需要的数据。

1.3.2 共享服务器
Oracle还可以接受另一种方式的连接,这称为共享服务器(shared server)。如果采用这种方式,就不会对每条用户连接创建另外的线程或新的unix进程。

在共享服务器中, Oracle使用一个"共享进程”池为大量用户提供服务。 共享服务器实际上就是一种连接池机制。利用共享服务器,我们不必为10000个数据库会活创建10 000个专用服务器(这样进程或线程就太多了) .而只需建立很少的一部分进程/线程,顾名思义,这些进/线程将由所有会话共享。这样Oracle 就能让更多的用户与数据库连接,否则很难连接更多用户。采用共享服务器模式.共享进程通常与数据库一同启动,使用ps 命令可以看到这个进程.

共享服务器连接和专用服务器连接之间有一个重大区别。 与数据库连接的客户进程不会与共享服务器直接通信,但专用服务器则不然,客户进程会与专用服务器直接通信。之所以不能与共享服务器直接对话,原因就在于这个服务带进程是共享的。为了共享在这些进程,还需要另外一种机制.通过这种机制才能与服务器进程"对话”. Oracle 使用一个或一组称为调度程序(dispatcher, 也称分派程序)的进程。客户进程通过网络与一个调度程序进程通信。这个调度程序进程将客户的请求放入SGA 中的请求队列(这也越SGA 的用途之一) . 第一个空闲的共享服务器会得到这个请求,并进行处理(例如,请求可能是update T set x=x+5 where Y = 2)。完成这个命令后,共享服务器会把响应放在原调度程序(即接收请求的调度程序)的响应队列中。 调度程序进程一直在监听这个队列,发现有结果后,就会把结果传给客户。从概念上讲,共享服务器请求的流程如下图所示:


1.3.3 服务器模式的选择(此部分至1.3.6小节参考http://www.itpub.net/thread-1714191-1-1.html)
1. 合适选用共享服务器的情景:
  (1)前台客户端数量比较多。
  (2)服务器内存限制比较大。
用户若在一些老的服务器上部署Oracle数据库的话,因为其主板对内存的升级有所限制,所以,为了得到一个不错的数据库性能,往往采用共享服务器模式。如此,即时同时访问数据库的用户有所增加,其内存也不会有多大的影响。可以大大的降低内存的压力。

2.某些特定功能要求采用共享服务器模式。
  比较典型的,如Oracle数据库服务器的连接共享、连接集中与负载均衡技术等等。他们必须在共享模式下才能够运行。
   负载均衡用来在群集环境下实现多机共享数据库,以保证应用的高可用性。同时可以自动实现并行处理以及均分负载,还能够实现数据库在故障时的容错和无断点恢复。所以,在一些对于性能与稳定性要求比较高的应用场景中,如银行中,往往都会采用负载均衡技术。此时,数据库管理员在配置数据库的时候,就需要考虑采用共享服务器模式。

3. 共享服务器好处
(1、减少操作系统进程/线程数
    在一个有上千用户的系统上,如果操作系统力图管理数千个进程,可能很快就崩溃了。如果使用共享模式,可以有效的管理活动的部分用户,效率大大提高,操作系统可以避免了上下文切换。
(2、刻意的限制并发度
   如果并发数过大,到一定程度,即使用户量再增加,每秒中完成的相应事物也不会增加。吞吐量到达一定峰值后会下降。利用共享服务器,可以把系统并发度限制到合理的数量上。
(3、减少系统所需的内存
   可以减少所需内存量,但是在自动PAG内存管理以后,意义不是很大。

1.3.4 服务器模式的设置
1. 启用专用服务器
dedicated servers不需要专门的设置,这个是oracle的默认选项。
2. 启用共享服务器
要切换到共享模式,可以使用以下步骤:
A.设置初始化参数 SHARED_SERVERS 大于0,可以使用alter system命令动态的设置也可以在spfile里面修改初始化参数SHARED_SERVERS 的值大于0,然后shutdown  oracle,然后restart oracle  即可启动共享模式,其他的共享服务器参数可以不用设置
  参考语句:
  alter system set shared_servers = 1 scope=both ;
  alter system set max_shared_servers = 5 scope=both ;

B.设置dispatchers 参数,可以采用下面的方法设置:
  alter system set dispatchers="(PROTOCOL=TCP) (SERVICE=yzdbXDB)(SERVICE=yzdb)";

  前面表示的是协议,后面的service 分别指定要采用共享服务器模式的服务名称。oracle文档上说该步骤不是必须做的,但是我在实际中发现如果只是设置了shared_server参数,而把dispatches参数设置为空的话,不能启动共享服务器,使用上面的模式指定只启动某个服务的共享模式,如果要设置所有服务都使用共享模式,则设置为:
  alter system set dispatchers='(PROTOCOL=TCP)';

C.在客户端的tnsnames.ora 的tns设置中,在 CONNECT_DATA 设置一项中增加 (server=shared )一项,即可使用共享服务器连接。
  如果服务器端没有启动共享服务器模式,而客户端使用shared方式连接的话,会出现错误提示:
  “ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄”;

关闭调度进程:
首先要查询到DISPATCHERS的NAME: SELECT NAME,NETWORK FROM V$DISPATCHER;
然后关闭调度进程:ALTER SYSTEM SHUTDOWN IMMEDIATE 'D000';

1.3.5 判断数据库使用的连接模式
1. 查看当前数据库服务器的连接模式
查看当前数据库服务器的运行情况有一下几种办法:
A.从v$session里面查看:
SQL> select distinct server from v$session ;  
SQL>
SERVER
---------
DEDICATED
NONE
SQL>
如果显示的除了dedicated,还有NONE,则说明当前启动了共享服务器,并且server为none的会话正使用共享服务器连接,
同时,如果只显示有dedicated,则不能说明服务器就一定工作在专用服务器下面,此时只能说明有可能启动了共享模式,但是无连接。


可以使用下面的语句查询采用共享服务器的会话信息:
select saddr,program ,server from v$session;
SQL> /
SADDR    PROGRAM                                          SERVER
-------- ------------------------------------------------ ---------
296FB24C plsqldev.exe                                      NONE
296FFD1C [email=oracle@B851]oracle @B851[/email] (q001)                               DEDICATED
29705AA0 [email=oracle@B851]oracle @B851[/email] (q000)                               DEDICATED

B.查询视图:
在网上有的资料上说只要查询下面三个视图,有记录则说明启动了共享模式,经过验证,具体情况如下:
select * from v$shared_server; ---有记录,且STATUS字段为WAIT(COMMON),则说明启动共享;
status为TERMINATED或者无记录,则说明没有启动共享服务器
select * from v$dispatcher; --有无记录都不能说明启动共享服务器,只能说明是配置了dispatchers参数
select * from V$CIRCUIT ; --有记录说明当前有使用共享模式的连接,无记录则不能判定服务器模式

2. 客户端建立的连接模式
A.当服务器采用专用服务器模式时,客户端只能使用专用模式连接,也就是在connect_data数据中只能使用 server=dedicated。
B.当服务器采用共享服务器模式时,客户端可以选择建立共享还是专用连接,connection,只要在 connect_data 中指定server=dedicated or server=shared

大多数情况下我们更倾向或习惯专用模式,两种模式下,对sga等分配都会有不同,所以如果转换成mts模式,别忘了sga也是需要调整的。最典型的是 mts模式需要较大的large_pool_size。如果真想转换还是仔细看看oracle关于mts的文档。共享连接只是把连接SESSION信息放 在LARGE POOL,所以LARGE POOL要大一些。而专用连接的SESION信息放在PGA。

1.3.6 禁用共享服务器模式
禁用的实验:
alter system set shared_servers = 0 ;
alter system set max_shared_servers = 0 ;
在已经建立共享模式的客户端执行查询,一直处于等待,查看视图:
SQL> select circuit,saddr,status,queue from v$circuit;
CIRCUIT  SADDR    STATUS           QUEUE
-------- -------- ---------------- ----------------
27434010 296F8CE4 NORMAL           COMMON
2743471C 296FB24C NORMAL           NONE
2 rows selected.

SQL> select program,saddr,server,status from v$session
where saddr in ('296F8CE4','296FB24C');

PROGRAM                                          SADDR    SERVER    STATUS
------------------------------------------------ -------- --------- --------
plsqldev.exe                                     296F8CE4 NONE      INACTIVE
plsqldev.exe                                     296FB24C NONE      INACTIVE
2 rows selected.SQL> 恢复参数值:
SQL>

alter system set shared_servers = 1;
System altered.
SQL> alter system set max_shared_servers = 5;
System altered.
SQL>

前台的查询恢复正常,查看视图:
SQL> select circuit,saddr,status,queue from v$circuit;
CIRCUIT  SADDR    STATUS           QUEUE
-------- -------- ---------------- ----------------
27434010 296F8CE4 NORMAL           NONE
2743471C 296FB24C NORMAL           NONE
2 rows selected.
SQL>
  • 大小: 97.4 KB
  • 大小: 71.5 KB
  • 大小: 73.7 KB
0
0
分享到:
评论

相关推荐

    spring security 参考手册中文版

    24.授权体系结构 190 24.1当局 190 24.2预调用处理 191 24.2.1 AccessDecisionManager 191 24.2.2基于投票的AccessDecisionManager实现 192 RoleVoter 193 AuthenticatedVoter 194 自定义选民 194 24.3调用处理后 ...

    ORACLE 10G入门与实践 Part1

    ORACLE 10G入门与实践 Part1~Part5&lt;br/&gt;&lt;br/&gt;目录:&lt;br/&gt;第1章 Oracle数据库10g概述 &lt;br/&gt;1-1 数据库和信息管理&lt;br/&gt;1-2 Oracle 10g服务器&lt;br/&gt;1-3 Oracle数据库体系结构&lt;br/&gt;1-4 Oracle数据库特性&lt;br/&gt;1-5 安装...

    ORACLE 10G入门与实践 Part2

    ORACLE 10G入门与实践 Part1~Part5&lt;br/&gt;&lt;br/&gt;目录:&lt;br/&gt;第1章 Oracle数据库10g概述 &lt;br/&gt;1-1 数据库和信息管理&lt;br/&gt;1-2 Oracle 10g服务器&lt;br/&gt;1-3 Oracle数据库体系结构&lt;br/&gt;1-4 Oracle数据库特性&lt;br/&gt;1-5 安装...

    ORACLE 10G入门与实践 Part5

    ORACLE 10G入门与实践 Part1~Part5&lt;br/&gt;&lt;br/&gt;目录:&lt;br/&gt;第1章 Oracle数据库10g概述 &lt;br/&gt;1-1 数据库和信息管理&lt;br/&gt;1-2 Oracle 10g服务器&lt;br/&gt;1-3 Oracle数据库体系结构&lt;br/&gt;1-4 Oracle数据库特性&lt;br/&gt;1-5 安装...

    ORACLE 10G入门与实践 Part3

    ORACLE 10G入门与实践 Part1~Part5&lt;br/&gt;&lt;br/&gt;目录:&lt;br/&gt;第1章 Oracle数据库10g概述 &lt;br/&gt;1-1 数据库和信息管理&lt;br/&gt;1-2 Oracle 10g服务器&lt;br/&gt;1-3 Oracle数据库体系结构&lt;br/&gt;1-4 Oracle数据库特性&lt;br/&gt;1-5 安装...

    Oracle体系结构概述

    本文将深入探讨Oracle体系结构的各个关键组成部分。 首先,我们关注物理结构,这是Oracle数据库在磁盘上的实际存储形式。主要包含以下几个部分: 1. **数据文件**:数据文件是Oracle数据库中最基本的存储单元,...

    Oracle Concepts 中文英文对照版 (10g R2)

    &lt;br&gt;Chapter 1, Introduction to the Oracle Database 第 1 章,Oracle 数据库简介 &lt;br&gt;Part II Oracle Database Architecture 第二部分 Oracle 数据库体系结构 &lt;br&gt;Chapter 2, Data Blocks, Extents, and Segments...

    oracle系统概述-体系结构

    oracle的体系结构、实例启动关闭、数据字典、事务管理等

    Oracle Concepts中英文对照版(10g R2).chm

    &lt;br&gt;Chapter 1, Introduction to the Oracle Database 第 1 章,Oracle 数据库简介 &lt;br&gt;Part II Oracle Database Architecture 第二部分 Oracle 数据库体系结构 &lt;br&gt;Chapter 2, Data Blocks, Extents, and Segments...

    oracle体系结构8.09

    #### 一、Oracle体系结构概述 Oracle数据库的体系结构主要包括几个关键部分:数据库实例(Instance)和数据库文件(Database Files)。其中,数据库实例由内存结构(Memory Structures)和后台进程(Background ...

    <<Oracle9i&10g编程艺术:深入数据库体系结构>>电子书下载(PDF)

    Oracle数据库体系结构概述 Oracle数据库的体系结构主要包括以下几个方面: - **实例**:一个运行中的Oracle数据库环境称为实例。每个实例都有自己的内存结构和进程。 - **数据库文件**:包括数据文件、控制文件和...

    Oracle安装和体系结构

    #### 四、Oracle体系结构详解 - **Oracle10g体系结构**:理解Oracle10g的体系结构对于深入学习和使用该数据库系统至关重要。主要包括以下几个方面: - **数据库实例**:一个数据库实例由内存结构和进程组成,是...

    Oracle11g体系结构深入剖析和运维管理(一)

    Oracle 11g体系结构深入剖析和运维管理(一)资源目录:【】1_Oracle学习前奏【】2_Oracle软件安装准备工作【】3_Oracle软件安装和数据库的创建【】4_Oracle数据库及相关软件的启动和关闭【】5_计算机工作机制概述【】...

    java基础知识 jspPPT 让你了解jsp基础

    JavaEE的体系结构分为三个层次:表示层、中间层和数据层。表示层通常包括HTML、JavaScript和Ajax,用于用户交互;中间层主要涉及Servlet、JSTL、JavaBean和各种框架如Struts,负责业务逻辑处理;数据层则通过JDBC和...

    Oracle体系结构概述1.ppt

    学习Oracle体系结构不仅需要数据库理论、编程语言和操作系统知识,还要求积极的学习态度和动力。理解Oracle的体系结构对于数据库管理员、开发人员和IT专业人士来说至关重要,因为它有助于优化性能、确保数据安全和...

    Oracle体系结构概述.ppt

    Oracle体系结构是理解其高效运行和管理的关键。本篇将深入探讨Oracle的体系结构及其主要组成部分。 首先,Oracle数据库的核心是数据库本身,它是一个数据的集合,包含在一个或多个物理文件中。数据库分为物理结构和...

    Oracle数据库的体系结构.pdf

    Oracle数据库的体系结构非常复杂,本总结只是对其中的一些关键概念和组件进行了概述。实际上,每个部分都可以展开深入讨论,并涵盖更多的细节。对于希望深入掌握Oracle数据库体系结构的读者来说,需要进一步学习和...

    Oracle体系结构概述.pptx

    Oracle体系结构概述.pptx

    Oracle概述和体系结构.pptx

    Oracle概述和体系结构.pptx

Global site tag (gtag.js) - Google Analytics