ORACLE数据库存储结构

一、数据块

Oracle对数据库数据文件中的存储空间进行管理的单位是数据块。数据块是数据库中最小的(逻辑)数据单位,是最小的I/O单位。与数据块对应的,所有数据在操作系统级的最小物理存储单位是字节。每种操作系统都有一个被称为块容量的参数。Oracle每次获取数据时,总是访问整个数据块,而不是按照操作系统块的容量访问数据。数据块容量应该设为操作系统块容量的整数倍,以便减少不必要的I/O操作,一般数据块大小为8k。

结构:

头部:(1)块的物理地址 (2)块的段信息、表空间信息 (3) 事物槽 (4)行目录:记录每一行的起始位置

数据:从块最后的位置开始存储,成S行连接。行信息:锁信息 列宽 列值 列宽 列值。下一行的锁信息 列宽 列值 列宽 列值。

事物槽ITL:用来记录该块所有发生的事务,一个itl可以看作是一条事务记录。当然,如果这个事务已经提交,那么这个itl的位置就可以被反复使用了,因为itl类似记录,所以,有的时候也叫itl槽位。如果一个事务一直没有提交,那么,这个事务将一直占用一个itl槽位,itl里面记录了事务信息,回滚段的入口,事务类型等等。如果这个事务已经提交,那么,itl槽位中还保存的有这个事务提交时候的SCN号。

PCT-FREE : PCTFREE 参数用来设置一个数据块(data block)中至少需要保留(reserve)多少可用空间(百分比值),为数据块中已有数据更新时可能发生的数据量增长做准备。

PCTUSED:PCTUSED 参数用于决定一个数据块(data block)是否可被用于插入新数据,她的依据是数据区(row data)与数据块头(overhead)的容量之和占数据块全部容量的最大百分比。当一个数据块中的可用空间比例小于 PCTFREE 参数的规定时,Oracle就认为此数据块无法被用于插入新数据,直到数据块中的占用容量比例小于 PCTUSED 参数的限定。

为什么会有PCT-FREE呢,因为更新块中的数据的时候,可能会使行信息变大,占用更多的空间。如果不预留一定的空间,就会导致大量的行记录分布在不同的块中,从而导致访问一行记录,需要访问多个块,降低oracle的效率。从效率上考虑,oracle一般不允许一条记录分布在不同的块。

行迁移:当update操作时,行占用的空间增大,导致行跨块时,将整行移出,放置在一个新块,将新块的地址放入当前位置。

行迁移大部分是由于PCT_FREE空间过小导致。也可以通过重建表来优化数据。

行链接当一行数据被插入时一个数据块就无法容纳。在这种情况下Oracle将这行数据存储在段内的一个数据块链中,这种是无法避免的。所以,平常建表时,不能将一个表的字段设置过多,容易导致行连接多,从而降低数据库的效率。

ROWID:数据库中行的全局唯一地址。

rowid值主要包含以下信息:

(1)对象的数据对象编号 对象段编号

数据段编号和对象编号的区别:当一个表的物理位置发生改变时,数据段编号会发生改变。对象编号不会发生改变。

当段中的数据被truncate时,Truncate过程是在system表空间中重建一个数据段,原来的数据段弃用。所以会非常快且数据段编号也会发生改变。

凡是ddl发生时,不涉及到修改数据,只涉及到原数据(SYSTEM表空间中的数据)。Drop表之后为什么可以很快闪回,因为就是更改了元数据,所以很快就能找回。

(2)该行所在的数据文件中的数据块

(3)该行中数据块的位置(第一行是0)

(4)数据行所在的数据文件(第一个文件是1)。该文件编号是相对于表空间。

通常来说,一个rowid值唯一标识数据中的一行。而且,rowid能记录数据行的物理位置信息,所以,无论是用来查询还是更新,都能非常快。

二、数据区

数据扩展是由一组连续的数据块构成的数据库逻辑存储分配单位。是数据库给段分配空间的最小单位。当用户创建数据表时,Oracle为此表的数据段分配一个包含若干数据块的初始数据扩展。虽然此时数据表中还没有数据,但是在此初始数据扩展中的数据块已经为插入新数据做好了准备。

如果一个段的 初始区中的数据块都已装满,且有新数据插入需要空间时,Oracle自动为这个段分配一个增量数据扩展。增量数据扩展 是一个段中继已有数据扩展之后分配的后续数据扩展,她的容量大于或等于之前的数据扩展 。

为了管理的需要,每个段的段头中包含一个记录此段所有数据扩展的目录。

用户可以在 CREATE TABLE 语句中使用 STORAGE 子句设定存储参数,决定创建表时为其数据段(data segment)分配多少初始空间,或限定一个表最多可以包含多少数据扩展。

本地管理的表空间通过数据块头的位图查找数据文件中的可用空间

数据区何时被回收:

1、表,簇表的所有者(owner)或拥有 DELETE ANY 权限的用户, 可以使用 TRUNCATE...DROP STORAGE 语句将表,簇表的数据清除

2、DBA 可以使用以下语法收回一个段中未使用的数据扩展:

ALTER TABLE table_name DEALLOCATE UNUSED;

3、如果用户为回滚段(rollback segment)设定了 OPTIMAL 参数,Oracle将周期性地从其中回收数据扩展。

当数据扩展(extent)被释放后,Oracle修改数据文件中的位图(对于本地管理的表空间)或更新数据字典(对于数据字典管理的表空间),将回收的数据扩展视为可用空间。被释放的数据扩展中的数据无法继续访问。

只要用户没有移除(drop)或清空(truncate)非簇表,那么对应数据段内的任何数据块都不会被回收。Oracle会在插入数据时使用这些数据块(只要数据块有足够的空间)。即使用户删除(delete)了表的所有行,Oracle也不会回收此表的数据块供表空间内的其他方案对象使用。这就是形成高水位线的原因。

三、数据段

数据段是与数据库对象相对应,一般一个数据库对象对应一个数据段。多个extent是对应一个数据段,每个数据段实际上就是数据库一个对象的代表。数据表、索引、回滚、聚集这些都是数据段的一种表现形式。同时,数据段是在数据对象创建的时候就已经创建出来,随着对象体积的增大,而不断分配多个extents进行管理。

通俗的讲,一般情况下,一个表为一个段。如果表分区了,一个表分区是一个段。其他还有索引段,索引分区段。二进制大对象段BLOB。

高水位线:

所有的oracle段都有一个在段内容纳数据的上限,我们把这个上限称为"high water mark"或HWM。HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment。HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很象一个水库的历史最高水位,这也就是HWM的原始含义,当然不能说一个水库没水了,就说该水库的历史最高水位为0。但是如果我们在表上使用了truncate命令,则该表的HWM会被重新置为0。

高水位线的危害:

1:全表扫描通常要读出直到HWM标记的所有的属于该表数据库块,即使该表中没有任何数据。

2:即使HWM以下有空闲的数据库块,键入在插入数据时使用了append关键字,则在插入时使用HWM以上的数据块,此时HWM会自动增大。

降低高水位线操作:

1:执行表重建指令

2:执行alter table table_name shrink space;

3:复制要保留的数据到临时表t,drop原表,然后rename临时表t为原表

4:truncate

四、表空间

由一个或者多个物理数据文件组成。建表时,将表建在表空间上。

系统默认表空间:

SYSTEM表空间存放ORACLE数据字典等。数据库创建的PL/SQL程序单元同样也储在system表空间.Oracle建义在system表空间中除了创建数据字典之外不要再创建任何其它对象。

SYSTEMAUX表空间为system表空间的辅助表空间。10g版本中增加了另一个强制的表空间SYSAUX,它包含一些以前位于system表空间中的对象,并且集中存储支持oracle特性(例如LogMiner、UltraSearch和DataMining)的对象,这些对象提供了新的视图v$sysaux_occupants,其中显示了每个组件使用的空间数量以及oracle提供的存储过程的名称,可以使用这些存储过程将对象移入和移出SYSAUX表空间。

UNDO表空间:undo表空间中会自动分配undo段,这些undo段用来保存事务中的DML语句的undo信息,也就是来保存数据在被修改之前的值。在rollback,实例恢复(前滚),一致性读CR块的构造时会使用到undo信息。由于undo的引入,从而Oracle的select语句实现一致性读时,不需要任何锁。

undo表空间和其它表空间有很多类似的地方:undo数据块也会被读到buffer cache缓存起来,修改时也会产生redo log,数据也会写回到undo表空间的磁盘上。所以崩溃后,undo块的buffer cache也会恢复过来。

TEMP表空间:临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序。像数据库中一些操作: CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 INTERSECT、MINUS、SORT-MERGE JOINS、HASH JOIN等都可能会用到临时表空间。当操作完成后,系统会自动清理临时表空间中的临时对象,自动释放临时段。这里的释放只是标记为空闲、可以重用,其实实质占用的磁盘空间并没有真正释放。这也是临时表空间有时会不断增大的原因。

临时表空间不会存储永久类型的对象,所以它不会也不需要备份。另外,对临时数据文件的操作不产生redo日志,不过会生成undo日志。

创建临时表空间或临时表空间添加临时数据文件时,即使临时数据文件很大,添加过程也相当快。这是因为ORACLE的临时数据文件是一类特殊的数据文件:稀疏文件(Sparse File),当临时表空间文件创建时,它只会写入文件头部和最后块信息。它的空间是延后分配的.这就是创建临时表空间或给临时表空间添加数据文件飞快的原因。

会话级临时表: 会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前SESSION不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的。即两个不同的SESSION所插入的数据是互不相干的。当某一个SESSION退出之后临时表中的数据就被截断(truncate table,即数据清空)了。

事务级临时表:是指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出SESSION的时候,事务级的临时表也会被自动截断)。

会话级临时表采用on commit preserve rows;而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被截断。

五、SCHEME(owner)

通俗来讲,对应用户。在数据库的结构中,一个数据库有多个用户。一个用户由多个段组成。一个数据库有多个表空间,一个表空间也由多个段组成。

六、ORCALE文件介绍

数据库至少包含:控制文件、数据文件、联机重做日志文件。这三类文件,最好能放在存储上。

控制文件:控制文件在Oracle数据库中扮演着很重要的角色,没有控制文件(或者控制文件损坏了),运行着的实例立即崩溃。可以说,控制文件一旦损坏,数据库必然down了。Oracle数据库实例启动过程中,当启动到unmount时,此时只是在内存中为Oracle实例分配了实例空间,然后如果继续要启动到mount状态,这个时候控制文件就闪亮登场了,因为Oracle要依据控制文件找到数据文件跟重做日志文件的路径,确定找到了再进去mount状态。

控制文件的内容包括重做日志文件、数据库的名称、数据库创建信息、表空间信息、数据文件的状态、日志文件信息、备份信息、检查点信息等

控制文件是一个2进制文件,不可以直接通过文本编辑器进行编写,这个文件由Oracle自己进行维护,Oracle建议控制文件至少有两份冗余,并且放在不同的磁盘中。

从数据库可以查询到控制文件的位置,一般3个控制文件,都是一样,属于复用的关系。最好放到不同的目录下。

参数文件:spfile。启动的时候,会读取。但是运行过程中不会关闭。文件损坏了,oracle也不会奔溃。spfile动态参数文件,是二进制文件,不可以直接用记事本等等程序做修改,可以用ALTER命令做修改,不用重起数据库也能生效。

备份文件:离线文件,主要是备份数据文件、控制文件、参数文件和日志文件。不能放在存储上。一般放在带库(用于海量数据离线存储和备份的设备)上。

归档日志文件:占用空间很大,但是不能放在存储上。存储很容易出问题,由于数据文件再存储上,所以,容易丢数据。

预警和跟踪日志文件:bdump/alert_数据库名.log  查看oracle是否出现问题。oracle问题诊断的入口。

时间: 2024-10-11 00:24:41

ORACLE数据库存储结构的相关文章

Oracle_高级功能(4) 数据库存储结构

数据库存储结构分为:物理存储结构和逻辑存储结构.物理结构和逻辑结构分开,对物理数据的存储不会影响对逻辑结构的访问.1.物理存储结构 数据库文件 os block2.逻辑存储结构 tablespace 表空间 segment 段 extend 扩展区 db block 数据块(8k)2.1创建表空间create tablespace <ts_name> datafile '<file>' size <n> reuse autoextend on next <n>

oracle的存储结构

oracle024 oracle的存储结构 存储结构--表的存储结构 表空间:由一个或多个文件组成,表空间的空间容量就是多个文件大小的总和 表和数据文件建立一个中间层,表空间中有许多表. select * from DBA_TABLESPACES; 系统级别: SYSTEM:orale的自身的信息就是数据字典,数据字典表就放在system表空间中 sysaux:是system的附属表空间,也是存放系统信息 //上面两个表空间必须联机的 UNDOTBS1:改变前的数据块的存放位置 TEMP:临时表

关于在Oracle 数据库存储m&#179;(立方米)

--------------注意:如下操作是在RHEL的VNC中执行的,并不是在secureCRT中执行的.------------ --------------原因:若是在secureCRT执行,m3会显示成:m鲁,见如下的截图,是啥原因我还没研究-- 如下是实验的过程: [[email protected] ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 [[email protected] ~]$ sqlplus scott/aaaaaa SQL

[转]Oracle DB 管理数据库存储结构

? 描述块中表行数据的存储 ? 创建和管理表空间 ? 获取表空间信息 表数据的存储方式 创建表时,还会创建一个用于保存其数据的段.表空间包含一个段集合. 从逻辑上来说,表包含许多行列值.行最终以行片段的形式存储在数据库块中.之所以称其为行片段,是因为在某些情况下可能不会在一个位置存储完整的行.当插入的行太大而无法装入单个块时(链接行),或当更新导致现有行超出当前块的可用空闲空间时(迁移行),就会发生这种情况.当表中的列多于255 列时,也会使用行片段.在这种情况下,这些行片段可能位于同一个块(块

ORACLE管理存储结构之物理机构+逻辑结构【weber出品】

一.数据库的存储结构有物理结构和逻辑结构组成的 物理结构:物理上,oracle是由一些操作系统文件组成的 SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/undotb

Oracle数据库的结构

Oracle数据库的体系结构包括四个方面:数据库的物理结构.逻辑结构.内存结构及进程. 1. 物理结构 物理数据库结构是由构成数据库的操作系统文件所决定,Oracle数据库文件包括: 数据文件(Data File) 数据文件用来存储数据库中的全部数据,例如数据库表中的数据和索引数据.通常以为*.dbf格式,例如:userCIMS.dbf . 日志文件(Redo Log File) 日志文件用于记录数据库所做的全部变更(如增加.删除.修改).以便在系统发生故障时,用它对数据库进行恢复.名字通常为L

ORACLE物理存储结构

1.查看数据库实例基本信息: SQL> SELECT DBID,NAME,CREATED,LOG_MODE,OPEN_MODE,FORCE_LOGGING,CURRENT_SCN,FLASHBACK_ON FROM V$DATABASE; DBID NAME CREATED LOG_MODE OPEN_MODE FORCE_LOGGING CURRENT_SCN FLASHBACK_ON ---------- --------- ----------- ------------ --------

oracle逻辑存储结构

逻辑存储结构是对数据存储结构在逻辑概念上的划分.oracle的逻辑存储结构主要由表空间.段.区间和数据块等概念组成.oracle数据块是由多个表空间组成,表空间又是由多个段组成,段有多个数据区组成,数据区又有多个块组成.数据块是Oracle逻辑存储中的最小的逻辑单位,也是执行数据输入.输出最小存储单位.数据块由块头.表目录.行目录.空余空间和行数据组成.块头.表目录.行目录组合起来称为头部信息区,头部信息区不存放数据,存放整个块的引导信息,起到引导系统读取数据的作用.空余空间和行数据公共构成块的

Oracle数据库语言——结构化查询语言SQL

一.数据定义语言DDL 1.创建表空间:CREAT TABLESPACE lyy DATAFILE 'C:/app/lyy.dbf' SIZE 10M;(创建一个10M的表空间,存放在C盘app文件夹中) 删除表空间:DROP TABLESPACE lyy; 2.创建用户和赋权:CREAT USER lyy PROFILE DEFAULT IDENTIFIED BY 123456 DEFAULT TABLESPACE lyy TEMPORARY TABLESPACE temp ACCOUNT U