1、oracle 11g体系结构概述
1.1 三个重要概念
-
实例:Instance-一组oracle后台进程以及在服务器中分配的共享内存区域;
-
数据库:Database-由基于磁盘的数据文件、控制文件、日志文件、参数文件和归档文件等组成的物理文件集合
-
数据库服务器:Database Server-是指管理数据库的各种工具(如:SQLPLUS、OEM等)和实例以及数据库三个部分
三者之间的关系:实例用于管理和控制数据库,数据库为实例提供数据。一个数据库可以被多个实例加载和打开;而一个实例在其生存期内只能装载和打开一个数据库
启动数据库实际上是在服务器内存中创建一个oracle实例,然后使用这个实例来访问和控制磁盘中的数据文件
oracle数据库的基本体系结构如下所示
1.2 oracle数据库存储结构
数据库的主要功能就是存储数据,存储数据的方式通常称为存储结构,Oracle数据库的存储结构分为逻辑存储结构和物理存储结构。
-
逻辑存储结构:用于描述oracle内部组织和管理数据的方式
-
物理存储结构:用于指示oracle在操作系统中的物理文件组成情况
2 逻辑存储结构
逻辑存储结构是从逻辑的角度缝隙数据库的构成,是对数据存储结构在逻辑概念上的划分。
oracle逻辑存储结构是一种层次结构,主要由表空间、段、区间和数据快等概念组成,Oracle的逻辑存储结构中所包含的多个结构对象从数据块到表空形成了不同层次的粒度关系,如下所示:
2.1 数据块(Data Blocks)
数据块是oracle逻辑存储结构中的最小逻辑单位,俄式执行数据库输入、输出操作额最小存储单位,通常Oracle数据块是操作系统块的整数倍,如果操作系统快的大小为2048b,并且oracle数据块的大小为8092b,则表示oracle数据块由4个操作系统块组成。
oracle数据库的大小由初始化参数中的DB_BLOCK_SIZE决定,打开sqlplus,连接数据库。
col name format a30
col value format a30
select name,value from v$parameter where name = 'db_block_size'
如下所示:
数据块中可以存放表数据、索引数据和簇数据,无论存放那种数据,其结构都是相同的。
数据块组成如下:
组成部分 | 说明 |
---|---|
块头 | 存放数据块的基本信息,如块的物理地址,块所属的段的类型 |
表目录 | 存放表的相关信息。如果数据块中存储的数据是表数据,则标目钟中存储有关这些表的相关信息 |
行目录 | 如果块中有行数据存在,则这些行的信息被记录在行目录中,这些信息包括行的地址等 |
空余空间 | 空余空间是一个块中未使用的区域,这片区域用于新行的插入和已经存在的行的更新 |
行数据 | 用于存放表数据和索引数据的地方,这部分空间已被数据行所占用(如表中若干行数据记录) |
通常把块头、表目录、行目录这三部分合起来称作头部信息区,头部信息区不存放数据,它存放整个块的引导信息。
2.2 数据区(Extent)
数据区(也可以成为数据扩展区)是由一组连续的oracle数据块所构成的oracle存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段(segment)。当一个段中的所有空间被使用完以后,Oracle系统将自动为该段分配一个新的数据区。数据区是oracle存储分配的最小单位,oracle就是以数据区为单位进行存储空间的扩展。一个oracle对象至少包含一个数据区
2.3 段(segment)
段是由一个或者多个数据区组成,为特定的数据对象(数据、索引、回滚等)分配一系列的数据区。段内包含的数据区可以不连续,并且可以跨越多个文件。数据段的大小随着表中数据量的增大而增长,数据段的增大过程是通过向其添加新的数据区来实现的。oracle数据库通常有以下4个类型的段:
类型 | 说明 |
---|---|
数据段 | 保存表中的数据记录,当创建一个表时,系统自动创建一个以该表名命名的数据段 |
索引段 | 包含了用于提高系统性能的索引 |
回滚段 | 回滚段也可称作撤销段,保存了回滚条目,oracle将修改前的机制保存在回滚条目中 |
临时段 | 当执行船舰索引、查询等操作时,Oracle可能会使用一些临时存储空间,用于暂时性地保存解析过的查询语句以及在排序过程中产生的临时数据。 |
2.4 表空间(TableSpace)
oracle使用表空间将相关的逻辑结构(如段、数据区等)组合在一起,表空间是数据库最大的逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象(segment),任何数据对象在创建时都要指定存储在某个表空间中。
表空间(属逻辑存储结构)和数据文件(属物理存储结构)相对应,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间。每个数据库至少有一个表空间(即system表空间),表空间的大小等于所有从属于它的数据文件大小的总和。
在创建数据时,系统会自动船舰多个默认的表空间,这些表空间除了用于管理用户数据的表空间之外,还包括用于管理oracle系统内部数据(如数据字典)的表空间:
2.4.1 system表空间。
系统表空间,用于存放oracle系统内部表和数据字典的数据,如表名、列名、用户名等。
例:通过dict查看数据库中数据字典的信息:
col table_name for a30
col comments for a30
select * from dict;
例:通过v$fixed_view_definition查看数据库中内部信息表的信息
col view_name for a30
col view_definition for a30
select * from v$fixed_view_definition;
2.4.2 sysaux表空间
sysaux表空间是oracle 11g新增加的表空间,作为system表空间的辅助表空间,降低system表空间的负荷,主要存储数据字典意外的其他数据对象。
2.4.3 UODO表空间。
UODO表空间-撤销表空间,用于存放撤销信息的表空间。当用户对数据表进行修改操作(包括插入、更新、删除等操作)时,Oracle系统自动使用撤销表空间来临时存放修改前的旧数据。当所作的修改操作完成并提交命令后,Oracle根据系统设置的保留时间来决定合适释放掉撤销表空间的部分空间/
2.4.4 USERS表空间。
用户表空间,是ORACLE建议用户使用的表空间
除了oracle系统默认创建的表空间外,用户可以根据应用系统的实际情况以及索要存放的对象类型创建多个自定义表空间。