tablespace是oracle的逻辑结构,datafile是oracle的物理结构。 tablespace由datafile组成。
tablespace 分为: permanent tablespace, temporary tablespace, undo tablespace。
表空间不足是DBA常常遇到的情况,所以要经常监视表空间的增长情况,及时对表空间大小作出调整。
一 数据库的物理结构
物理文件大致可以分为:数据文件, 控制文件, 联机日志文件三类(oracle还包含一些其他文件,但是默认情况下,指的是这3种)
1.数据文件:
每个数据文件都是一个操作系统文件,是真正存放数据库原始数据的地方。一个数据文件,由多个(OS blocks)组成。(操作系统块和Oracle块是两个不同的概念), 数据文件有以下特性:
(1)每个数据文件只能属于一个数据库
(2)每个数据文件只能属于一个表空间
(3)一个或者多个数据文件组成了一个表空间
(4)数据文件是可以被设置为自动增长的
2.控制文件:
一个数据库至少有一个控制文件,一般情况下有多个,并且他们的内容是相同的。控制文件记录的是数据库的物理结构信息。所以,控制文件的完整性非常重要。
其中包含了:数据库的名字, 数据文件和联机日志文件的名称和位置,创建数据库的时间戳。
3.联机日志文件:
一个数据库有多个联机日志文件。 联机日志文件中含有重做记录(Redo Records)。
联机日志文件记录了数据库的改变,如果在一次意外中,数据库意外关闭。在重新启动数据库的时候,就可以通过联机日志文件将这些改变写回数据文件中。 这就是联机日志文件存在的意义,它保持了数据库的一致性。
联机日志文件唯一的作用就是实例的恢复。意外断电以后保证数据库一致性。
二 数据库的逻辑结构
Oracle的逻辑结构由 数据块, 区, 段, 表空间 4部分组成。
块是Oracle的最小存储单位, oracle取数据的时候,都是以块的整数倍来取的,如果取得数据不到一个数据块的大小,那么,oracle也会将一整个块取出来。
块的大小是由DB_BLOCK_SIZE决定的,和这个值一样大的块叫做标准块,oracle 9i以后的版本支持同一个数据库中标准块和非标准块共存。
操作系统每次读写IO的时候,都是以操作系统块为单位的, oracle读取IO的时候,都是以oracle的块大小为读取单位的。
熟悉oracle块的结构式理解oracle存储组织形式的关键~~!
块结构,包括 Header: 块的基本信息,块的物理地址,该块所属类型(数据段还是索引段)
table directory(表目录):如果一些表数据存在这个块中,那么这些表的相关信息被存在这个表目录中国。
row directory: 如果块中有行数据存在,那么行的信息存在行目录中(包括行的物理地址)
Row data: 真正存放表数据和索引数据的地方。
free space:未使用的区域,用于新的insert 和已存在数据的update使用。
对于块的自由空间,Oracle的两种管理方式: 手动管理和自动管理。一般情况下,oracle不会合并free的空间,只有当insert 或者update操作,找不到连续的free 空间的时候,才会合并free空间。
1. 行链接和行迁移的概念~~:
行链接: 如果我们插入数据的一行比较大,一个block放不下,oracle就会把一个数据块存在几个数据块中,这个时候就是行链接。
行迁移: 数据块中存在这样一条行记录,当用户对其执行update操作的时候,oracle始终发现,这个block中没有更多的free space存放它,于是oracle就会把更新后整行的数据迁移到另一个block中,原block只保存一个指针。
行链接和行迁移都要影响数据库的性能,因为oracle取一条数据的时候,要访问不止一个block。
2. 块中free space的管理:
自动管理: oracle使用bitmap 来跟踪管理数据块。自动管理比较方便,也能很有效的利用空间资源。
手动管理: 通过设定每一个数据块能存储的数据占整个数据块的百分比来实现的。
Oracle 区(extent)
区是由连续的block组成的, 是一段连续的存储空间,多个区组成一个段, 当段空间耗尽时,oracle会分配一个新的区给这个段。
当创建一个表时, oracle会自动为表的数据段分配一个初始区(Initial extent),随着数据的增加,一个区被填满,oracle会分配一个新的区给这个数据段。
出于管理的需要,每一个数据段的头部,都有区的一个目录。
段(segment)
一个段由一系列的区组成,段有几种类型: 数据段, 索引段, 临时段, 回滚段。
表由段组成,普通表由一个段组成,分区表由多个段组成。