ORACLE的逻辑结构。
ORACLE的逻辑结构的实体,从小到大依次为:
数据块(data block):数据块是ORACLE的存储基础,它由磁盘空间上的若干字节组成。
区(extent):一个区是两个或多个相邻的ORACLE数据块,它是空间分配单元。
段(segment):一个段是分配给一个逻辑结构(表,索引等对象)的一组区。
表空间(tablespace):表空间是一组数据文件,通常由相关的段组成。数据文件包含表空间中的所有逻辑结构的数据,如表和索引的数据。
下面我们来依次细聊各个逻辑机构。
1.数据块
上面介绍了,数据块是由操作系统的存储系统中磁盘空间的一定数目的字节组成。ORACLE数据块是ORACLE的最小存储逻辑部件,驻留ORACLE块的存储磁盘分为若干个磁盘块(disk block),一个磁盘块是一个包含指定字节数的相邻的存储区域---例如,4 096字节或32 768字节。那摸,ORACLE的数据块到底应该多大才合适呢?首先介绍一个初始化参数DB_BLOCK_SIZE,修改这个参数就能指定ORACLE数据块的大小。块尺寸是处理ORACLE的更新、选择或插入数据事务的最小单位,举个例子:如果使用64KB的ORACLE块尺寸,即使只想检索仅4个字符的名字,也必须读取含有这4个字符的整个64KB块。对于大多数系统来说,oracle建议使用8KB。
ORACLE块尺寸的确定应该基于数据库将要做的工作。如果行比较小且访问很随机,则选择较小的块尺寸,如果行比较小且访问主要是连续的(或是随机且连续的),或者如果有较大行,则选择较大的块尺寸。但是请务必将ORACLE数据块尺寸设定为磁盘块尺寸的倍数,这样能够提高大多数操作系统的性能。
可以使用ORACLE的转储功能将数据块转储出来细看里面的内容,下面我们就来做这个工作。
首相查出某表对象的块ID:
SQL> select segment_name,file_id,block_id from dba_extents where wner='XXXX' and segment_name like 'HANDLE_%';
SEGMENT_NAME FILE_ID BLOCK_ID
----------------------------------------------------------- ---------- ----------
HANDLE_LOG 10 79488
HANDLE_LOG 12 53248
HANDLE_LOG 13 147584
HANDLE_LOG
首相查出某表对象的块ID:
SQL> select segment_name,file_id,block_id from dba_extents where wner='XXXX' and segment_name like 'HANDLE_%';
SEGMENT_NAME
----------------------------------------------------------- ---------- ----------
HANDLE_LOG
HANDLE_LOG
HANDLE_LOG
HANDLE_LOG