6.1.2 段管理方式
当用户向表中写入数据时,这些数据被写入表段中的空闲数据块中,服务器进程先查找表中的空闲数据块,然后将数据写入数据块,最后还要修改数据块的状态。对于段空间管理,Oracle提供了两种方式,一种是手工管理,另一种是自动管理。
手工管理段空间的方式是这样实现的:在每个段的头部都有一段保留空间,在保留空间中维护一个空闲列表,在这个列表中记录当前段中所有的空闲块。当用户向表中写数据时,服务器进程在这个空闲列表中查找足够数量的空闲块,将数据写入这些块。如果一个块已经被写满了,这个块就从空闲列表中被删除。在查找空闲块的过程中,为防止其他服务器进程使用同样的空闲块,服务器进程将对空闲列表加锁,只有空闲列表上的锁被释放后,其他服务器进程才可以在空闲列表中查找空闲块。如果用户在某个表上的事务很频繁,那么空闲列表将成为延缓事务执行的瓶颈。
自动管理方式是Oracle 11g数据库默认采用的段管理方式。这种管理方式是这样实现的:在每个段的头部有一个位图,在位图中记录当前段中每个数据块的状态,用二进制数0和1表示数据块的状态,每个数据块在位图中只占一位。使用位图的好处首先是节省空间,其次,当用户向表中写入数据时,服务器进程只要扫描位图就可以查找空闲数据块,而且不需要对位图加锁。
在创建表空间时,需要为表空间指定段空间管理方式。