Oracle软件结构

来源:互联网 发布:网络远程教育的文凭怎么样 编辑:程序博客网 时间:2024/05/16 09:06

Oracle软件结构:Oracle “实例”

 在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例,然后由这个实例来访问和控制硬盘中的数据库文件
Oracle数据库服务器主要由两个部分组成-----数据库和实例:
 数据库:Oracle用于保存数据的一系列物理结构和逻辑结构
 实例:操作系统中的内存结构和一系列进程所组成。
 
 启动数据库时首先需要在内存中创建它的一个实例,然后由实例加载并打开数据库。当用户连接数据库时,实际上是连到实例中,然后由实例负责与数据库通信,再将处理结果返回给用户。

* 实例的组成:
 实例的内存结构:分为SGA区与PGA区两大部分
 实例的进程结构:包括服务进程与后台进程等

* SGA区的内存结构:实例的主要组成之一
 数据库缓存 数据文件中的数据块复制到缓存快中
 重做日志缓存 缓存重做记录
 共享池 缓存SQL或PL/SQL语句、数据字典
 数据字典缓存
 大型池 数据库备份或恢复操作

* PGA区:不属于实例的内存结构
PGA的内容与结构和数据库的操作模式有关。在专用服务器模式下和共享服务器模式下,PGA有着不同的结构和内存。一般情况下,PGA区都由私有SQL工作区和会话内存区组成。

游标(Cursors):命名的数据库连接资源

* 数据库后台进程:
 DBWR(数据库写进程):
 数据库写进程负责将数据库缓存中的脏缓存快成批写入到数据库文件中。
 将脏缓存快写入数据文件的情况

 LGWR(日志写进程): 一个循环结构
 LGWR进程将缓存数据写入重做日志文件情况:
  用户通过committee语句提交当前事务
  重做日志缓存被写满三分之一
  DBWR进程开始将脏缓存快写入数据文件之前


@ 数据库模式对象
 模式的概念:
 模式是一系列逻辑数据结构或对象的集合,一个模式只能够被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同。
* 表:
 数据库存储NULL值的方式与字段的位置有关。如果NULL值字段位于非NULL值字段中间,将需要使用1字节的空间来存储NULL值字段的长度;如果NULL值字段位于一条记录的末尾,将不需要任何存储空间来存储NULL值。因此,在定义表的时候,应当将可能包含NULL值的字段放在字段列表的末尾,这样可以节省存储空间。

 ROWID:Oracle中的一种数据类型,用于在Oracle内部保存表中每条记录的物理地址。在Oracle内部,是通过使用ROWID来定位所需记录的。在块中存储记录时,Oracle也会将记录的ROWID保存在记录头中。

* 视图:视图的定义语句保存在数据字典视图中
 视图是从一个或多个表或视图中提取出来的数据的一种表现方式。或者可以认为视图就是一个查询语句的结果,只不过是以类似表的形式保存在数据库中。

 视图与基础表不同,它是一个“虚”表,也就是说视图实际上并不是像表一样将其中的数据存储在数据库中,在数据库中只保存视图的定义。在查询视图时,数据库通过视图的定义从相关的基础表中获取数据并返回给用户。

* 索引:
 

关于SGA
SGA (System Global Area)是Oracle Instance的 基本组成部分,在实例启动时分配。是一组包含一个Oracle实例的数据和控制信息的共享内存结构。主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

SGA几个很重要的特性:
1、SGA的构成——数据和控制信息,我们下面会详细介绍;
2、SGA是共享的,即当有多个用户同时登录了这个实例,SGA中的信息可以被它们同时访问(当涉及到互斥的问题时,由latch和enquence控制);
3、一个SGA只服务于一个实例,也就是说,当一台机器上有多个实例运行时,每个实例都有一个自己的SGA尽管SGA来自于OS的共享内存区,但实例之间不能相互访问对方的SGA区。

它主要包括:
1.数据库高速缓存(the database buffer cache),
2.重演日志缓存(the redo log buffer)
3.共享池(the shared pool)
4.数据字典缓存(the data dictionary cache)以及其它各方面的信息。

1.数据高速缓冲区(Data Buffer Cache)

在数据高速缓冲区中存放着Oracle系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用访问的数据。如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:1) 脏的区(Dirty Buffers):包含有已经改变过并需要写回数据文件的数据块。
2) 自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块该区。
3) 保留区(Pinned Buffers):此区包含有正在处理的或者明确保留用作将来用的区。

2.Redo Log Buffer Cache缓存对于数据块的所有修改。
主要用于恢复其中的每一项修改记录都被称为redo 条目。利用Redo条目的信息可以重做修改。

3. Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义。
它主要由两个内存结构构成:Library cache和Data dictionary cache
修改共享池的大小:ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;

Libray Cache缓存最近被执行的SQL和PL/SQL的相关信息。实现常用语句的共享,使用LRU算法进行管理,由以下两个结构构成:Shared SQL area、Shared PL/SQL area、Data Dictionary Cache、Data dictionary cache缓存最近被使用的数据库定义。它包括关于数据库文件、表、索引、列、用户、权限以及其它数据库对象的信息。在语法分析阶段,Server Process访问数据字典中的信息以解析对象名和对存取操作进行验证。数据字典信息缓存在内存中有助于缩短响应时间。

4.数据字典缓存(the data dictionary cache)
它包括的信息有:数据库文件,表,索引,列,用户,权限和其他数据对象,在解析间段,服务器进程查看数据字典来决定对象名称和有效的访问的信息,缓存数据字典信息来提高请求反应时间,大小是由共享池的大小来决定的。
 

文章分类:数据库 
概述:PGA区是用户进程连接到数据库并创建对应的会话时,由oracle为服务器进程分配的专用于当前用户会话的内存

         区。这个区时非共享的,不可写的,只有服务器进程本身才能访问。当会话终止时,oracle会自动释放PGA区所

         占的内存。

PGA区可以分为如下几个部分

1.排序区

   1)用于存放排序操作所存放的临时数据,它是影响PGA大小的主要因素。大小由sort_area_size指定。

        sort_area_retained_size的值决定了排序操作结束后排序区保留的大小。

   2)排序过程:假如要排序的数据在排序区中放不下,Oracle就将数据分割成较小的块放到排序去中,然后对

        每一小块进行排序。排序过程中产生的临时数据将先放到临时表空间的临时段中。当每个小块都排序玩之后,

        再将这些排完序的小块合并在一起,产生最终的结果。

2.会话区

   存储会话所具有的权限,角色,性能统计信息。

3.游标状态区

        使用到游标时,oracle会在共享池中为语句分配上下文区,游标实际上是指向该上下文区的指针。通过设置

   open_cursors,可以限制用户能够同时打开的游标数目。

        游标状态区存储了会话中当前使用的各个游标所处的状态。

4.堆栈区

   存储会话区中的绑定变量,会话变量,及sql语句运行时的内存结构等信息。

 

   对专用服务器模式来说,“排序区”和“私有SQL区”在PGA中,对共享服务器模式来说,在SGA区。