《Oracle数据库系统结构.ppt》由会员分享,可在线阅读,更多相关《Oracle数据库系统结构.ppt(57页珍藏版)》请在金锄头文库上搜索。
1、第3章 Oracle数据库系统结构主要内容Oracle数据库系统结构概述Oracle数据库存储结构Oracle数据库内存结构Oracle数据库后台进程3.1 Oracle数据库系统结构概述Oracle数据库的存储结构(Storage Structure)分为物理存储结构和逻辑存储结构两种,分别描述了在操作系统中和数据库系统内部数据的组织与管理方式。Oracle数据库的软件结构,即Oracle实例(Instance),包括内存结构与后台进程结构两个部分。3.2 Oracle数据库存储结构数据库存储结构存储结构概述物理存储结构概述逻辑存储结构概述3.2.1存储结构概述一个数据库在物理上包含多个数据
2、文件,在逻辑上包含多个表空间。一个表空间包含一个或多个数据文件,一个数据文件只能从属于某个表空间。数据库的逻辑块由一个或多个操作系统块构成。一个逻辑区只能从属于某一个数据文件,而一个数据文件可包含一个或多个逻辑区。3.2.2 物理存储结构概述数据文件控制文件重做日志文件归档重做日志文件初始化参数文件跟踪文件告警文件数据文件数据文件是数据库中所有数据的实际存储空间,所有数据文件大小的和构成了数据库的大小。根据数据信息类型不同,数据文件分为永久性数据文件和临时数据文件两种。控制文件控制文件是记录数据库结构信息的重要的二进制文件,由Oracle系统进行读写操作,DBA不能直接操作控制文件。数据库启动
3、时,根据初始化参数文件中的CONTROL_FILES参数找到控制文件,然后根据控制文件中的信息,进行数据库数据文件和重做日志文件的加载,最后打开数据库。一个数据库至少需要一个控制文件,如果控制文件损坏将导致数据库无法启动。重做日志文件重做日志文件是以重做记录的形式记录、保存用户对数据库所进行的变更操作,是数据库中最重要的物理文件。利用重做日志文件可以进行事务的重做(REDO)或回退(UNDO),是数据库实例恢复的基础。归档重做日志文件归档重做日志文件是历史联机重做日志文件的集合,是联机重做日志文件被覆盖之前备份的副本。如果数据库工作在归档模式,数据库归档进程会自动将写满的重做日志文件在覆盖之前
4、复制到指定的位置。归档重做日志文件是数据库出现介质故障后实现数据库完全恢复的必要条件初始化参数文件初始化参数文件是数据库启动过程所必需的文件,记录了数据库显式参数的设置。数据库启动的第一步就是根据初始化参数文件中的设置,创建并启动实例,即分配内存空间、启动后台进程。跟踪文件跟踪文件是数据库中重要的诊断文件跟踪文件中包含数据库系统运行过程中所发生的重大事件的有关信息,可以为数据库运行故障的解决提供重要信息。告警文件告警文件也是数据库中重要的诊断文件,记录数据库在启动、关闭和运行期间后台进程的活动情况。在数据库出现故障时,应首先查看该文件,但文件中的信息与任何错误状态没有必然的联系。3.2.3逻辑
5、存储结构的构成与关系Oracle数据块区段表空间Oracle数据库的逻辑存储结构分为Oracle数据块(Oracle Data Block)、区(Extent)、段(Segment)和表空间(Table space)。Oracle数据块数据库中最小的逻辑存储单元。在Oracle 11g数据库中,数据块分为标准块和非标准块两种。Oracle数据库的默认数据缓冲区就是由标准数据块构成,由数据库初始化参数DB_BLOCK_SIZE设置。区区是由一系列连续的数据块构成的逻辑存储单元,是存储空间分配的最小单位。当创建一个数据库对象时,Oracle为对象分配若干个区,以构成一个段来为对象提供初始的存储空间
6、。当段中已分配的区都写满后,Oracle会为段分配一个新区,以容纳更多的数据。段段是由一个或多个连续或不连续的区组成的逻辑存储单元。段分类表段索引段临时段回退段 利用回退段中保存的回退信息,可以实现事务回滚数据库恢复数据的读一致性闪回查询表空间表空间是Oracle数据库最大的逻辑存储单元,数据库的大小从逻辑上看就是由表空间决定表空间与数据库文件直接关联,一个表空间包含一个或多个数据文件,一个数据文件只能从属于某一个表空间,数据库对象就是存储在表空间对应的一个或多个数据文件中表空间分类:系统表空间非系统表空间撤销表空间临时表空间用户表空间3.3 Oracle数据库内存结构数据库内存结构Oracl
7、e内存结构概述SGAPGA3.3.1Oracle内存结构概述用户的所有操作都在内存中进行,最后由数据库后台进程将操作结果写入各种物理文件中永久性保存。内存结构类型:系统全局区(System Global Area,SGA)程序全局区(Program Global Area,PGA)。3.3.2SGASGA是由Oracle分配的共享内存结构,包含一个数据库实例的数据和控制信息。SGA数据供所有的服务器进程和后台进程共享,所以SGA又称为共享全局区(Shared Global Area)。SGA构成数据高速缓冲区(Database Buffer Cache)共享池(Shared Pool)重做日志
8、缓冲区(Redo Log Cache)大型池(Large Pool)Java池(Java Pool)流池(Streams Pool)其它结构(如固定SGA、锁管理等)数据高速缓冲区功能存储从数据文件中检索出来的数据拷贝。应用程序要访问的数据必须从磁盘的数据文件读到数据缓冲区中处理。在数据缓冲区中被修改后的数据由数据写入进程写到硬盘的数据文件中永久保存。提高获取和更新数据的性能。 数据高速缓冲区的工作过程 缓冲块的类型脏缓存块(Dirty Buffers):脏缓存块中保存的是已经被修改过的数据。空闲缓存块(Free Buffers):空闲缓存块中不包含任何数据,它们等待后台进程或服务器进程向其中
9、写入数据。命中缓存块(Pinned Buffers):命中缓存块是那些正被使用的数据块,同时还有很多会话等待修改或访问的数据块。干净缓存块(Clean Buffers):干净缓存块是指那些当前没有被使用,即将被换出内存的缓存块。 缓存块的管理 脏缓存块列表:包含那些已经被修改但还没有写入数据文件的脏缓存块。LRU列表(Least Recently Used):包含所有的空闲缓存块、命中缓存块和那些还没有来得及移入到脏缓存块列表中的脏缓存块。在该列表中,最近被访问的缓存块被移动到列表的头部,而其他缓存块向列表尾部移动,最近最少被访问的缓存块最先被移出LRU列表,从而保证最频繁使用的缓存块始终保存
10、在内存中。数据高速缓冲区大小数据高速缓冲区大小 数据高速缓冲区越大,用户需要的数据在内存中的可能性就越大,即缓存命中率越高,从而减少了Oracle访问硬盘数据的次数,提高了数据库系统执行的效率。然而,如果数据高速缓冲区的值太大,Oracle就不得不在内存中寻找更多的块来定位所需要的数据,反而降低了系统性能。显然需要确定一个合理的数据高速缓冲区大小。 DB_CACHE_SIZE(标准块)重做日志缓冲区功能重做日志缓冲区用于缓存用户对数据库进行修改操作时生成的重做记录。 为了提高工作效率,重做记录并不是直接写入重做日志文件中,而是首先被服务器进程写入重做日志缓冲区中,在一定条件下,再由日志写入进程
11、(LGWR)把重做日志缓冲区的内容写入重做日志文件中做永久性保存。在归档模式下,当重做日志切换时,由归档进程(ARCH)将重做日志文件的内容写入归档文件中 重做日志缓冲区的工作过程 重做日志缓冲区的大小LOG_BUFFER较大的重做日志缓冲区,可以减少对重做日志文件写的次数,适合长时间运行的、产生大量重做记录的事务。共享池功能共享池用于缓存最近执行过的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句、PL/SQL程序进行语法分析、编译、执行的区域。组成库缓存库缓存用于缓存已经解释并执行过的SQL语句和PL/SQL程序代码,以提高SQL或PL/SQL程序的执行效率。包括SQL工作区和P
12、L/SQL工作区 数据字典缓存区数据字典缓存区保存最常用的数据字典信息共享池大小 SHARED_POOL_SIZE 合适的共享池大小,可使编译过的程序代码长驻内存,大大降低重复执行相同的SQL语句、PL/SQL程序的系统开销,从而提高数据库的性能。 大型池 功能大型池是一个可选的内存配置项,主要为Oracle多线程服务器、服务器I/O进程、数据库备份与恢复操作、执行具有大量排序操作的SQL语句、执行并行化的数据库操作等需要大量缓存的操作提供内存空间。如果没有在SGA区中创建大型池,上述操作所需要的缓存空间将在共享池或PGA中分配,因而影响共享池或PGA的使用效率。大型池大小LARGE_POOL
13、_SIZEJava池 功能Java提供对Java程序设计的支持,用于存储Java代码、Java语句的语法分析表、Java语句的执行方案和进行Java程序开发。Java池大小JAVA_POOL_SIZE通常不小于20M,以便安装Java虚拟机 流池 功能流池是一个可选的内存配置项,用于对流的支持。流池大小STREAMS_POOL_SIZE 3.3.3PGAPGA是一个私有的内存区,不能共享,每个服务器进程只能访问自己的PGA,因此PGA又称为私有全局区(Private Global Area)。系统同时为每个后台进程分配私有的PGA区。所有服务器进程PGA与所有后台进程PGA大小的和,即为实例的
14、PGA的大小。PGA随着服务器进程与后台进程的启动而分配,随着服务器进程和后台进程的终止而被释放。PGA构成:排序区(Sort Area):存放排序操作所产生的临时数据。游标信息区(Cursor Information):存放执行游标操作时所产生的数据。会话信息区(Session Information):保存用户会话所具有的权限、角色、性能统计信息。堆栈区(Stack Space):用于保存会话过程中的绑定变量、会话变量等信息。3.4 Oracle数据库数据库后台后台进程进程Oracle进程概述Oracle服务器进程Oracle后台进程 3.4.1 Oracle进程概述进程的概念进程是操作系
15、统中一个独立的可以调度的活动,用于完成指定的任务。进程与程序的区别在于:进程是动态的概念,即动态创建,完成任务后立即消亡;而程序是一个静态实体。进程强调执行过程,而程序仅仅是指令的有序集合。进程的类型用户进程服务器进程后台进程 3.4.2Oracle后台进程后台进程DBWR 数据库写入进程LGWR 日志写入进程CKPT 检查点进程SMON 系统监控进程PMON 进程监控进程ARCH 归档进程恢复进程(RECO)锁进程(LCKn)度进程(Dnnn)等DBWR(数据库写入进程)Database把数据高速缓冲区中已经被修改过的数据(脏缓存块)成批写入数据文件中永久保存,同时使数据高速缓冲区有更多的空
16、闲缓存块,保证服务器进程将所需要的数据从数据文件中读取到数据高速缓冲区中,提高缓存命中率。启动DBWR进程执行INSERT、UPDATE等操作时 ,没有足够的空闲块当检查点发生时,将启动DBWR进程 当数据缓存的LRU列表的长度达到初始化 DB_BLOCK_WRITE_BATCH指定值的一半时 若发生超时(大约3秒未被启动) LGWR(日志写入进程)Database日志写入进程负责把重做日志缓冲区的重做记录写入重做日志文件中永久保存。启动LGWR进程用户通过COMMIT语句提交当前事务重做日志缓存被写满三分之一DBWR进程开始将脏缓存块写入数据文件每隔3秒,即发生一次超时,将启动LGWR CK
17、PT(检查点进程)检查点概念检查点是一个事件,当该事件发生时(每隔一段时间发生),DBWR进程把数据高速缓冲区中脏缓存块写入数据文件中,同时Oracle将对数据库控制文件和数据文件的头部的同步序号进行更新,以记录下当前的数据库结构和状态,保证数据的同步CKPT进程的作用更新控制文件与数据文件的头部,使其同步触发DBWR进程,将脏缓存块写入数据文件SMON(系统监控进程)Database实例恢复执行前滚(ROLL FORWARD),将重做日志信息已经写入到重做日志文件中但还数据还没有写入到数据文件中的已提交的数据写入到数据文件。在前滚完成后立即打开数据库。此时用户可以连接数据库,但此时数据文件中
18、可能存在一些没有提交的数据需要回滚。回滚没有提交的事务回收不再使用的临时空间。将各个表空间的空闲碎片合并(表空间的存储参数PCTINCREASE不为0时)PMON(进程监控进程)负责恢复失败的用户进程或服务器进程,并且释放进程所占用的资源。清除非正常中断的用户进程留下的孤儿会话,回退未提交的事务,释放会话所占用的锁、SGA、PGA等资源。监控调度进程和服务器进程的状态,如果它们失败,则尝试重新启动它们,并释放它们所占用的各种资源。ARCH(归档进程)功能归档进程负责在日志切换后将已经写满的重做日志文件复制到归档目标中,防止写满的重做日志文件被覆盖RECO(恢复进程)功能RECO进程负责在分布式
19、数据库环境中自动解决分布式事务的故障。一个节点的RECO自动解决所有的悬而未决的事务。当一个数据库服务器的RECO后台进程试图建立同一远程服务器的通信,如果该远程服务器不可用或者网络连接不能建立时,RECO自动地在一个时间间隔之后再次连接。 LCKn(锁进程)功能LCKn进程用于Oracle并行服务器环境中。在数据库中最多可以启动10个LCKn进程,主要用于实例间的封锁。Dnnn(调度进程)功能Dnnn进程是多线程服务器(Multithreaded Server,MTS)的组成部分,以后台进程的形式运行。调度进程接受用户进程请求,将它们放入请求队列中,然后为请求队列中的用户进程分配一个服务器进程。最后,从响应队列返回数据给用户进程 小结Oracle数据库系统结构存储结构与实例Oracle数据库存储结构物理存储结构逻辑存储结构Oracle数据库内存结构Oracle数据库进程