体系结构
一、基本组成
1.oracle服务器是一个数据库管理系统,包括oracle例程(oracle instance)和oracle数据库(oracle database)。
2.oracle例程是一种访问数据库的工具,由内存结构和后台进程组成,始终打开一个,并且只能打开一个数据库,与数据库是一个一对多的关系。
3.oracle数据库是一个被处理的数据集合,包括三类文件:数据文件(data files),控制文件(control files),重做日志文件(redo log files)。另外还有一些辅助的,参数文件(parameter),密码文件(password)和归档日志文件(archived log files)
 数据文件包括数据库中的实际数据
 控制文件包括维护和验证数据库完整性所需的信息
 重做日志文件包含数据库的更改记录,可以在出现故障时用来恢复数据
 参数文件用来定义oracle例程的特性,主要用来规定内存和数据库中的参数
 密码文件验证那些用户有权启动和关闭oracle的例程
 归档日志文件是重做日志文件的脱机副本,重做日志文件写满后会循环覆盖掉,归档日志文件则会记录所有的重做日志。
4.物理结构包括三种文件类型:控制文件(以.ctl为后缀的文件),数据文件(以.dbf为后缀的文件,数据字典也属于数据文件),重做日志文件(以log为后缀的文件)
 二、内存结构
1.oracle的内存结构由两个内存区组成:系统全局区(SGA)和进程全局区(PGA)
  SGA在oracle例程启动的时候分配,是一段连续的以粒组(granules:当SGA<128M的时候,粒组大小为4M,否则为16M)为单位内存分配,用于存储数据库进程共享的数据库信息,包含有关oracle服务器的数据和控制信息。(在数据库中使用show SGA查询相关信息)
  PGA在服务器进程启动时分配,
2.SGA包括以下几种基本的内存结构:
   共享池(Shared pool):用于存储最近执行的SQL语句和最近使用的数据定义。包括两个部分。
       a、库高速缓存(Library cache):存储有关最近使用的SQL和PL/SQL语句的信息,由“最近最少使用算法”(LRU)——当高速缓存填满的时候,将删除高速缓存中最近很少使用的执行路径和语法分析树。也包括两个结构:共享的SQL区(Shared SQL area)和共享的PL/SQL区(Shared SQL area)。
       b、数据字典高速缓存(Dictionary buffer cache):数据库中最近使用的定义的集合,包括数据库的文件、表、索引、列、用户、权限和其他的数据库对象相关的信息,(有关用户账户数据,数据文件名、段名、区的位置、表的说明和用户权限信息都保存在数据字典表中)。
   数据库缓冲区高速缓存(Database buffer cache):存储已从数据文件中检索到的数据块的副本。并通过LRU算法管理。
   重做日志缓冲区(Redo log buffer):记录对数据库数据块所做的全部修改。主要用于恢复。
   大型共享池(Large pool):SGA中的可选内存区,用于共享服务器的会话内存(UGA),I/O服务器进程,备份和恢复操作或RMAN,并行执行消息缓存区。不使用LRU
   JAVA池(JAVA pool):存储JAVA命令的服务分析要求,在安装并使用JAVA时是必需的。
3.PGA是为连接到oracle数据库的每个用户进程保留的内存,在创建进程时分配,在终止进程时收回,仅供一个进程使用。PGA内存包括下列组件:
    专用SQL区:包含绑定信息和运行时内存结构之类的数据。
    会话内存:包含为会话变量以及与该会话相关的其它信息而分配的内存。
    SQL工作区:用于大量占用内存的操作。
三、进程结构
1.oracle的几种进程
    用户进程:在数据库用户请求连接到oracle服务器时启动,一般启动与连接oracle服务器的客户端,不与oracle服务器直接交互,而是通过用户程序结构(UPI)生成各种调用
    服务器进程:与oracle例程相连接,在用户建立会话时启动,执行生成的调用并返回相关的结果给用户,用户进程断开连接后,服务器进程就会终止
    后台进程:在oracle例程启动时启动,有五个必备的后台进程和其他可选后台进程
       a、数据库写入程序(DBWn):服务器进程在数据库缓冲区高速缓存中记录对还原块和数据块所做的更改。DBWn将数据库缓冲区高速缓存中的灰数据缓冲区写入数据文件。DBWn延迟写入数据文件,直到发生下列事件之一:
             增量或正常检查点
             灰数据缓冲区的数量达到阀值
             进程扫描指定数据的块而无法找到任何空闲缓冲区时
             出现超时
             RAC集群环境中出现ping请求
             使一般表空间或临时表空间处于脱机状态
             使表空间处于只读模式
             删除或截断表
             执行ALTER TABLESPACE 表空间名 BEGIN BACKUP操作   
        b、日志写入器(LGWR):将重做日志缓冲区的信息写入重做日志文件,发生在下列事件中:
              当提交事务时
              当重做日志缓冲区的三分之一填满时
              当重做日志缓冲区中纪录了超过1MB的更改时
              在DBWn将数据缓冲区高速缓存中修改的块写入数据文件以前
              每隔三秒
         c、系统监控程序(SMON):用于例程恢复(前滚重做日志中的更改,打开数据库供用户访问,回退未提交的事务处理)、合并空闲空间、回收临时段。
         d、进程监视器(PMON):在例程失败后,回退事务处理,释放锁,释放其他资源,重新启动已失效的调度程序
         e、检查点(CKPT):包括在检查点发信号给DBWn、使用检查点信息更新数据文件的标头,使用检查点信息更新控制文件。检查点的时间间隔为3秒,检查点的用途是确保数据库缓冲区高速缓存中在时间点之间发生修改的所有缓冲区内容都已写入数据文件。
          f、归档程序(ARCn):可选的后台进程,设置ARCHIVELOG(归档日志)模式时自动归档联机重做日志,保留数据库的全部更改记录。
四、逻辑结构
1.逻辑结构的层次如下所述:
    oracle数据库至少包含一个表空间
    表空间包含一个或多个段
    段由区组成
    区由逻辑块组成
    块是读写操作的最小单元
2.oracle数据库体系结构包括构成数据库的逻辑结构和物理结构
    物理结构包括构成数据库的控制文件、联机重做日志文件和数据文件。
    逻辑结构包括表空间、段、区和数据块。
3.表空间:oracle数据库内的数据存储在表空间内。
    oracle数据库可以从逻辑上分组到称为表空间的更小的逻辑空间区
    一个表空间在某一时刻只能属于一个数据库
    每个表空间由一个或多个成为数据文件的操作系统文件组成
    表空间可能包含一个或多个段
    除了STSTEM表空间或者有活动还原段的表空间,可将其他表空间置于脱机状态而不会影响数据库运行
    表空间可以在可读写和只读状态之间切换
4.数据文件(不是逻辑结构)
    oracle数据库内的每个表空间由一个多个称为数据文件的文件组成。这些屋里结构与其上运行oracle服务器的操作系统是一致的
    一个数据文件只能属于一个表空间
    通过分配制定数量的磁盘空间加上少量的开销,oracle服务器创建表空间数据文件
    数据文件创建后,数据库管理员可以更改其大小或者制定数据文件应随着表空间内对象的增长而动态增长。
5.段
     段是在表空间中为特定逻辑存储结构分配的空间
     表空间可以由一个或多个段组成
     段无法跨越表空间,但是段可以跨越属于同一个表空间的多个数据文件
     每个段由一个或多个区组成
6.区
     一个或多个区组成一个段
           当段创建后,它至少由一个区组成
           随着段的增长,需要向该段添加区
           DBA可以手动向段添加区
     一个区就是一组连续的oracle块
     区无法跨越数据文件,所以,它必须存在于一个数据文件内
7.数据块
     Oracle服务器以Oracle块或者数据块为单位来管理数据文件中的存储空间。
     Oracle数据库内的数据存储在数据块内,数据块为最精细的粒度等级。
     Oracle数据块是Oracle  服务器能够分配、读或写的最小存储单元。
     一个数据块对应一个或多个从现有数据文件中分配的操作系统块。
     每个Oracle  数据库的标准数据块大小是在创建数据库时由初始化参数
DB_BLOCK_SIZE 指定的。
     数据块大小应当是操作系统块大小的整数倍以避免不必要的 I/O。
     数据块大小最大值取决于操作系统。