Oracle 10g(一) 体系结构
周甫(zoofchow@hotmail.com) 课程介绍 本课程主要讲授Oracle 10g体系结构 适用于数据库管理员(DBA) 面向的学员是对SQL有基本了解的应用开发工程师 Oracle 9i同样适用 全部课程时间大约是270分钟 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 概 要 DBA的职责 Oracle体系结构由内存结构、进程结构、存储结构组成 内存结构由SGA、PGA组成 存储结构由逻辑存储、物理存储组成 进程结构由用户进程和Oracle进程组成. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 什么是DBA? 数据库管理员是一个或一组全面负责管理和控制数据库系统的人员。 简称:DBA(Data Base Administrator) 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) DBA的主要职责 了解ORACLE数据库的体系结构 负责数据库管理系统的安装和升级 启动和关闭数据库 管理和监控数据库用户 管理数据库特权 管理存储空间 建立数据库 后备和恢复数据库 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) DBA与理论知识 作为一名合格的DBA,必须深入地掌握Oracle 10g数据库的体系结构.在理论知识的指导下,才会使许多难以理解和掌握的操作变得容易. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) Oracle工作原理 客户 服务器 服务器进程 (PGA区) 用户进程 (SQL语句) Oracle server 数据库系统处理过程示意 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) Oracle工作原理 客户 服务器 服务器进程 (PGA区) 用户进程 (SQL语句) Oracle server 处理过程可以简单的描述为: 用户在其机器上运行基于Oracle的应用程序(如:SQL*PLUS、PL/SQL Developer等),即启动用户进程. 客户机、服务器之间建立连接(Connect). 服务器为用户建立会话(Session),并为该会话建立一个PGA(Program Global Area,程序全局区)以存储与该会话相关的信息.在同一个连接中,不同的用户有不同的会话. 启动服务进程,由该服务进程负责执行该会话的各项任务. 用户进程发送SQL语句(select、update、commit….) 服务器进程解析、编译、执行SQL语句,然后将结果写入数据库并返回结果给用户进程。 用户进程接收返回的SQL执行结果。 在应用程序中显示SQL执行结果. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 处理查询 解析 Statement Handle 执行 SELECT * FROM emp ORDER BY ename; Handle 提取 OK OK Results 用户进程 服务器进程 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 总体结构 总体结构的三大部分 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 总体结构 其中: 内存结构:包括SGA和PGA.使用内存最多的是SGA,同时也是影响数据库性能的最大参数. 进程结构:包括前台进程、后台进程.前台进程是指服务进程和用户进程.前台进程是根据实际需要而运行的,并在需要结束后立刻结束。后台进程是指在Oracle数据库启动后,自动启动的几个操作系统进程. 存储结构:包括控制文件、数据结构、日志文件等操作系统文件. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 存储结构 Oracle数据库的存储结构分为逻辑存储结构和物理存储结构,这两种存储结构既相互独立又相互联系. 数据文件 日志文件 控制文件 参数文件 物理结构 数 据 库 结 构 表空间 段 范围 数据库块 逻辑结构 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 逻辑存储结构 逻辑存储结构主要描述Oracle数据库的内部存储结构,即从技术概念上描述在Oracle数据库种如何组织、管理数据. 因此,逻辑存储结构是和操作系统平台无关的,是由Oracle数据库创建和管理的. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 物理存储结构 物理存储结构主要描述Oracle数据库的外部存储结构,即在操作系统种如何组织、管理数据. 因此,物理存储结构是和操作系统平台有关的. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) DBA注意 DBA必须对这两种存储结构有清晰的理解,并且要清楚在一个具体数据库应用系统中,这两种存储结构的具体对应关系,否则就不能进行正常的管理操作、数据库备份与恢复、性能优化等。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 存储结构 从物理上看,数据库由控制文件、数据文件、重做日志文件等操作系统文件组成; 从逻辑上来看,数据库是由系统表空间、用户表空间等组成。 表空间是最大的逻辑单位,块是最小的逻辑单位。 逻辑存储结构中的块最后对应到操作系统中的块. 物理存储结构与逻辑存储结构之间的关系 周甫(zoofchow@hotmail.com)
Oracle 10g(一) 体系结构 1.1 逻辑结构
周甫(zoofchow@hotmail.com) Oralce的逻辑结构组成 Oracle的逻辑结构是由一个或多个表空间组成。 一个表空间(tablespace)由一组段组成 一个段(segment)由一组区组成 一个区(extent)由一批数据库块组成 一个数据库块(block)对应一个或多个物理块 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 逻辑结构示意图 Tablespace Database Blocks Extent 84K Segment 112K Database DataFile 表空间 段 区 块 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据库块(Block) 数据库块(Database Block)是数据库使用的I/O最小单元,又称逻辑块或ORACLE块。 一个数据库块对应一个或多个物理块,块的大小由参数DB_BLOCK_SIZE确定。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据库块(Block) 块的大小是操作系统块大小的整数倍. 以Win2K为例,操作系统块(OS block)的大小为4kb,所以Oracle Block的大小可以是4kb,8kb,16kb等等。 如果块的大小为4kb,某表每行的数据是100 bytes.,如果某查询语句只返回1行数据,那么,在将数据读入到数据高速缓存时,读取的数据量时4kb而不是100 bytes. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据块的结构 标题:包括通用的块信息,如块地址/段类型等,最佳大小为85-100bytes。 表目录:存储聚集中表的信息,这些信息用于聚集段。 行目录:包括这块中的有效行信息,允许使用每行开头的2bytes。 自由空间:这块中能插入或修改的一组空间。 行数据:存储表或索引的数据。 周甫(zoofchow@hotmail.com)
Command and Variable Header 数据块的结构 Command and Variable Header Table Directory Row Directory Free Space ROW DATA 数据库块的结构格式 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 控制块的几个参数 pctfree 20%左右 它们是互相消涨的 pctused 40%左右 Inittrans 在单一块中最初活动的交易事务数 Maxtrans 在单一块中最大交易事务数 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) PCTUSED PCTUSED(占用百分比) 用于行的INSERT的操作,当块的百分比小于PCTUSED时,可通过行DELETE或UPDATE来减少列存储。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) PCTFREE PCTFREE(自由百分比) 用于行的UPDATE操作,在遇到PCTFREE后,这块被填满且不能进行INSERT操作。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据块自由空间的结构 Free Space PCTFREE = 20% PCTFREE = 20% PCTUSED = 40% PCTUSED = 40% 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 区(extent) 区(Extent)是数据库存储空间分配的逻辑单位,一个区由一组数据库块组成,区是由段分配的,分配的第一个区称初始区,以后分配的区称增量区。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 决定extent的参数 initial 最初分配的空间数(缺省为10k,5 个数据块) next 下一步分配的空间数 maxextents 最大分配的extent数 minextents 最小分配的extnet数,所有重 做日志回滚段的存储结构,必 须成对地分配extent pctincrease 增长率,指数级增长, optimal 尽量设小,或为0(缺省为空, 仅用于回滚段) freelist pctincrease n ( ) 1+ 100 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 段(segment) 段(Segment)是表空间中一个指定类型的逻辑存储结构,它由一个或多个区组成,段将占用并增长存储空间。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 段的分类 临时段 (Temporary Segment) 存储表排序操作 期间建立的临时 表的数据 引导段 (Bootstrap Segment) 存储数据字典 表的定义 回滚段 (Rollback Segment) 存储修改之前 的位置和值 索引段 (Index Segment) 存储表上最佳 查询的所有索 引数据 数据(表)段 (Data Segment) 存储表中 的所有数据 段的分类 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 表空间(tablespace) 表空间是最大的逻辑单位,对应一个或多个数据文件,表空间的大小是它所对应的数据文件大小的总和。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 表空间与数据库之间的关系 数据库、表空间、数据文件、方案对象(schema object)之间的关系 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) Oracle 10g创建的表空间 Oracle 10g自动创建的表空间有: Example(实例表空间) Sysaux(辅助系统表空间) System(系统表空间) Temp(临时表空间) Undotbs(重做表空间) Users(用户的表空间) 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) SYSTEM(系统)表空间 System : 系统表空间,存放关于表空间的名称、控制文件、数据文件等管理信息,是最重要的表空间. 它属于Sys、System两个schema(方案),仅被这两个或其他具有足够权限的用户使用。 但是均不可删除或者重命名System表空间. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 其他表空间 Temp: 临时表空间存放临时表和临时数据,用于排序。 Users: 用户表空间,永久存放用户对象和私有信息,也被成为数据表空间。 Sysaux:辅助系统表空间,用于减少系统负荷,提高系统的作业效率. 一般地:系统用户使用system表空间,非系统用户使用Users表空间 周甫(zoofchow@hotmail.com)
Oracle 10g(一) 体系结构 1.2 物理结构
周甫(zoofchow@hotmail.com) Oracle数据库物理结构 数据文件 日志文件 控制文件 参数文件 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据文件(Data File) 数据文件(Data File)是物理存储Oracle数据库数据的文件。其特点如下: 每一个数据文件只与一个数据库相联系。 数据文件一旦被建立则不能修改其大小。 一个表空间可包含一个或多个数据文件。 一个数据文件只能属于一个表空间. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 重做日志文件(Redo File) 重做日志文件(Redo Log File)记录所有对数据库数据的修改,以备恢复数据时使用。其特点如下: 每一个数据库至少包含两个日志文件组。 日志文件组以循环方式进行写操作。 每一个日志文件成员对应一个物理文件。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 日志开关(Log Switch) 日志开关(Log Switch)是为实现日志文件组的循环使用而设置的。出现日志开关的情况如下: 当一个日志文件组被填满时 关闭数据库时 DBA手动转移日志开关 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 日志文件写操作 Group 1 Group 2 Log File 1 Log File 2 Member 2.1 Member 1.1 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 镜像日志文件 镜像日志文件是为防止日志文件的丢失,在不同磁盘上同时维护两个或多个联机日志文件的副本。 其特点如下: 每个日志文件组至少包含两个日志文件成员。 每组的成员数目相同。 同组的所有成员同时被修改。 同组的成员大小相同,不同组的成员大小可不同. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 镜像日志文件操作 Group 1 Group 2 Log File 1 Log File 2 Member 2.1 Member 1.1 Log File 3 Log File 4 Member 2.2 Member 1.2 Disk 1 Disk 2 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 控制文件 控制文件(Control File)是一个较小的二进制文件,用于描述数据库结构。 描述信息如下: 数据库建立的日期。 数据库名。 数据库中所有数据文件和日志文件的文件名及路径。 恢复数据库时所需的同步信息。 要点注意: 在打开和存取数据库时都要访问该文件。 镜像控制文件。 记录控制文件名及路径的参数为:CONTROL_FILES 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 参数文件 参数文件(Parameter File)是一个文本文件,可直接使用操作系统下的文本编辑器对其内容进行修改。该文件只在建立数据库或启动实例时才被访问,在修改该文件之前必须关闭实例。 初始参数文件:init.ora 生成参数文件:initSID.ora config.ora 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 参数文件的作用 参数文件的作用: 确定存储结构的大小。 设置数据库的全部缺省值。 设置数据库的范围。 设置数据库的各种物理属性。 优化数据库性能。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 参数文件的数据类型 参数文件中参数的数据类型: 整型 例:DB_BLOCK_SIZE = 2048 字符型 例:DB_NAME = ‘ora9’ 逻辑型 例:CHECKPOINT_PROCESS = true 周甫(zoofchow@hotmail.com)
Oracle 10g(一) 体系结构 1.3 软件结构
周甫(zoofchow@hotmail.com) 例程(instance) Oracle数据库结构又称为例程结构. 数据库启动时: Oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台,即:创建一个例程(instance); 然后由该例程装载(mount)、打开(open)数据库; 最后由这个例程来访问和控制数据库的各种物理结构 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 例程(instance) 如果把Oracle数据库比作一部汽车,instance相当于汽车的发动机一样,启动oracle数据库前提应先启动instance. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 例程(instance) 当用户连接到数据库并使用数据库时,实际上是连接到该数据库的例程,通过例程来连接、使用数据库。 所以例程是用户和数据库之间的中间层。 例程与数据库的区别: 数据库指的是存储数据的物理结构,总是实际存在的; 例程则是由内存结构和一系列进程组成,可以启动和关闭。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) SID(系统标识符号) 一台计算机上可以创建多个Oracle数据库,一个数据库上可以有多个例程。 为了使例程间不混淆,每个例程都称为:SID(SystemIDentify)加以区分。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) Oracle Instance的组成 实例( INSTANCE ) 是存取和控制数据库的软件机制,它由系统全局区(System Global Area,简称SGA)和后台进程组成。 后台进程 实例 SGA 共享池 数据 高速缓存 日志 高速缓存 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 软件结构 内存结构 进程结构 内存结构和进程结构共同组成了软件结构 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 内存结构 内存结构是Oracle数据库体系中最为重要的一部分,内存也是影响数据库性能的第一因素. 按照内存的使用方法的不同,Oracle数据库的内存又可以分为SGA(Syste Global Area)和PGA(Program Global Area). 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 系统全局区(SGA) SGA是ORACLE系统为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。 每个例程都只有一个SGA. 它是不同用户进程与服务进程进行通信的中心,数据库的各种操作主要在SGA中进行,所以称其为系统全局区. 创建例程时,Oracle为SGA分配内存; 终止例程时,释放SGA所占用的内存. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) DBA注意 DBA必须对SGA的组成和原理有所了解. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 系统全局区(SGA) 系统全局区由以下几个部分组成: 周甫(zoofchow@hotmail.com)
数据高速缓存(Database Buffer Cache) 保存最近从数据文件中读取的数据块,其中的数据被所有用户共享. 两个参数影响DBC: DB_BLOCK_SIZE 缓冲区数据块大小 DB_BLOCK_BUFFERS 缓冲区数据块个数 周甫(zoofchow@hotmail.com)
数据高速缓存(Database Buffer Cache) 初次访问数据时,Oracle将读取磁盘上的数据文件,将数据放入数据高速缓存,再处理数据; 如果数据已经位于数据高速缓存中时,Oracle直接操作数据。 数据缓冲区 数据文件 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据高速缓存(DBC) DBC的缓存块分为三类: 脏缓存块 存放已经被修改过的缓存块. 当SQL修改某个缓存块中的数据,则这个缓存块被标记为脏缓存块 空闲缓存块 等待写入数据的空闲缓存块. 命中缓存块 最近正在被访问的缓存块. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 管理缓存块的列表 Oracle通过2个列表来管理上述缓存块: 脏列表(DIRTY) 包括被修改过但尚未写到数据文件的缓冲块。 LRU(Least Recently Used)列表 包括空闲缓冲块、命中缓存块,以及还没有移到脏列表的缓冲块。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据高速缓存工作原理 数据库写进程 读数据入DBC之前,先在LRU中搜索空闲缓存块;在搜索过程中如果发现脏缓存块,则将其移入DIRTY; 找到足够的空闲块,将所有数据读入; 3,4.如果空闲块不足,则暂停搜索,Oralce立刻启动DBWR进程,将DIRTY中的脏缓存块数据写入数据文件释放足够的空闲缓存块。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 重做日志高速缓存 当执行DML(Data Manipulation Language, 数据操纵语言)如:update、delete、insert或者create、alter、drop 等语句时,Oracle都会为这些操作生成重做记录. 重做日志高速缓存就是用于存储重做记录的缓存. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 重做日志高速缓存工作原理 归档进程 日志写进程 为提高效率,重做记录并不直接写入磁盘的重做日志文件,而是先写入重做日志缓存; 当重做日志缓存中的重做记录达到一定数量时,由LGWR进程写入重做日志.(先内存后磁盘) 当2个(至少2个)重做日志切换时,由ARCH将重做日志中的数据写入归档日志文件,以做备份. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 共享池(Shared Pool) 共享池保存了最近执行的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句和PL/SQL程序进行语法分析、编译、执行的内存区. 周甫(zoofchow@hotmail.com)
参数SHARED_POOL_SIZE 确定共享池的大小。 库缓存(Library Cache)区包括 解析用户进程提交的SQL语句或PL/SQL程序 保存最近解析过的 SQL语句或PL/SQL程序 共享池由库缓存和数据字典缓存组成。 参数SHARED_POOL_SIZE 确定共享池的大小。 数据字典区(Dictionary cache)用于存放数据字典信息行。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 库缓存 Oracle DBMS执行各种SQL、PL/SQL之前,要对其进行语法上的解析、对象上的确认、权限上的判断、操作上的优化等一系列操作,并生成执行计划。 库缓存保存了已经解析的SQL和PL/SQL。 所以,请尽量使用预处理查询. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典缓存 在Oracle运行过程中,Oracle会频繁的对数据字典中的表、视图进行访问,以便确定操作的数据对象是否存在、是否具有合适的权限等信息。 数据字典缓保存了最常用的数据字典信息。 数据字典缓存中存放的记录是一条一条的, 而其他缓存区中保存的是数据块. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 大池 大池用于需要大内存操作提供相对独立的内存空间,以便提高性能。 大池是可选的内存结构。 DBA可以决定是否需要在SGA中创建大池。 需要大池的操作: 数据库备份和恢复 大量排序的SQL语句 并行化的数据库操作 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) Java池 8i以后提供的对Java的支持,用于存放Java代码、Java程序等. 一般不小于20M,以便虚拟机运行. 周甫(zoofchow@hotmail.com)
PGA(Program Global Area) PGA是用户进程连接到数据库,并创建一个对应的会话时,由Oracle为服务进程分配的,专门用于当前用户会话的内存区。 PGA是非共享的,而SGA是共享的。 PGA大小由操作系统决定,并且分配后保持不变; 会话终止时,自动释放PGA所占的内存。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) PGA的组成 PGA 服务器进程 排序区 会话区 游标区 堆栈区 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 排序区 执行order by、group by等包含排序操作的SQL语句时所产生的临时数据. Oracle将准备排序的数据先临时存储到排序区中,并在排序区中排序,然后将排序好的数据返回给用户. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 会话区 保存会话所具有的权限、角色、性能统计信息. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 游标区 当运行带有游标(course)的PL/SQL语句时,Oracle会在共享池中为该语句分配上下文(Context),游标实际上是指向该上下文的指针。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 堆栈区 保存会话中的绑定变量、会话变量以及SQL语句运行时的内存结构信息。 例如: select * from emp where emp=:a; :a就是绑定变量,提示用户输入. 在等待用户输入时,先将该变量存入堆栈,以便可以同时运行其他语句. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 进程结构 进程时操作系统中的一个概念,是一个可以独立调用的活动,用于完成指定的任务。 进程与程序的区别是: 进程是动态创建的,完成后销毁;程序是静态的实体,可以复制、编辑。 进程强调执行过程,程序仅仅是指令的有序集合。 进程在内存中,程序在外存中。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 进程种类 Oracle包括用户进程和Oracle进程两类: 用 户 进 程 服务器进程 后 台 进 程 Oracle进程 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 用户进程 当用户运行一个应用程序时,就建立一个用户进程。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 服务器进程 服务器进程 处理用户进程的请求。 处理过程 分析SQL命令并生成执行方案。 从数据缓冲存储区中读取数据。 将执行结果返回给用户。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 后台进程 主要的后台进程有 DBWR 数据库写进程 LGWR 日志写进程 CKPT 检查点写进程 SMON 系统监控进程 PMON 进程监控进程 ARCH 归档进程 RECO 恢复进程 LCKn 封锁进程 后台进程 为所有数据库用户异步完成各种任务。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) DBWR(数据写) DBWR(Data Base Writer) 将数据缓冲区中所有修改过的缓冲块数据写到数据文件中,并使用LRU算法来保持缓冲区中的数据块为最近经常使用的,以减少I/O次数。 该进程在启动实例时自动启动。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 启动DBWR进行写操作的条件 脏列表达到最低限制。 相当于参数DB_BLOCK_WRITE_BATCH值的一半。 一个进程在LRU列表中扫描指定数目的缓冲块,未找到空闲缓冲块。 参数DB_BLOCK_MAX_SCAN_CNT确定扫描数目。 出现超时 3秒钟内该进程未活动,则该进程将在LRU列表中查找尚未查找的缓冲块,这组缓冲块的数目相当于参数DB_BLOCK_WRITE_BATCH值的2倍。 出现检查点。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) Checkpoint(检查点) 检查点(Checkpoint) : 在检查点出现期间,DBWR进程将数据缓冲区中的所有脏缓冲块写到数据文件中,LGWR进程将日志缓冲区中的所有记录项写到日志文件中,以确保上一个检查点至今修改过的所有数据块都被写到磁盘上。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) Checkpoint(检查点)的任务 检查点: 预定数目的记录项被填满。 参数LOG_CHECKPOINT_INTERVAL确定了预定数目。 设置指定的秒数。 参数LOG_CHECKPOINT_TIMEOUT确定了间隔秒数。 每个日志开关处 关闭实例时 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) LGWR(日志写) LGWR(Log Writer) 将日志缓冲区中的所有记录项写到日志文件中。 该进程在启动实例时自动启动。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 启动LGWR进行写操作的条件 用户进程提交一个事务(Commit) 日志缓冲区达到1/3范围 DBWR对一个检查点需要清除缓冲块 出现超时(3秒钟内未活动,则进行一次写操作。) 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) CKPT(检查点进程) CKPT(Checkpointer) 在控制文件中记录检查点。参数CHECKPOINT_PROCESS 确定了检查点的启动/不启动状态。 若CKPT进程不启动,则该进程的工作将由LGWR进程代劳。(如果数据库的数据文件过多,这样操作会降低系统性能。) 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) ARCH(归档进程) ARCH(Archiver) 在日志文件组出现切换时,将旧日志文件的内容拷贝到脱机存储介质上,出现介质失败时用于恢复数据。 LOG_ARCHIVE_START 确定了该进程的启动/不启动状态 ARCH 存储介质 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) ARCH(归档进程) LOG_ARCHIVE_DEST 当数据库在归档模式下操作时,该参数确定了日志文件的归档目标。 LOG_ARCHIVE_FORMAT 当数据库在归档模式下操作时,该参数确定了归档日志文件的缺省文件名格式。 ARCH 存储介质 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 其他后台进程 SMON(System Monitor,系统检视进程) 负责完成自动实例恢复。该进程在启动实例时自动启动。 PMON(Process Monitor,进程检视进程) 撤消异常中断的用户进程,并释放该进程已获得的系统资源或锁。 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 其他后台进程 RECO(Recover,恢复进程) 在分布式操作的情况下,恢复一个事务的失败。 LCKn(Lock,锁进程) 在并行服务器系统间加锁,最多可加10个锁,分别为LCK0,LCK1,,LCK9。 周甫(zoofchow@hotmail.com)
SQL> SELECT ename FROM emp ; 体系结构的示例 处理SQL语句的三个阶段 语法分析 执行 返回指令 Server 共享池 数据缓冲区 日志缓冲区 SGA Server 共享池 数据缓冲区 日志缓冲区 SGA User SMITH ALLEN WARD Server 共享池 数据缓冲区 日志缓冲区 SGA User SQL> SELECT ename FROM emp ; 周甫(zoofchow@hotmail.com)
SQL> SELECT sal FROM emp 体系结构的示例 SELECT操作 Server 共享池 数据缓冲区 SGA User B1 B2 EMP Table Block 1 Block2 SQL> SELECT sal FROM emp WHERE job = ‘CLERK’ ; 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 体系结构的示例 UPDATE操作 为了支持读一致性,恢复和回滚,所有修改操作需要回滚段。修改操作执行: 将数据块送到数据缓冲区 将回滚块送到数据缓冲区 在修改行上设置行锁 保存回滚数据到回滚段块 将修改写到数据块 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 体系结构的示例 UPDATE操作 共享池 数据缓冲区 SGA B1 B2 R2 R1 Server1 User User1 Server2 User User2 EMP Table Block 1 Block2 RB01 R1 R2 Data File 1 Data File 2 SQL> SELECT sal FROM emp WHERE job = ‘CLERK’ ; SQL> UPDATE emp SET sal = sal * 1.1 WHERE job = ‘CLERK’ ; 周甫(zoofchow@hotmail.com)
Oracle 10g(一) 体系结构 1.4 数据字典
周甫(zoofchow@hotmail.com) 数据字典 数据字典是Oracle数据库的核心组件,它由一系列只读的数据字典表和数据字典视图组成. 数据字典中记录了数据库的系统信息、例程运行的性能。 数据字典的所有者为SYS用户,其数据字典表和数据字典视图都保存在SYSTEM表空间中. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典表 数据字典表主要保存以下信息: 各种方案对象的定义信息,如表、视图、索引、同义词、绪论、存储过程、函数、包、触发器和各种对象; 存储空间的分配信息; 安全信息(帐户、权限、角色等) 例程运行时的性能和统计信息 其他数据库本身的基本信息 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典的用途 Oracle通过查询数据字典表或数据字典视图来获取有关用户、方案对象、对象的定义信息; 每次执行DML语句修改方案对象和对象后,Oracle都在数据字典中记录下所做的修改; 用户可以从数据字典的只读视图中,获取各种与对象方案和对象有关的信息; DBA可以从数据字典的动态性能视图中,监视例程的运行状态,为性能调整提供依据. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典的组成 数据字典中的信息存储在表和视图中. 数据字典的组成: 数据字典表 数据字典视图 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典表 数据字典表属于SYS用户; 大部分数据字典表的名称中都包含$这样的特殊符号 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典视图 数据字典表中的信息经过解密和一些加工处理后,以视图的方式呈现给用户。 大多数用户都可以通过数据字典视图查询所需要的与数据库相关的系统信息. 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典视图查询示例 --查看当前用户的缺省表空间 select username,default_tablespace from user_users; --查看当前用户的角色 select * from user_role_privs; --查看当前用户的系统权限和表级权限 select * from user_sys_privs; select * from user_tab_privs; 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典视图查询示例 --显示指定用户所具有的系统权限 select * from dba_sys_privs where grantee='GAME'; --查看用户下所有的表 select * from user_tables; --查询表信息 SELECT * FROM ALL_OBJECTS WHERE OWNER ='SCOTT' AND OBJECT_NAME='EMP'; 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典视图查询示例 更多的示例在附件中: 周甫(zoofchow@hotmail.com)
周甫(zoofchow@hotmail.com) 数据字典的使用 数据字典视图根据名字前缀分为三类: USER_ 用户视图 ALL_ 扩展用户视图 DBA_ 数据库管理员视图 其关系如下: 周甫(zoofchow@hotmail.com)