7.3 数据块的管理

数据块是Oracle中最小的存储单位,也是数据库服务器读写数据的基本单位。用户在访问数据库时,服务器进程首先将数据从数据块中读到SGA的数据库高速缓存中,并放在在与数据块大小相同的缓冲区中,然后在缓冲区中对数据进行读写。如果数据发生了变化,DBWR后台进程负责将脏缓冲区中的数据重新写入数据块。

在Oracle 11g的数据库中可以定义标准块,也可以定义非标准块。标准块的大小由初始化参数DB_BLOCK_SIZE指定。非标准块的大小可以是2KB、4KB、16KB、32KB等,只要不与标准块的大小相同即可。无论是哪种块,在SGA中都需要为其定义数据库高速缓存,缓存是由许多缓冲区组成,缓冲区大小与数据块相同。当用户访问数据块中的数据时,服务器进程将把数据从数据块读到相应的缓冲区中。

为了提高数据库的性能,Oracle规定数据块的大小必须是操作系统块的整数倍。例如,在Windows系统中,操作系统块的大小是4KB,所以数据块的大小可以是4KB、8KB、16KB等。在UNIX中,操作系统块的大小是512字节或1KB,所以数据块的大小可以是1KB、2KB、4KB等。

7.3.1 数据块的组成

在数据块中可以存储不同类型的数据,如用户数据、系统数据、表、索引等。无论是什么类型的数据,最终都是存储在数据块中的,这些数据块具有相同的结构。

一个数据块由以下几部分组成:

·块头:用来记录块本身的信息,如块地址、段类型等。

·表目录:如果在数据块中存储表中的数据,则需要把表的相关信息记录在表目录中。

·行目录:如果在数据块中存储表中的数据,还需要把这些行的信息记录在行目录中。

·空闲空间:是指数据块中尚未使用的存储空间。当向表中插入数据时,将使空闲空间减少。当删除表中的数据时,将使空闲空间增加。而当执行UPDATE操作时,可能使空闲空间增加,也可能使其减少。

·已使用空间:是指数据块中已写入数据的空间。数据库对象的数据就存储在数据块的已使用空间中。

在数据块中,块头、表目录和行目录中的信息只能由数据库服务器来维护,用户的操作只能直接影响空闲空间和已使用空间。