Oracle数据库系统.ppt
第2章 Oracle 数据库系统,2.1 Oracle数据库系统结构2.2 Oracle内存结构2.3 Oracle进程2.4 Oracle数据库物理存储结构2.5 Oracle数据库逻辑存储结构2.6 Oracle 9i数据库简介,2.1 Oracle数据库系统结构,2.1.1 Oracle系统结构 2.1.2 分布式Oracle数据库,2.1.1 Oracle系统结构,2.1.2 分布式Oracle数据库,2.2 Oracle内存结构,2.2.1 系统全局区 2.2.2 程序全局区 2.2.3 排序区 2.3.4 软件代码区,2.2.1 系统全局区,1.数据库缓冲区(Database Buffer Cache)2.重做日志缓冲区(Redo Log Buffer)3.共享池(Shared Pool)4.大块内存池(Large pool),2.2.2 程序全局区,程序全局区PGA(Program Global Area,PGA),是单个Oracle进程使用的内存区域,不属于实例的内存结构。它含有单个进程工作时需要的数据和控制信息,PGA是非共享的,只有服务进程本身才能够访问它自己的PGA区。,2.2.3 排序区,排序区存在于请求排序的用户进程的内存中,由于排序需要内存空间,Oracle利用该内存排序数据,这部分空间称为排序区。该空间的大小为适应排序数据量的大小,可增长,但受初始化参数SORT_AREA_SIZER所限制。,2.2.4 软件代码区,软件代码区(Software Code Area)用于存储正在执行的或可以执行的程序代码。软件代码区是只读,可安装成共享或非共享。Oracle系统程序是共享的,多个Oracle用户可存取它,而不需要在内存有多个副本。用户程序可以共享也可以不共享。,2.3 Oracle进程,2.3.1 服务器进程 2.3.2 后台进程 2.3.3 用户进程,2.3.1 服务器进程,服务器进程处理与应用程序相连的用户进程的请求,它与用户进程相通讯,为相连的用户进程的Oracle请求服务。服务器进程处理用户进程的各种请求:解释、编译和执行用户进程发出的SQL语句,负责将需要处理的数据从数据库数据文件读入到SGA中的数据库缓冲区,并将SQL语句执行结果返回给客户端应用程序。服务器进程又分为专用服务器进程和共享服务器进程两类,每个专用服务器只能服务于一个指定的用户进程,而在多进程服务器配置下,每个共享服务器进程则能同时服务于多个用户进程。,2.3.2 后台进程,1.数据库写入进程DBWn(Database Writer)2.日志写入进程LGWR(Log Writer)3.系统监视进程SMON(System Monitor)4.进程监视进程PMON(Process Monitor)5.检查点进程CKPT(Checkpoint)6.数据库恢复进程RECO(Recover)7.日志存档进程ARCn(Archiver),2.3.3 用户进程,用户进程为运行用户应用程序或Oracle工具所建立的进程,它们向Oracle服务器发送所要执行的SQL语句。当用户运行一个应用程序时,系统就为它建立一个用户进程。用户进程执行的是一个应用程序或Oracle工具程序的代码,以完成用户所指定的任务。,2.4 Oracle数据库物理存储结构,2.4.1 数据文件 2.4.2 重做日志文件 2.4.3 控制文件 2.4.4 配置文件,2.4.1 数据文件,Oracle数据库模式对象中的所有数据均存储在数据文件中,每个Oracle数据库至少由一个数据文件组成。数据文件用来存储数据库中的全部数据,如数据库表中的数据和索引数据。通常为后缀名为.dbf格式的文件。每个数据文件有两个相关的文件号:绝对文件号和相对文件号。绝对文件号是数据文件在数据库中的唯一标识号,相对文件号是数据文件在表空间中的唯一标识号。,2.4.1 数据文件,数据文件可以用数据库和表空间创建语句或修改语句来创建或修改,在创建时可指定数据文件的初始大小,以及是否允许数据文件的大小随着数据库中数据量增加的需要而自动扩大。Oracle数据库中的永久和临时数据文件信息分别存储在DBA_DATA_FILES和DBA_TEMP_FILES数据字典中,检索这两个视图内容即可了解系统中所有的数据文件信息。,2.4.2 重做日志文件,重做日志文件用于记录数据库所做的全部变更(如增加、删除、修改),以便在系统发生故障时,用它对数据库进行恢复。名字通常为Log*.dbf格式。,2.4.2 重做日志文件,数据库有两种归档模式:ARCHIVELOG(归档日志)或 NOARCHIVELOG(非归档日志)模式。除了数据文件外,最重要的Oracle 9i数据库文件就是重做日志文件。虽然它与数据文件不同,但是彼此间却有密不可分的关系。简单的说,Oracle 9i 重做日志文件会负责记录数据库内任何数据处理情况。当数据异动时,所有异动记录会先保留在内存的重做记录缓冲区,并在适当时机由LGWR后台进程负责写入硬盘上重做日志文件中。如此一来,所有数据异动情况都会完整地保留下来。如果 Oracle 9i 数据库不小心遭遇毁损,Oracle 9i 将凭借重做日志文件内相关记录将数据复原至最完整的状态。,2.4.3 控制文件,Oracle数据库都有相应的控制文件,用于打开、存取数据库。它们是较小的二进制文件,其中记录了数据库的物理结构。名字通常为Ctr*.ctl格式。,2.4.3 控制文件,对于Oracle数据库来说,如果把数据文件比作一个仓库,那么重作日志文件相当于该仓库的货物进出记录账本,控制文件就是该仓库的管理中心。所以,每个Oracle均具有控制文件,它们记录:数据库名称 数据库的数据文件和联机重作日志文件的名称及位置 数据库创建时间 数据库的当前日志序列号 数据库检查点信息,2.4.4 配置文件,服务器参数文件(SPFILE)是在Oracle数据库服务器端的初始化参数文件。存储在一个服务器参数文件的初始化参数是永久的,它提供了由Oracle数据库服务器自我调节的一个基础。SPFILE文件是二进制文件,不能使用一个文本编辑器浏览或编辑。Oracle提供了浏览和查看相关参数的另外接口。,2.4.4 配置文件,初始化数据库参数文件记录数据库实例分配参数,它相当于Oracle实例引导文件,只有在它的引导下,Oracle实例才能正确创建。初始化参数文件包含以下主要内容:系统全局区相关的组态设定 其它各起始参数之名称与设定值 控制文件名称与存放路径 重做日志文件之相关设定,2.5 Oracle数据库逻辑存储结构,2.5.1 表空间(Tablespace)2.5.2 段(Segment)2.5.3 区间(Extent)2.5.4 数据块(Data Block),2.5.1 表空间(Tablespace),2.5.2 段(Segment),数据段:存储表数据,当用户建立表或聚集时,Oracle自动建立数据段;索引段:存储数据库索引数据,每个未分区索引有一个索引段,分区索引的每个分区均有一个索引段。当执行CREATE INDEX语句建立索引或索引分区时,Oracle自动创建索引段。,2.5.2 段(Segment),临时段:在执行查询、排序、创建索引等操作时,Oracle使用临时段保存SQL语句解释和执行过程中所产生的临时数据。回滚段:记录数据库中所有事务修改前的数据值,这些数据用于读一致性、回滚事务、恢复数据库等操作。,2.5.3 区间(Extent),区是由很多连续的数据块组成的数据库存储空间。缺省情况下,数据库会使用表空间中存储的存储参数来管理他们的区。主要的几个存储参数:INITIAL:段建立时分配的第一个区的大小(单位:字节)NEXT:段内分配的下一个增量区大小(单位:字节)MAXEXTENTS:分配给段的区总数。,2.5.3 区间(Extent),MINEXTENTS:建立段时分配的区的总数,也就是段的最小区数量。PCTINCREASE:为段分配的每个增量区超过上一个区的百分比。INITRANS:为初试数量的DML事务条目(并发访问数据块中的行)保留的预分配空间数量。NTKXTRANS:当多个事务同时访问同一数据块的行时,为数据块中每个DML事务的条目分配的空间。,2.5.4 数据块(Data Block),2.6 Oracle 9i数据库简介,2.6.1 Oracle 9i数据库概述 2.6.2 本书所涉及的样本数据库,2.6.1 Oracle 9i数据库概述,Oracle 9i是一种关系数据库管理系统(RDBMS),关系数据库是按照二维表结构方式组织的数据集合。数据库(Database)是一个数据容器,它包含了表空间(TABLESPACE)、表(TABLE)、约束条件(CONSTRAINT)、分区(PARTITION)、索引(INDEX)、簇(CLUSTER)、用户(USER)、方案(SCHEMA)、同义词、权限及角色(ROLE)、视图、簇、过程、函数、包等对象,并对其进行统一的管理。用户只有和一个确定的数据库连接,才能使用和管理数据库中的数据。,CHAR(size)、NCHAR(size)VARCHAR2(size)、VARCHAR(size)LONGNUMBER(m,n)DATEBOOLEANRAW(size)、LONG RAWBLOB、CLOB、NCLOB、BFILE,Oracle 9i的数据类型,2.6.2 本书所涉及的样本数据库,学生管理数据库(student)中所包含的数据表有:学生基本信息表(stud_info)教师基本信息表(teacher_info)学生成绩表(stud_grade)课程信息表(lesson_info),2.6.2 本书所涉及的样本数据库,课程安排表(teach_schedule)院系代码表(dept_code)专业代码表(specialty_code)教研室信息表(staffroom_info)课室信息表(classroom_info),数据库student中的数据表 之间的相互关系,