资源预览内容
第1页 / 共71页
第2页 / 共71页
第3页 / 共71页
第4页 / 共71页
第5页 / 共71页
第6页 / 共71页
第7页 / 共71页
第8页 / 共71页
第9页 / 共71页
第10页 / 共71页
亲,该文档总共71页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第 1 页 共 130 页ORACLE 9i 数据库基础培训数据库基础培训1Oracle9i 数据库体系结构数据库体系结构谈及 Oracle 数据库结构时,我们应该从两个角度来探讨:分别是数据库的“逻辑层面” 与“物理层面” 。简单的说, “逻辑层面”是由”数据库内部”观看其组成要素,包括:表空 间(tablespaces)、段(segments)、区块(extents)、数据块(data block)、以及数据库对象(Schema objects)。而“物理层面”则是从”操作系统”角度来看数据库的实体构成项目,包括:数据 文件(Data files)、重做日志文件(redo log files)、控制文件(control files)、口令文件(password)、 初始化参数文件(initialization parameter files)等。1.1逻辑结构数据块(data block) 许多初次接触数据库的读者最好奇的一点是:“数据究竟是如何存放在数据库呢?” 。 其实,Oracle9i 数据库有几种数据储存体,其中最小的储存单元就称为“数据块” (data block)。数据块大小是由初始化参数文件的 DB_BLOCK_SIZE 参数所决定,且在新建 Oracle9i 数据库之前就必须明确地定义。实际上,数据块大小与”操作系统的磁盘读写块” (O.S. blocks)也有关系,所以必须将 DB_BLOCK_SIZE 设定为 O.S. blocks 的整数倍。附带 一提:Oracle9i 在存取数据时是以 data block 为最小读取单位,而不是以 OS block 为单位。 从 Oracle9i 开始,数据库内可以设定多种数据块大小。换句话说,Oracle9i 数据库内分为 “标准数据块”与“非标准数据块” ;预设情况下 SYSTEM 资料表空间就是以“标准数据 块”建立而成。 区(extents) 除了数据块之外,Oracle9i 数据库还有所谓的“区”(extents)。虽然数据块是 Oracle9i 最小的资料读写单位,但值得注意的是:Oracle9i 在分配储存空间时,并不是以数据块为 单位,而是改采“区”的方式来分配空间。那么,使用“区”究竟有何好处呢?当执行 DDL 指令建立数据库对象时(例如 CREATE TABLE 指令),Oracle9i 会先分配出一连串的 数据块;直到这些数据块全部存满数据后,下次再分配一连串的数据块。这些连续的数据 块就统称为“区” 。 举例来说,假定您准备在 Oracle9i 数据库内存放 80 KB 的资料,Oracle9i 可以先分配 一个“区” ,其大小可为数据块(8 KB)的 5 倍;然后视实际需要再配置第二个“区”(大小 还是 40 KB)。如此一来,只要两次的空间配置动作就可以存放 80 KB 的资料了!试想, 如果 Oracle9i 每次只配置 8 KB 的“数据块”让存放资料,总共需要 10 次空间配置动作 才能放满 80 KB 的资料,比较没有效率。由此可见, “区”的确有其存在的必要性。 段(segments) 依照不同的数据处理性质,可能需要在表空间内划分出不同区域,以存放不同的数据; 我们将这些区域称之为“段”(segment)。例如,存放数据的称为“数据段” 、存放数据的称 为“索引段” 。而“段”其实就是由许多“区块”(extents)组合而成。除了上述两种“段” 以外,Oracle9i 数据库内还有另外两种段结构,分别是:“临时段”(temporary segment)与 “回退段”(rollbacksegment)。 表空间(tablespaces) 表空间是数据库中最大的逻辑单位。数据库可以划分为一个或多个逻辑单位,该逻辑 单位称为表空间。 下图说明了 Oracle9i 数据库内各逻辑组成之间的关系:1.2物理结构数据文件 每个 Oracle9i 数据库都包含为数不等的“数据文件” 。数据库内所有逻辑数据库对象 都是存放在数据文件内,如:数据表、索引.等。一但数据文件被建立后,系统就会在磁 盘上分配出适当空间给数据文件;但尚未存放任何用户数据。等到未来使用者将数据存入 数据库时,Oracle9i 才会在数据文件内分配出“段” ,以存放数据。而这些动作都是由 Oracle9i 自动完成的。当然了,如果数据文件剩余空间不足,您就必须调整数据文件大小; 或增加新的数据文件。所以在 Oracle9i 数据库内,一个数据库对象有可能横跨多个数据文件。如前所述,Oracle9i 数据库内可规划一个以上的“数据表空间” 。但如果由操作系统角 度来看, “数据表空间”其实是由一个或数个“数据文件”所组成。换句话说,数据库的所 有数据就是位于操作系统的各“数据文件”内。 所以: 一个“数据文件”只能对应的一个“数据表空间” 。 一个“数据表空间”可包含多个“数据文件” 。 重置日志文件 除了“数据文件”外,最重要的 Oracle9i 数据库实体文件就是“重做日志文件”(redo log files)。虽然它与“数据文件”不同,但是彼此间却有密不可分的关系!简单的说, Oracle9i 重日志文件会负责纪录数据库内除查询以外的任何数据增、删、修改情况。当数 据被改变时,有改动纪录会先保留在内存的重做记录缓冲区(redo buffer) ,并在适当时机 由 LGWR 后台处理程序负责写入至硬盘上重做日志文件。如此一来,所有数据改动情况 都会完整地保留下来。万一您的 Oracle9i 数据库不小心当机或是遭遇毁损,Oracle9i 将凭 借重做日志文件内相关纪录将数据复原至最完整的状态。 控制文件 每个 Oracle9i 数据库至少会有一个“控制文件” ,用以纪录与描述数据库的实体结构。 “控制文件”内记录以下重要信息:数据库名称与建立时间。数据文件与重做日志文件的 名称及其所在位置。交易纪录序列码(log sequence number)。每当打开数据库时,Oracle9i 会在数据库 mount 前读取控制文件内容,待所有数据库实体组成文件的信息都收集完毕, 数据库才会被 mount 和 open。为了避免控制文件毁损导致数据库系统启动不了,建议至少 配置两个控制文件,并存放在不同实体硬盘。 初始化参数文件 在启动数据库,Oracle 必须依照特定参数设定值来分配内存空间,并激活相关后台处 理程序。可以事先规划这些参数,并存放在操作系统内的某个文件。往后将利用这个文件 来启动数据库。这个文件就是所谓的“初始化参数文件” 。该文件可以设置数据库的近 250 个系统参数,包括内存中 SGA 大小、数据库大量的默认值、数据库的限制、定义数据库的 各种物理属性、指定数据库控制文件名称及路径等。参数文件是一个文本文件,允许重新 编辑修改。1.3实例的进程结构实例的进程结构1.3.1总体结构总体结构 Oracle 服务器是一种对象关系数据库管理系统(ORDBMS),它为信息管理 提供开放、综合、集成的方法。Oracle 服务器由一个Oracle例程(Instance) 和一个Oracle数据库组成。Oracle 例程(Instance)是后台进程和内存结构的组合。必须启动例程才能 访问数据库中的数据。每次启动例程都会分配系统全局区 (SGA) 并启动 Oracle.后台进程。 SGA 是用于存储数据库信息的内存区,该信息为数据库进程所共享。 后台进程代表调用进程执行功能。它们把为每个用户运行的多个 Oracle 程序所处理的功能统一起来。后台进程执行 I/O 并监控其它 Oracle 进程以增加并行性,从而使性能和可靠性更加优越。 用户进程是产生 SQL 语句的应用程序 服务器进程执行用户进程发送的 SQL 语句1.3.2ORACLE 数据库文件数据库文件 Oracle 数据库由三种文件类型组成 数据文件:包含数据库中的实际数据 重做日志:包含对数据库所做的更改记录这样万一出现故障可以启用数 据恢复一个数据库至少需要两个重做日志文件控制文件:包含维护和验证数据库完整性的必要信息例如控制文件用于 识别数据文件和重做日志文件。一个数据库至少需要一个控制文件。其它关键文件 参数文件:定义 Oracle 例程的特性,例如它包含调整 SGA 中一些内 存结大小的参数。 口令文件:认证哪些用户有权限启动和关闭 Oracle 例程。归档的重做日志文件:是重做日志文件的脱机副本这些副本可能对于从 介质失败中进行恢复很必要。1.3.3系统全局区(系统全局区(System Global Area) SGA 是用于存储数据库信息的内存区。它包含Oracle 服务器的数据和控制 信息。SGA 由几种内存结构组成:共享池(Shared Pool):用于存储最近执行的 SQL 语句和最近使用的数 据字典数据(procedure).数据库缓冲区高速缓存(Database buffer):用于存储最近使用的数据.重做日志缓冲区(Redo log buffer):用于跟踪服务器和后台进程对数据 库所做的更改. 在 SGA 中还有两种可选的内存结构 Java 池(Java pool):用于存储 Java 代码. 大型共享池(Large pool):用于存储并不与 SQL 语句处理直接相关的大 型内存结构例如在备份和复原操作过程中复制的数据块.1.3.4共享池组件共享池组件在分析阶段, 服务器进程使用 SGA 中称作共享池的区域来编译 SQL 语句. 共享池有两个基本组件库高速缓存(Library Cache)数据字典高速缓存(Dictionary Cache)库高速缓存在称为共享 SQL 区域(Shared SQL Area)的内存结构中存储最 近使用的SQL 语句信息. 共享 SQL 区域包含:SQL 语句文本分析树:语句的已编译版本执行计划:执行语句时要采取的步骤 如果重新执行 SQL 语句而且共享 SQL 区域已经包含语句的执行计划, 那 么服务器进程就不需要分析语句. 库高速缓存通过减少分析时间和内存要求来改善重新使用 SQL 语句的应用程序的性能. 如果 SQL 语句没有重新使用,那么 它最终会从库高速缓存中超龄(老化)释放.数据字典高速缓存是数据库中最近使用的定义的集合,它包括有关数据库 文件、表、索引、列、用户、权限以及其它数据库对象的信息。 在分析阶段,服务器进程在字典高速缓存中查找信息,以解析 SQL 语句中 指定的对象名并验证访问权限。1.3.51.3.5数据库数据库缓冲区高速缓缓冲区高速缓存存数据库缓冲区高速缓存的功能 处理查询时,服务器进程在数据库缓冲区高速缓存中查找任何所需的块。 如果未在数据库缓冲区高速缓存中找到这个块,服务器进程就从数据文件读取 这个块,并且在缓冲区高速缓存中放置一个副本。由于对同一个块的后续请求 可以在内存中找到这个块,因此这些请求可能不需要物理读取。Oracle 服务器 使用最近最少使用算法来释放近期未被访问的缓冲区,以便在缓冲区高速缓存 中为新块腾出空间。1.3.61.3.6程序全局区程序全局区程序全局区或进程全局区 (PGA) 是一个内存区域,它包含单个服务器进程 或单个后台进程的数据和控制信息。与几个进程共享的 SGA 正相反,PGA 是只 被一个进程使用的区域。在专用服务器配置中,服务器的 PGA 包括下面的组件:排序区:用于处理 SQL 语句时可能需要的任何排序会话信息:包括用于会话的用户权限和性能统计游标状态:标明处理会话当前使用的 SQL 语句中的阶段堆栈空间:包含其它会话变量1.3.7重做日志缓冲区重做日志缓冲区服务器进程在重做日志缓冲区中记录对数据文件的大部分更改,这个缓冲区是SGA 的一部分。重做日志缓冲区有下面的特点:它记录被更改的块、更改位置、以及重做条目中的新值。重做条目不区 分被更改块的类型;它只记录块中哪些字节发生了更
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号