2.1逻辑存储结构
2.1.1数据块(Data Blocks)
数据块是Oracle逻辑结构中最小的逻辑单位,也是执行数据库输入输出最小的存储单位。通常Oracle数据库是操作系统块的整数倍,如果操作系统块的大小为2048B,并且Oracle数据库的大小为8192B,则表示Oracle数据库由4个操作系统块构成。
数据块中可以存放表数据、索引数据和簇数据等,无论存放哪种类型的数据,结构都是相同的。数据库由块头、表目录、行目录、空余空间和行数据5部分组成。
块头:存放数据块的基本信息,如块的物理地址、块所属段的类型。
表目录:存放表的相关信息。
行目录:如果块中有行数据存在,则这些行的信息将被记录在行目录中。
空余空间:是块中未被使用的区域,用于新行的插入和存在行的更新。
行数据:用于存放表数据和索引数据的地方。
2.1.2数据区(Extent)
数据区(数据扩展区)是由一组连续的Oracle数据块所构成的Oracle存储结构,一个或者多个数据块组成一个数据区,一个或者多个数据区再组成一个段。当一个段中的空间使用完之后,Oracle系统将自动为该段分配一个新的数据区。
使用数据区的目的是用来保存特定数据类型的数据。数据区是表中数据增长的基本单位,在Oracle中,分配存储空间就是以数据区为单位的。
2.1.3段(Segment)
段是一个独立的逻辑存储结构。段是为特定的数据对象分配的一系列数据区。一个Oracle数据库通常有以下4中类型的段:
1)数据段:数据段中保存的是表中的数据记录。
2)索引段:包含了用于提高系统性能的索引。
3)回滚段:也称撤销段,保存回滚的条目,Oracle将修改前的旧值保存在回滚条目中。
4)临时段:当执行创建索引、查询等操作时,Oracle会使用一些临时空间暂时性的保存解析过的查询语句以及在排序过程中产生的临时数据。
2.1.4表空间(TableSpace)
表空间是数据库中存储数据对象的最大逻辑划分区。一个表空间由多个数据文件组成,一个数据文件只属于一个表空间。每个数据库中至少有一个表空间(System表空间),表空间的大小等于所有从属于它的数据文件大小的总和。
Oracle默认创建的主要表空间:
1)System表空间:系统表空间,用于存放Oracle系统内部表和数据字典的数据。
2)Sysaux表空间:Oracle11g新增的表空间,随数据库的创建而创建,充当System的辅助表空间,降低了System表空间的负荷,只要存储数据字典以外的其他数据对象。Sysaux表空间一般不存储用户数据,由Oracle自动维护。
3)Undo表空间:撤销表空间,用户存储撤销信息的表空间。
4)Users表空间:用户表空间,Oracle建议用户使用的表空间,可以在这个表空间上创建各种数据对象。
2.2物理存储结构
2.2.1数据文件
数据文件是用于保存用户应用程序数据和Oracle系统内部数据的文件,Oracle在创建表空间的同时会创建数据文件。Oracle数据库在逻辑上由表空间组成,每个表空间可以包含多个数据文件,但是一个数据文件只能隶属于一个表空间。Oracle中包含3中类型的数据文件:系统数据文件、撤销数据文件、用户数据文件。
1)系统数据文件
2)撤销数据文件
3)用户数据文件
2.2.2控制文件
控制文件是一个二进制文件,记录了数据库的物理结构,其中主要包括数据库名、数据文件与日志文件的名字和位置,数据库建立日期等信息。Oracle实例在启动时必须访问控制文件。只有控制文件正常,实例才能加载并打开数据库。
当Oracle实例在正常启动时,系统首先访问的是初始化参数文件spfile,然后Oracle为系统全局区(SGA)分配内存。这时,Oracle实例处于安装状态,并且控制文件处于打开状态;接下来Oracle会自动读取“控制文件”中的所有数据文件和日志文件的信息,并打开数据库中所有的数据文件和所有的日志文件以供用户访问。
2.2.3日志文件
日志文件的功能主要是记录对数据所做的修改,对数据库所做的修改几乎都记录在日志文件中。Oracle的日志文件包括:重做日志文件(Redo Log File)和归档日志文件(Archive Log File),它们数据库系统的主要文件之一,尤其是重做日志文件,是Oracle数据库系统正常运行所不可或缺的。
2.2.4服务器参数文件
服务器参数文件SPFILE(Server parameter File)是二进制文件,用来记录Oracle数据库的基本参数信息(数据库名、控制文件所在路径、日志缓冲大小等)。
1)查看服务器参数
通过视图查看:
Col name for a30;
Col value for a30;
Select name,value,ismodified from v$parameter;
通过show parameter查看。
2)修改服务器参数
通过企业管理器(OEM)或者alter system命令实现。
2.2.5密码文件、警告文件和跟踪文件
2.3Oracle11g服务器结构
Oracle服务器主要由实例、数据库、程序全局区和前台进程组成。实例可以进一步划分为系统全局区(SGA)和后台进程两部分,其中SGA使用操作系统的内存资源,而后台进程需要使用CPU和内存资源。程序全局区(PGA)是一个非共享的内存区域,用于管理用户进程的私有资源。
2.3.1系统全局区(SGA)
系统全局区(System Global Area)是所有用户进程共享的一块内存区域,也就是说,SGA中的数据资源可以被多个用户进程共同使用。SGA随数据库实例的启动而加载到内存中,当数据库实例关闭时,SGA也就消失了。SGA主要由高速数据缓冲区、共享池、重做日志缓冲区、Java池和大型池等内存结构组成。
1)高速数据缓冲区
2)重做日志缓冲区
3)共享池:SGA保留的内存区域,用于缓存SQL语句、PL/SQL语句、数据字典、资源锁、字符集以及其他控制结构等,共享池包含库高速缓冲区和字典高速缓冲区。
4)大型池:不是必须的内存结构,某些特殊情况下,实例需要大型池来减轻共享池的访问压力。
5)Java池:用来提供内存空间给Java虚拟机使用。
6)流池:用于在数据库与数据库之间进行信息共享。
2.3.2程序全局区(PGA)
用户进程全局区,PGA是一个全局区,但是一个服务进程只能访问属于自己的那部分PGA资源区,各个服务进程的PGA区的总和就是实例PGA区的大小,通常PGA区由私有SQL区和会话区组成。
1)私有SQL区
2)会话区:存放用户会话信息(如登录信息),如果数据库处于共享服务器连接模式下,则会话区将位于SGA区域,而不是PGA。
2.3.3前台进程
1)用户进程:能产生或执行SQL语句的应用程序。
2)服务器进程:处理用户会话过程中向数据库实例发出的SQL语句或SQL*Plus命令,可以分为专用服务器模式和共享服务器模式。
2.3.4后台进程
Oracle后台进程是一组运行于Oracle服务器端的后台程序,是Oracle实例的重要组成部分。默认情况下Oracle11g会启动200多个后台进程。
1)数据写入进程(DBWR):主要任务是负责将内存中的脏数据写会到数据文件中。基本上三种情况下,DBWR会将脏数据块写入数据文件中。
2)检查点进程(CKPT):检查点进程可以看做一个事件,当检查点事件发生时,CKPT会要求DBWR将某些“脏”数据回写到数据文件。发生日志切换时也会启动检查点进程。
3)日志写入进程(LGWR)日志写入进程用户将重做日志缓冲区中的数据写入重做日志文件。Oracle系统首先将用户做出的修改日志信息写入日志文件,然后再将修改结果写入数据文件。
4)归档进程(ARCH):归档模式是一个可选择的进程,只有当Oracle处于归档模式时,该进程才能起到作用。
5)系统监控进程(SMOM):在数据库系统启动时执行恢复工作的强制性进程。
6)进程监控进程(PMON):进程监控进程用于监控其他进程的状态,当有进程启动失败时,PMON会清除失败的用户进程,释放用户进程所用的资源。
7)锁定进程(LCKN):可选进程,并行服务器模式下可以出现多个锁定进程以利于数据库通信。
8)恢复进程(RECO):分布式数据库模式下的可选进程,用于数据不一致时进行恢复工作。
9)调度进程(DNNN):可选进程,共享服务器模式下,可启动多个调度进程。
10)快照进程(SNPN):用于处理数据库快照的自动刷新,并通过DBMS_JOB包运行预定的数据库存储过程。
2.4数据字典
2.4.1Oracle数据字典概述
数据字典是Oracle存放关于数据库内部信息的地方,其用途是用来描述数据库内部的运行和管理情况。
Oracle数据字典的名称由前缀和后缀组成,使用“_”连接,代表含义如下:
1)dba_:包含数据库实例的所有对象信息。
2)v$_:当前实例的动态视图,包含系统管理和系统优化等的所有视图。
3)user_:记录用户的对象信息。
4)gv_:分布式环境下所有实例的动态视图,包含系统管理和系统优化等的所有视图。
5)all_:记录用户的对象信息已被授权访问的对象信息。
2.4.2Oracle常用数据字典
1)基本数据字典
2)常用动态性能视图