oracle基础之基本结构

来源:互联网 发布:python采集图片教程 编辑:程序博客网 时间:2024/06/10 03:06

 


1.  Oracle体系结构由内存结构、进程结构、存储结构组成

    内存结构: 由SGA(System Global Area, 系统全局区)、PGA(Program Gloal Area,程序全局区)组成,使用内存最多的是SGA,同时也是影响数据库性能的最大参数.
    存储结构: 由逻辑存储、物理存储组成。从物理上看,数据库由控制文件、数据文件、重做日志文件等操作系统文件组成

从逻辑上来看,数据库是由表空间,段,范围,数据库组成。

    进程结构: 包括前台进程、后台进程。前台进程是指服务进程(又叫oracle进程)和用户进程。前台进程是根据实际需要而运行的,并在需要结束后立刻结束。后台进程是指在Oracle数据库启动后,自动启动的几个操作系统进程.

 

 

2. oracle工作原理

 

  
       . 用户在其机器上运行基于Oracle的应用程序(如:SQL*PLUS、PL/SQL Developer等),即启动用户进程.
       客户机、服务器之间建立连接(Connect).
       .  服务器为用户建立会话(Session),并为该会话建立一个PGA(Program Global Area,程序全局区)以存储

与该会话相关的信息.在同一个连接中,不同的用户有不同的会话.
       .  启动服务进程,由该服务进程负责执行该会话的各项任务.
       .  用户进程发送SQL语句(select、update、commit….)
       .  服务器进程解析、编译、执行SQL语句,然后将结果写入数据库并返回结果给用户进程。
       用户进程接收返回的SQL执行结果。
        在应用程序中显示SQL执行结果.

------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------


1. 存储结构
   Oracle数据库的存储结构分为逻辑存储结构和物理存储结构.

   
                                       

 2. 逻辑结构

       逻辑存储结构主要描述Oracle数据库的内部存储结构,即从技术概念上描述在Oracle数据库种如何组织、管理数据.


                                                     

      从逻辑上来看. 数据库是由一个或者多个表空间等组成。一个表空间(tablespace)由一组段组成,一个段(segment)由一组区组成,一个区(extent)由一批数据库块组成,一个数据库块(block)对应一个或多个物理块
      表空间是最大的逻辑单位,块是最小的逻辑单位。
      因此,逻辑存储结构是和操作系统平台无关的,是由Oracle数据库创建和管理的.

 

3.物理存储结构
      物理存储结构主要描述Oracle数据库的外部存储结构,即在操作系统种如何组织、管理数据.
      从物理上看,数据库由控制文件数据文件重做日志文件和参数文件等操作系统文件组成
      因此,物理存储结构是和操作系统平台有关的.

 

3.1. 数据库块

       数据库块(Database Block)是数据库使用的I/O最小单元,又称逻辑块或ORACLE块。一个数据库块对应一个或多个物理块,块的大小由参数DB_BLOCK_SIZE确定。
       块的大小是操作系统块大小的整数倍.
       以Win2K为例,操作系统块(OS block)的大小为4kb,所以Oracle Block的大小可以是4kb,8kb,16kb等等。
       如果块的大小为4kb,某表每行的数据是100 bytes.,如果某查询语句只返回1行数据,那么,在将数据读入到数据高速缓存时,读取的数据量时4kb而不是100 bytes.
       数据块由一下五部分组成  
       标题:包括通用的块信息,如块地址/段类型等,最佳大小为85-100bytes。
       表目录:存储聚集中表的信息,这些信息用于聚集段。
       行目录:包括这块中的有效行信息,允许使用每行开头的2bytes。
       自由空间:这块中能插入或修改的一组空间。
       行数据:存储表或索引的数据。

 

 3.2. 区

       区(Extent)是数据库存储空间分配的逻辑单位,一个区由一组数据库块组成,区是由段分配的,分配的第一个区称初始区,以后分配的区称增量区。

 

 3.3.段

        段(Segment)是表空间中一个指定类型的逻辑存储结构,它由一个或多个区组成,段将占用并增长存储空间。
        引导段(Bootstrap Segment) :  存储数据字典表的定义
        临时段(Temporary Segment): 存储表排序操作期间简历的临时表的数据
        回滚段(Rollback Segment)    :  存储修改之前的位置和值
        索引段(Index Segment)        :  存储表上最佳查询的所有索引数据
        数据段(Date Segment)          :   存储表中所有数据

 

3.4. 表空间

       表空间(tablespace)是最大的逻辑单位,对应一个或多个数据文件,表空间的大小是它所对应的数据文件大小的总和。

 
     Oracle 10g自动创建的表空间有:
     Example(实例表空间)
     Sysaux(辅助系统表空间)
     System(系统表空间)
     Temp(临时表空间)
     Undotbs(重做表空间)
     Users(用户的表空间)
     System : 系统表空间,存放关于表空间的名称、控制文件、数据文件等管理信息,是最重要的表空间.它属于Sys、System两个schema(方案),仅被这两个或其他具有足够权限的用户使用。但是均不可删除或者重命名System表空间.
     Temp: 临时表空间存放临时表和临时数据,用于排序。
     Users: 用户表空间,永久存放用户对象和私有信息,也被成为数据表空间。
     Sysaux:辅助系统表空间,用于减少系统负荷,提高系统的作业效率.
        一般地:系统用户使用system表空间,非系统用户使用Users表空间

 

4. 物理结构
    从物理上看,数据库由控制文件、数据文件、重做日志文件等操作系统文件组成

    数据文件(Data File)是物理存储Oracle数据库数据的文件。每一个数据文件只与一个数据库相联系。 数据文件一旦被建立则不能修改其大小。一个表空间可包含一个或多个数据文件。一个数据文件只能属于一个表空间.

 

    重做日志文件(Redo Log File)记录所有对数据库数据的修改,以备恢复数据时使用。其特点如下:每一个数据库至少包含两个日志文件组。 日志文件组以循环方式进行写操作。每一个日志文件成员对应一个物理文件。

    日志开关(Log Switch)是为实现日志文件组的循环使用而设置的。出现日志开关的情况如下:当一个日志文件组被填满时;关闭数据库时; DBA手动转移日志开关;

      镜像日志文件是为防止日志文件的丢失,在不同磁盘上同时维护两个或多个联机日志文件的副本。
     其特点如下: 每个日志文件组至少包含两个日志文件成员。每组的成员数目相同。同组的所有成员同时被修改。同组的成员大小相同,不同组的成员大小可不同.


      控制文件(Control File)是一个较小的二进制文件,用于描述数据库结构。将数据库的物理文件映射到数据字典中的逻辑表格空间和联机重做日志文件。
描述信息如下:
数据库建立的日期。
数据库名。
数据库中所有数据文件和日志文件的文件名及路径。
恢复数据库时所需的同步信息。
要点注意:
在打开和存取数据库时都要访问该文件。
镜像控制文件。
记录控制文件名及路径的参数为:CONTROL_FILES


      参数文件(Parameter File)是一个文本文件,可直接使用操作系统下的文本编辑器对其内容进行修改。该文件只在建立数据库或启动实例时才被访问,在修改该文件之前必须关闭实例。
    初始参数文件:init.ora
    生成参数文件:initSID.ora
                         config.ora
    参数文件的作用:
    确定存储结构的大小。
    设置数据库的全部缺省值。
    设置数据库的范围。
    设置数据库的各种物理属性。
    优化数据库性能。

 

------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------

 

1. Oracle数据库启动
       .  Oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台,即:创建一个实例(instance);
       .  然后由该实例装载(mount)、打开(open)数据库;
       .  最后由这个实例来访问和控制数据库的各种物理结构.

      当用户连接到数据库并使用数据库时,实际上是连接到该数据库的例程,通过实例来连接、使用数据库。所以实例是用户和数据库之间的中间层。


2. 例程与数据库的区别
      . 数据库指的是存储数据的物理结构,总是实际存在的;
      . 实例则是由内存结构和一系列进程组成,可以启动和关闭。是存取和控制数据库的软件机制,它由系统全局区(System Global Area,简称SGA)和后台进程组成。

       一台计算机上可以创建多个Oracle数据库,一个数据库上可以有多个实例。为了使实例间不混淆,每个实例都称为:SID(SystemIDentify)加以区分。

 

3. Oracle数据库的三种重要结构SGA 和 PGA,后台进程
       SGA(System Global Area,系统全局区)包括:数据高速缓存,日志高速缓存,共享池,大池,java池,SGA是ORACLE系统为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。
        每个实例都只有一个SGA.它是不同用户进程与服务进程进行通信的中心,数据库的各种操作主要在SGA中进行,所以称其为系统全局区.创建例程时,Oracle为SGA分配内存;终止例程时,释放SGA所占用的内存.


        数据高速缓存(Database Buffer Cache)
        保存最近从数据文件中读取的数据块,其中的数据被所有用户共享.
        两个参数影响DBC:
        DB_BLOCK_SIZE  缓冲区数据块大小
        DB_BLOCK_BUFFERS  缓冲区数据块个数

        初次访问数据时,Oracle将读取磁盘上的数据文件,将数据放入数据高速缓存,再处理数据;如果数据已经位于数据高速缓存中时,Oracle直接操作数据。
        DBC的缓存块分为三类:
        脏缓存块  存放已经被修改过的缓存块. 当SQL修改某个缓存块中的数据,则这个缓存块被标记为脏缓存块空闲缓存块等待写入数据的空闲缓存块.
        命中缓存块 最近正在被访问的缓存块.读数据入DBC之前,先在LRU中搜索空闲缓存块;在搜索过程中如果发现脏缓存块,则将其移入DIRTY;找到足够的空闲块,将所有数据读入;如果空闲块不足,则暂停搜索,Oralce立刻启动DBWR进程,将DIRTY中的脏缓存块数据写入数据文件释放足够的空闲缓存块。


        当执行DML(Data Manipulation Language, 数据操纵语言)如:update、delete、insert或者create、alter、drop 等语句时,Oracle都会为这些操作生成重做记录.重做日志高速缓存就是用于存储重做记录的缓存.为提高效率,重做记录并不直接写入磁盘的重做日志文件,而是先写入重做日志缓存;
当重做日志缓存中的重做记录达到一定数量时,由LGWR进程写入重做日志.(先内存后磁盘)。当2个(至少2个)重做日志切换时,由ARCH将重做日志中的数据写入归档日志文件,以做备份.

 

4. 共享池(Shared Pool)

      共享池保存了最近执行的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句和PL/SQL程序进行语法分析、编译、执行的内存区.共享池由库缓存数据字典缓存组成
参数SHARED_POOL_SIZE 确定共享池的大小

      数据字典区(Dictionary cache)用于存放数据字典信息行。

      Oracle DBMS执行各种SQL、PL/SQL之前,要对其进行语法上的解析、对象上的确认、权限上的判断、操作上的优化等一系列操作,并生成执行计划。
        库缓存保存了已经解析的SQL和PL/SQL。


5. 数据字典缓存
       在Oracle运行过程中,Oracle会频繁的对数据字典中的表、视图进行访问,以便确定操作的数据对象是否存在、是否具有合适的权限等信息。
       数据字典缓保存了最常用的数据字典信息。数据字典缓存中存放的记录是一条一条的,而其他缓存区中保存的是数据块.

 

6. 大池
  大池用于需要大内存操作提供相对独立的内存空间,以便提高性能。
  大池是可选的内存结构。 DBA可以决定是否需要在SGA中创建大池。
        需要大池的操作:
        数据库备份和恢复
        大量排序的SQL语句

 

7. java池
8i以后提供的对Java的支持,用于存放Java代码、Java程序等.
         一般不小于20M,以便虚拟机运行.


8. PGA(Program Global Area) 和后台进程
       PGA是用户进程连接到数据库,并创建一个对应的会话时,由Oracle为服务进程分配的,专门用于当前用户会话的内存区。由排序区,会话区,游标区,堆栈区组成
         PGA是非共享的,而SGA是共享的。PGA大小由操作系统决定,并且分配后保持不变; 会话终止时,自动释放PGA所占的内存

      排序区: 执行order by、group by等包含排序操作的SQL语句时所产生的临时数据.Oracle将准备排序的数据先临时存储到排序区中,并在排序区中排序,然后将排序好的数据返回给用户.
      会话区保存会话所具有的权限、角色、性能统计信息.

      游标区:当运行带有游标(course)的PL/SQL语句时,Oracle会在共享池中为该语句分配上下文(Context),游标实际上是指向该上下文的指针。

      堆栈区:保存会话中的绑定变量、会话变量以及SQL语句运行时的内存结构信息。
       

      Oracle包括用户进程和Oracle进程;Oracle进程又包括服务器进程和后台进程

      用户进程:当用户运行一个应用程序时,就建立一个用户进程。处理用户进程的请求;包括分析SQL命令并生成执行方案。从数据缓冲存储区中读取数据。将执行结果返回给用户。
      后台进程:为所有数据库用户异步完成各种任务;包括
 DBWR    数据库写进程
 LGWR    日志写进程
 CKPT      检查点写进程
 SMON     系统监控进程
 PMON     进程监控进程
 ARCH      归档进程
 RECO       恢复进程
 LCKn       封锁进程

9. DBWR(Data Base Writer)
      将数据缓冲区中所有修改过的缓冲块数据写到数据文件中,并使用LRU算法来保持缓冲区中的数据块为最近经常使用的,以减少I/O次数。该进程在启动实例时自动启动。
      启动DBWR进行写操作的条件:
      相当于参数DB_BLOCK_WRITE_BATCH值的一半。一个进程在LRU列表中扫描指定数目的缓冲块,未找到空闲缓冲块。
     参数DB_BLOCK_MAX_SCAN_CNT确定扫描数目。
出现超时
     3秒钟内该进程未活动,则该进程将在LRU列表中查找尚未查找的缓冲块,这组缓冲块的数目相当于参数DB_BLOCK_WRITE_BATCH值的2倍。
    出现检查点。

 

10.  检查点(Checkpoint):
     在检查点出现期间,DBWR进程将数据缓冲区中的所有脏缓冲块写到数据文件中,
     LGWR进程将日志缓冲区中的所有记录项写到日志文件中,以确保上一个检查点至今修改过的所有数据块都被写到磁盘上。
Checkpoint(检查点)的任务
 预定数目的记录项被填满。
        参数LOG_CHECKPOINT_INTERVAL确定了预定数目。
 设置指定的秒数。
        参数LOG_CHECKPOINT_TIMEOUT确定了间隔秒数。
 每个日志开关处
 关闭实例时

 

11.  LGWR(Log Writer)
        将日志缓冲区中的所有记录项写到日志文件中。该进程在启动实例时自动启动。
        启动LGWR进行写操作的条件:
        用户进程提交一个事务(Commit)
        日志缓冲区达到1/3范围
        DBWR对一个检查点需要清除缓冲块
        出现超时(3秒钟内未活动,则进行一次写操作。)

 

12. CKPT(检查点进程)
       在控制文件中记录检查点。参数CHECKPOINT_PROCESS 确定了检查点的启动/不启动状态。
        若CKPT进程不启动,则该进程的工作将由LGWR进程代劳。(如果数据库的数据文件过多,这样操作会降低系统性能。)

ARCH(Archiver)
       在日志文件组出现切换时,将旧日志文件的内容拷贝到脱机存储介质上,出现介质失败时用于恢复数据。
 LOG_ARCHIVE_START
      确定了该进程的启动/不启动状态
LOG_ARCHIVE_DEST
        当数据库在归档模式下操作时,该参数确定了日志文件的归档目标。
 LOG_ARCHIVE_FORMAT
        当数据库在归档模式下操作时,该参数确定了归档日志文件的缺省文件名格式。

SMON(System Monitor,系统检视进程)
        负责完成自动实例恢复。该进程在启动实例时自动启动。

PMON(Process Monitor,进程检视进程)
        撤消异常中断的用户进程,并释放该进程已获得的系统资源或锁。

RECO(Recover,恢复进程)
        在分布式操作的情况下,恢复一个事务的失败。

LCKn(Lock,锁进程)
        在并行服务器系统间加锁,最多可加10个锁,分别为LCK0,LCK1,,LCK9。

原创粉丝点击