Oracle体系结构研究.docx
- 文档编号:30077797
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:11
- 大小:21.64KB
Oracle体系结构研究.docx
《Oracle体系结构研究.docx》由会员分享,可在线阅读,更多相关《Oracle体系结构研究.docx(11页珍藏版)》请在冰豆网上搜索。
Oracle体系结构研究
Oracle体系结构研究
摘要:
阐述了Oracle数据库的基本架构和Oracle数据库理论中的主要概念。
Oracle体系结构由存储结构、内存结构和进程结构组成,其中,存储结构由物理存储结构及逻辑存储结构组成;内存结构由SGA和PGA组成;进程结构由用户进程和Oracle进程组成。
关键词:
ORACLE体系结构;存储结构;内存结构;进程结构
1Oracle的存储结构
Oracle的存储结构分为物理存储结构和逻辑存储结构。
1.1物理存储结构
主要由数据文件、控制文件、联机日志文件及数据库实例构成。
Oracle数据库中有许多初始化参数,这些参数用于对整个数据库进行设置或调整,如设置数据库名、数据库块大小、控制文件的名称和位置、数据库实例数等信息。
Oracle把这些参数存放在一个文件中,这个文件就叫初始化参数文件。
启动数据库时,Oracle会读取参数文件中的值,并根据这些值对数据库实例(instance)进行设置。
具体说是Oracle先从初始化参数文件中获得控制文件的名称及位置,打开控制文件,然后再从控制文件中读取数据文件和联机日志文件的名称和位置,打开它们,因为表、索引等对象的数据就存放在数据文件中,从而就打开了数据库。
1.1.1控制文件
Oracle启动数据库时会访问控制文件,控制文件是在创建数据库的时候创建的,它是一个很小的二进制文件,记录了数据库的名称、创建数据库的时间、数据文件的名称和位置、联机日志文件的名称和位置及表空间等信息。
所以说一个数据库的控制文件是相当重要的,一旦被损坏,数据库将不能正常启动和运行。
所以DBA应该镜像控制文件,把每个镜像的控制文件分布到不同的物理磁盘上,发生灾难时既使其中一个控制文件被损坏,也不会使整个数据库限于瘫痪。
1.1.2数据文件
当用户在Oracle中创建数据库的时候,就创建了一个或多个数据文件,表和索引等对象的数据就物理地存放在数据文件中。
一个表的数据可能会存储在多个数据文件中,但一个数据文件只能属于一个数据库。
用户查询一个表时,如果所需数据不在内存中,Oracle会读取该表所在的数据文件,并把数据调入内存中,也就是说访问表实际上就是对数据文件进行读写操作。
创建数据文件时可以指定其初始大小,当其空间耗尽时,也可自动或手动扩展其大小。
1.1.3联机日志文件
当用户在内存中对数据库做了修改时(如插入、删除、修改),如果数据还没有来得及写入数据文件中就发生断电,用户的修改就会丢失。
为了防止这种情况的发生,Oracle运行过程中会在内存中产生日志条目,这些日志条目反应了用户所做的修改,并每隔一段时间把日志条目写到物理的联机日志文件中。
重启数据库时,Oracle会从联机日志文件中找回丢失的修改数据并重新把它写到数据文件中。
由此可见,联机日志文件主要用于对数据库实例(Instance)的恢复。
当用户提交一个事务或每隔3秒钟或日志缓冲区被填满1/3时,产生的日志信息就会被写到联机日志文件中。
1.2逻辑存储结构
Oracle的逻辑存储结构由数据块、区、段和表空间构成。
1.2.1表空间
一个数据库被分成一个个的逻辑单元,这些逻辑单元叫“表空间”。
表空间用于在逻辑上存放数据库对象如表、索引等。
一个数据库逻辑上由一个或多个表空间组成。
表空间又由一个或多个数据文件物理地支持着,表空间中的数据库对象(如表)的数据实际上是存储在数据文件中的。
表空间的大小是组成表空间的所有数据文件的大小之和。
但表和数据文件却不是一一对应的,一个表的数据可以存放在一个或多个数据文件中。
每个数据库用户都要有一个默认表空间,当用户创建对象(如表)时,如果没有指定这个对象放在哪个表空间中,则这个对象将被存放在默认表空间中。
1.2.2数据块
数据块简称块,是Oracle存取数据的最小单位。
Oracle数据存放在块中,一个块占用一定的磁盘空间。
这里的“块”是Oracle的数据块,而不是操作系统的“块”。
Oracle每次读写数据的时候都以块为单位,如果读写的数据不到一块,Oracle也会读写整个块。
Oracle块的大小一般是操作系统块大小(512bytes)的整数倍,如2k,4k。
块大小由初始化参数文件中的DB_BLOCK_SIZE参数指定。
1.2.3区
区是数据库中的一个逻辑存储单元,由连续的数据块组成。
特别强调的是区是一段连续的存储空间。
当段中的空间耗尽时,Oracle会分配一个新区给这个段。
段由一系列的区组成,也是存放数据的逻辑单元。
表由段组成,一个表由一个或多个段组成。
普通表由一个段组成,分区表由多个段组成。
创建表的时候实际上就创建了段,Oracle会给表的段分配一个初始区。
随着数据的插入,初始区被填满,Oracle会再分配一个新区给表的数据段,这个区叫做“递增区”。
如果递增区用完,Oracle还会分配另外的递增区。
1.2.4段
段由一系列的区组成,也是存放数据的逻辑单元。
表由段组成,一个表由一个或多个段组成。
普通表由一个段组成,分区表由多个段组成。
创建表的时候实际上就创建了段,Oracle会给表的段分配一个初始区。
随着数据的插入,初始区被填满,Oracle会再分配一个新区给表的数据段,这个区叫做“递增区”。
如果递增区用完,Oracle还会分配另外的递增区。
2内存结构
在Oracle中,“数据库”是指物理地存储在磁盘上的数据库文件。
而数据库的启动和运行,是需要一定的内存空间和后台进程的,我们把这些内存空间和后台进程称为Oracle数据库实例(Instance).也就是说一个数据库实例是由一块大的内存空间和一系列的后台进程构成。
对于第一次接触“实例”这个概念的朋友来说,容易把“实例”和“数据库”这两个概念混淆。
实例是“内存”和“后台进程”的总称,“数据库”是数据的物理存储。
一个数据库可以由一个或多个实例驱动,二者之间的关系是一对多的关系。
数据库实例所占用的内存空间分为两部分,一部分叫系统全局区(SGA),另一部分叫程序全局区(PGA)。
2.1系统全局区(SGA)
系统全局区是一组共享的内存结构,这块内存结构用于存放数据和数据库实例的控制信息。
多个用户可以同时连接到同一个实例(Instance),这些用户可以共享该实例的SGA中的数据,因此,系统全局区又叫“共享全局区”。
当启动一个实例时,Oracle会分配SGA给这个实例,关闭实例时它的SGA又被回收,每个数据库实例都有一个SGA。
SGA主要由以下几部分构成:
数据库高速缓冲区(DatabaseBufferCache)、重做日志缓冲区(RedoLogBuffer)、共享池(SharedPool)、Java池(JavaPool)、大池(LargePool)、流池(StreamsPool)。
SGA的每部分结构都是为了满足不同的需求。
(1)数据库高速缓冲区(DataBaseBufferCache)。
数据库高速缓冲区是SGA的重要组成部分,用于存放从数据文件中读取的数据或者存放用户对数据库所做的修改,所有连接到相同实例的用户都可以共享这些数据。
数据库高速缓冲区中的缓冲器被组织成两个列表:
一个是写列表(WriteList),一个是最近最少使用列表(LeastRecentlyUsedList,LRU)。
最近最少使用列表LRU存放三种缓冲器:
自由缓冲器(FreeBuffers)、正在被访问的缓冲器(PinnedBuffers)和脏缓冲器(DirtyBuffers)。
写列表存放那些被修改了,但还没有写到磁盘上的脏数据。
当用户查询数据时,Oracle首先在数据库高速缓冲区(DataBaseBufferCache)中的正在被访问的缓冲器(PinnedBuffers)中进行查找,如果找到,则把数据返回给用户;如果未找到,Oracle则从数据文件中读取所需数据到自由缓冲器(FreeBuffers)中,自由缓冲器就变成了PinnedBuffers,并把该缓冲器排放到最近最少使用列表(LRU)的末尾,然后把PinnedBuffers中的内容返回给用户。
当用户修改数据库时,直接修改的是PinnedBuffers中的内容,PinnedBuffers则变成了脏缓冲器(DirtyBuffers)。
当LRU中不再有自由缓冲器可用时,Oracle会把位于LRU头部(最近最少使用的)的脏缓冲器中的内容(用户的修改)移动到写列表中,而该脏缓冲器又变成了自由缓冲器,LRU中的缓冲器就是这样被周而复始地循环使用的。
写列表中的数据最终要被写入磁盘上的数据文件中。
(2)重做日志缓冲区(RedoLogBuffer)。
重做日志缓冲区是SGA的组成部分,它是一个循环使用的缓冲区,用于存放日志条目,日志条目可实现数据库实例的恢复。
当用户对数据库进行修改(insert,update,delete,create,alter,drop)等操作时,一旦发生断电等意外,用户所做的修改还没有来得及写入数据文件就丢失了。
为了防止这种情况的发生,在数据库运行过程中Oracle会把用户的修改以日志条目的形式记载在SGA的重做日志缓冲区中,并每隔3秒钟或用户提交一个事务时由日志写进程LGWR把日志条目写入磁盘上的联机日志文件。
也就是说Oracle为了以防万一会在数据库运行过程中对还没来得及写入数据文件的用户修改做一物理备份。
当数据库重新启动时,Oracle会从联机日志文件中读取反映用户修改的日志条目,读入日志缓冲区中,再根据日志缓冲区中的日志条目恢复用户先前对SGA中的数据库高速缓冲区所做的修改,最终把用户的修改写入数据文件,从而恢复数据库实例。
初始化参数LOG_BUFFER用于设置日志缓冲区的大小。
比较大的日志缓冲区能够减少联机日志文件的磁盘I/O。
如果一个系统中经常有大的、长时间运行的事务,应该增大LOG_BUFFER的值。
(3)共享池(SharedPool)。
共享池也是SGA的重要组成部分,用于存放SQL语句、PL/SQL程序代码、数据字典等信息。
共享池主要包含库缓冲区和数据字典缓冲区。
初始化参数SHARED_POOL_SIZE用于控制共享池的大小。
在默认情况下,32位的平台,SHARED_POOL_SIZE的值是8M,64位的平台,SHARED_POOL_SIZE的值是64M。
库缓冲区存放解析并执行过的SQL语句和PL/SQL程序代码。
当用户发送一条SQL语句或PL/SQL程序代码到数据库时,Oracle首先对这条语句进行语法解析,然后将解析结果(解析树和执行计划)保存到库缓冲区中。
如果不同的用户执行相同的SQL语句,他们可以共享这些解析结果,这会加快SQL语句的执行。
库缓冲区主要包含共享SQL区、私有SQL区、PL/SQL过程和包等。
共享SQL区可被所有的用户共享。
具体说SQL语句或PL/SQL代码的解析树和执行计划是存放在库缓冲区的共享SQL区中。
之所以称之为“共享”是因为如果另外一个用户执行相同的SQL语句,则这个用户可以直接使用共享SQL区中的解析树和执行计划,而不必对这条SQL语句重新进行解析。
这样可以提高SQL语句的执行效率。
SQL语句的一部分信息存放在共享SQL区中,另外一部分存放在私有SQL区中。
存放在私有SQL区中的这部分信息只能被执行这条SQL语句的用户独享,其他用户不能使用。
这部分信息包括SQL语句的绑定变量、环境和会话参数,还包括运行PL/SQL程序单元所需的局部变量、全局变量和包变量。
Oracle在执行SQL语句时经常要访问表、视图、存储过程和触发器等数据库对象,Oracle把这些对象的信息(如表的创建者,创建时间,所属表空间,用户访问权限等)存放在数据字典中。
数据字典是在创建数据库的时候由Oracle自动创建的,存储在磁盘上的系统表空间(SystemTablespace)中。
数据库对象的信息是以表和视图的形式存储在数据字典中的。
由于每次执行SQL语句都要访问磁盘上的数据字典,会大大降低数据库性能,所以Oracle把频繁访问的数据字典信息缓存到共享池的数据字典缓冲区中,然后根据其中的表、视图等对象的信息对SQL语句进行解析并执行的。
(4)Java池主要用于支持在数据库中运行Java代码。
(5)大池是Oracle可选的内存结构,数据库的备份和恢复,并行查询的时候会用到大池。
(6)流池也是可选的内存结构,引入流池的目的是加强对流的支持。
2.2程序全局区(PGA)
连接到数据库实例的用户程序请求数据库时,用户的SQL语句由Oracle的服务器进程负责解析并执行。
启动一个服务器进程的时候,Oracle会给这个进程分配一块内存区域,这块内存区域就是程序全局区。
程序全局区用于存放服务器进程的数据和控制信息。
每个服务器进程的程序全局区不能被其他进程共享,只能由这个服务器进程读写这块内存区域。
3进程管理
进程是操作系统的一种机制,它执行一系列的步骤,完成指定的任务(有些操作系统中叫作业或任务)。
进程和程序的区别是,进程是动态的,程序是静态的。
程序是一系列指令的集合,进程强调的是执行过程。
一个进程通常有自己私有的内存区。
进程分为两类:
用户进程和Oracle进程。
3.1用户进程
当用户运行应用程序或使用Oracle客户端(如SQL*PLUS)时,就创建了用户进程。
用户进程在访问数据库实例(简称实例)时,会建立一条通信路径,这条通信路径叫连接。
连接使用不同的通信机制,如果用户进程和实例在同一台机器上,则使用进程间的通信机制;如果用户进程和实例不在同一台机器上,则使用网络通信机制。
一个用户必须提供用户名和密码才能登录到数据库,用户成功登录数据库后就建立了一次会话。
会话是有生命周期的,会话的生命从用户登录开始,到退出数据库实例为止。
一个用户没有登录数据库时就是一个用户,一旦登录数据库以后就建立了一次会话。
一个用户可以创建多个会话。
如用100个客户端使用同一个用户名scott同时登录一个数据库实例,就创建了100个会话。
会话是Oracle数据库服务器对连接数据库的用户进行记录的一种手段。
管理员通过对会话进行管理,就可以掌握有哪些用户、在什么时间、以什么客户程序连接了数据库并执行了什么样的操作,在必要的时候(如密码泄露、恶意连接的用户等)管理员还可以随时中断会话,切断连接,保护数据库的安全。
3.2Oracle进程
Oracle进程运行在Oracle数据库服务器端,分为服务器进程和后台进程。
服务器进程用于处理连接到数据库实例的用户进程的请求,负责解析并执行SQL语句,如果用户需要的数据不在SGA中,服务器进程会把数据从磁盘上的数据文件中读取到SGA的数据库高速缓冲区中,并把结果返回给用户。
也就是说服务器进程是为用户进程服务的。
Oracle系统为了使性能最佳和协调多个用户,使用了一些附加进程,称为后台进程,后台进程是在实例启动时自动建立的。
一个Oracle实例可以有许多后台进程,但它们不一定一直或者同时存在,每个后台进程只是在需要的时候才存在。
Oracle的后台进程有:
数据库书写进程、日志书写进程、归档进程、系统监控进程、校验点进程、进程监控进程、恢复进程、作业队列进程、队列监控进程、其它后台进程。
启动实例时,Oracle会自动启动后台进程,下面阐述几个重要的后台进程。
3.2.1数据库书写进程(DBWR)
当Oracle发现SGA中的数据库高速缓冲区中没有自由缓冲器(FreeBuffers)时,Oracle会通知数据库书写进程利用最近最少使用机制把最近最少使用的脏缓冲器中的数据从写列表中写入磁盘,从而脏缓冲器又变成了自由缓冲器,可以接收从数据库中读取的数据了。
3.2.2日志书写进程(LGWR)
当用户输入SQL语句对SGA中的数据库高速缓冲区进行修改时,为了防止发生断电等意外修改还没有来得及写入数据文件就丢失了,服务器进程把与这个修改相关的信息以日志条目(RedoEntries)的形式复制到日志缓冲区中。
通常,日志书写进程(LGWR)会以最快的速度(如每隔3秒钟)把这些日志条目写到联机日志文件中,以便在日志缓冲区中预留出更多的空余空间,进而服务器进程又把新的日志条目写到日志缓冲区中。
日志文件用于日后的数据库实例的恢复。
每当用户提交一个事务或每隔3秒钟或日志缓冲区的1/3已被填满时,日志书写进程会把日志缓冲区中的日志条目写入联机日志文件:
3.2.3归档的概念
Oracle把写满的联机日志文件复制到一个或多个路径下,这个过程叫归档。
这样生成的文件叫归档日志文件(ArchivedRedoLog),存放归档日志文件的路径叫归档路径(或者归档目录)。
只有数据库运行在归档模式下才能进行归档。
归档过程一般由归档进程自动完成。
在创建数据库的时候,DBA可以指定数据库运行在归档模式。
联机日志文件实际上是由多个联机日志组构成,每组里有几个日志文件。
如果当前联机日志组被填满,日志书写进程(LGWR)会切换到下一组联机日志文件组,当下一组联机日志文件组被填满,LGWR又会切换,直到最后一组联机日志文件。
当最后一组联机日志被填满后,LGWR将切换到第一组联机日志文件。
所以这时候,如果数据库运行在归档模式,LGWR会等待归档进程(ARCn)把第一组联机日志文件的内容复制到归档日志文件中,然后才切换到第一组联机日志文件。
4结束语
在深入学习Oracle数据库之前,必须对Oracle数据库的体系结构有一个初步的了解。
Oracle数据库的体系结构分为存储结构、内存结构和进程结构。
存储结构分为物理存储结构和逻辑存储结构,物理存储结构主要是由控制文件、数据文件和联机日志文件构成;逻辑存储结构是由表空间、数据块、区、段构成。
启动了的数据库称为数据库实例,一个数据库实例需要一定的内存空间和后台进程支持,这块内存空间是由系统全局区SGA和程序全局区PGA构成。
系统全局区SGA主要又是由数据库高速缓冲区、重做日志缓冲区、共享池、Java池、大池和流池构成;程序全局区PGA是启动一个服务器进程所需的内存区域。
数据库的运行和维护是由一些进程完成的,这些进程包括用户进程和Oracle进程,Oracle进程又分为服务器进程和后台进程。
参考文献:
[1]赵振平.ORACLE数据库精讲与疑难解析[M].北京:
电子工业出版社,2008.
[2]朱辉生.大型数据库系统概论[M].北京:
高等教育出版社,2006.
[3]赵松涛.Oracle9i中文版数据库系统管理[M].北京:
人民邮电出版社,2003.
(责任编辑:
余晓)
TalkingAbouttheArchitectureofOracleSuperficially
Abstract:
ThisthesisillustratesthebasicframeworkofORACLEDatabase.YoumayfamiliarizeyourselfwiththemainconceptstobeusedinORACLEDatabasetheoriesthroughreadingthisthesis.ThearchitectureofORACLEconsistsofstoragestructures,memorystructuresandprocessstructures.Thestoragestructuresconsistsofphysicalstoragestructuresandlogicalstoragestructures;memorystructuresconsistsofSGAandPGA;theprocessstructuresconsistsofuserprocessandORACLEprocess.
KeyWords:
ArchitectureofOracle;StorageStructures;MemoryStructures;ProcessStructures
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 体系结构 研究
![提示](https://static.bdocx.com/images/bang_tan.gif)