Oracle的存储结构
在ORACLE数据库中对于数据存储的管理可以从两方面来论述。从逻辑上来说,ORACLE是将数据存储在表空间中的表里面,从物理上来说,ORACLE是将数据存储在磁盘的数据文件里。具体的结构如下图所示:
一个ORACLE数据库可以包含多个TABLESAPCE;一个表空间物理上可以包含多个DATAFILE,逻辑上可以包括多个SEGMENT(TABLE、INDEX等);一个SEGMENT可以包含多个EXTENT并且可以跨数据文件存储数据;一个EXTENT包含多个DATA –BLOCK,其不可以跨数据文件存储;一个DATA-BLOCK包含多个OS-BLOCK。
TABLESPACE的管理
TABLESPACE的管理可以分为两种管理方式:DATA-DICTIONARY MANAGEMENT和LOCAL MANAGEMENT。首先必须说明的是:对于在表空间上的说的管理方式是针对表空间里EXTENT的管理,即如何分配和回收EXTENT。在这两种管理方式中前者基本上已经被淘汰了,DATA-DICTIONARY MANAGEMENT 就是用两个数据字典(DEBIT、CREDIT)来管理哪些EXTENT已经被分配了哪些EXTENT还没有被分配,这种管理方式的缺点就是每分配和回收EXTENT时都需要去查询和更新这个两数据字典,这样就消耗了大量的系统资源,对PERFORMANCE上有很大的影响。对于LOCAL MANAGEMENT这种管理方式,ORACLE是在第一个数据文件的头部存储了一个BITMAP(010100111011001100010001110),当一个EXTENT被分配给了某个SEGMENT时只需要将1改为0即可,这对PERFORMANCE有很大的提高。具体的指令如下:
CTEATE TABLESPACE tab_sapce DATAFILE ‘C:/oracle/product/10.1.0/oradata/orcl/datafile/tab_sapce.dbf’ SIZE 100M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128k
这里需要指出的是对于LOCAL MANAGEMENT的管理方式还可指定分配的EXTENT为统一的大小(UNIFORM SIZE 128k)。
前面讲了TABLESPACE的管理方式,现在现在再讲一下TABLESPACE的空间扩展方法。这里有三种方法:
1. 向TABLESPACE