您的位置:首页 > 数据库 > Oracle

Oracle体系结构

2015-10-26 22:07 253 查看
Oracle数据库由三种类型的数据库文件组成,它们是数据文件、控制文件和重做日志文件。数据文件保存着我们的各种数据表,重做日志文件则记录着用户对数据库所做的任何操作,这里要注意重做日志组和重做日志组成员两个概念。其中,一个数据库至少要有两个重做日志组文件,一组写完再写一组,轮流写;每个日志组中至少有一个日志成员,一个日志组中的多个日志成员之间是镜像关系,有利于日志文件的保护。如果Oracle运行在归档模式下,那么一组重做日志文件切换后,为了保存用户的所有修改,在覆盖之前,系统将它们保存成一组连续的文件中,这一系列的连续文件就是归档日志文件。如果不用归档模式,那么就不会有归档日志文件了。
一个运行着的Oracle数据库可以看做一个Oracle服务器,Oracle服务器提供一个开放的、全面的、完整的信息管理平台,它由数据库和实例组成。Oracle实例是访问数据库的一种方法,一次可以打开且只能打开一个数据库,负责数据库相应操作并与用户交互,它由SGA内存结构和管理数据库的后台进程组成。SGA即System Global Area的缩写,系统全局区作为Oracle实例的基本组成部分,在实例启动的时候分配。SAG主要有数据高速缓冲区(Database Buffer Cache)、共享池(Shared
Pool)、重做日志缓冲区(Redo Log Cache)、大型池(Large Pool)、Java池(Java Pool)、流池(Streams Pool)和其他结构(如固定SGA和锁管理等)组成。

其中,共享池用于存储最近执行的SQL语句和最近使用的数据字典数据。这些SQL语句可以是用户进程提交的,也可以是从数据字典读取的(在存储过程的情况中)。数据库缓冲区高速缓存用于存储最近使用的数据,这是通过最近最少使用LRU算法来实现的,并使用参数DB_BLOCK_SIZE确定主块的大小,在32位系统中,块缓冲区高速缓存最大可达到1.7G,在64位系统上,块缓冲区高速缓存最大可达到10G。块缓冲区高速缓存的大小可以使用ALTER
SYSTEM动态调整。重做日志缓冲区用于跟踪服务器和后台进程对数据库所做的更改,它的主要目的是为了恢复,其中的重做条目包含了重做的信息,该缓冲区可以通过LOG_BUFFER来定义其大小。大型池是在共享服务器环境下的一个可选区域,它可以减轻共享池的负担,与共享池不同的是它不使用LRU列表。

一个Oracle进程是根据其进程类型来完成信息请求、执行一系列步骤或者是特定任务的,包括用户进程和数据库进程两种类型。用户进程是在一个数据库用户或一个批处理连接到DB时启动的;数据库进程又分为服务器进程和后台进程,服务器进程连接到Oracle实例,在用户建立会话时启动,后台进程在启动Oracle实例时启动。注意连接是用户进程与数据库实例之间的通信路径,会话是用户通过用户进程到数据库实例的特定连接。

用户进程是一个请求与服务器交互的程序,它必须先建立一个连接,并不能与服务器直接进行交互。服务器进程则能够与Oracle服务器直接进行交互,它是为用户进程服务的进程,分为专用服务进程和共享服务进程。专用服务进程是一个服务进程对应一个用户进程,共享服务进程是一个服务进程对应多个用户进程,轮流为用户进程服务。Program Global Area(PGA)是用来保存与用户进程相关的内存段,PGA总是由进程或线程在本地分配,其他进程与线程无法访问。User Global Area(UGA)是保存会话登录等与会话相关信息的内存区,对于专用服务器进程,UGA在PGA中分配。对于共享服务器,UGA在SGA的Large
pool中分配。PGA/UGA一般保存了用户的变量、权限、堆栈、排序(Sort)空间等信息。影响PGA/UGA最大的也就是Sort信息,由初始化sort_area_size决定,由于Sort信息分配在UGA中,所以共享服务器中能更好地利用内存。

后台进程负责维护物理数据库和内存结构之间的关系,根据配置情况,Oracle实例可以包含多个后台进程,但是每个进程都必须包含以下几个必需的后台进程:数据库写入进程(DBWn)负责将更改的数据从数据库缓冲区高速缓存写入数据文件;日志写入进程(LGWR)将重做日志缓冲区中注册的更改写入重做日志文件;系统监视进程(SMON)检查数据库的一致性,如果有必要还会在数据库打开时启动数据库的恢复;过程监视器(PMON)负责在一个Oracle进程失败时清理资源;检查点进程(CKPT)负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

系统改变号(System Change Number)是一个贯穿数据库全局的概念,它是由系统内部维护的序列号。当系统需要更新的时候自动增加,它是系统中维持数据一致性和顺序恢复的重要标志。查询语句不会使SCN增加,就算是同时发生的更新,数据库内部对应的SCN也是不同的。这样一来就保证了数据恢复时候的顺序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: