1、block:是Oracle中存储数据块的最小单位,所以数据最终都是存储在block中。它也被称为逻辑blocks或是页(pages)。每个操作系统都有自己的block size。而这里的block是Oracle自己的,不同于OS的blocks。可以通过设置DB_BLOCK_SIZE设置Oracle的block为OS的block的几倍,从而减少不必要的I/O。不管block中存放的数据是表、索引还是cluster data,block的结构都是一致:
@ block header: 这里主要存储一些数据块的基本信息,如数据块地址,块类型(table data, index等),以及一些事务信息。为了加强理解,我们dump一下block看看:
SQL> select dbms_rowid.rowid_relative_fno(rowid) as fno, dbms_rowid.rowid_block_number(rowid) from t1 where b=1;
FNO DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
———- ————————————
4 388
SQL> alter system dump datafile 4 block 388;
在dump file中,我们看到
Block header dump: 0×01000184
Object id on Block? Y
seg/obj: 0xcd17 csc: 0×00.8d80b itc: 2 flg: E typ: 1 – DATA
brn: 0 bdba: 0×1000181 ver: 0×01 opc: 0
inc: 0 exflg: 0
# 以下是一些比较重要的事务信息,每当一个事务开始时,都要获得一个ITL entry, 否则将会出现ITL 等待。
Itl Xid Uba Flag Lck Scn/Fsc
0×01 0×0002.005.0000010b 0×00800024.0128.32 –U- 66 fsc 0×0000.0008d8f3
0×02 0×0000.000.00000000 0×00000000.0000.00 —- 0 fsc 0×0000.00000000
data_block_dump,data header at 0xceb6864
@ table directory 记录该块中 table rows 的信息,如下所示:
===============
tsiz: 0×1f98
hsiz: 0×96
pbl: 0×0ceb6864
bdba: 0×01000184
76543210
flag=——–
ntab=1 // no. of tables, 除了cluster 以外,一般情况都为一
nrow=66 // 该block 上 rows 的数目
frre=-1
fsbo=0×96
fseo=0×402
avsp=0×36c
tosp=0×36c
@ row directroy 记录该块中记录的每一条记录的地址信息。如下所示:
0×12:pri[0] offs=0×402
0×14:pri[1] offs=0×46d
0×16:pri[2] offs=0×4d8
…
…
0×92:pri[64] offs=0×1ec2
0×94:pri[65] offs=0×1f2d
最终的记录条数应该和table directory 中的nrows相等。这部分空间一旦被分配,将不可能收回,只能在有新行insert时被重用。
** overhead:在block中,上述的header、table directory和row directory被合称为overhead。
@ row data 记录表中的实际数据。
@
free space 该部分主要用于update,insert等操作。 同时ITL entry 也可以在该部分获得。
附注:## 在data block中的free space的使用与优化:当数据被delete或update时,可能引起block产生free space对此:①如果有insert语句与相应释放block space的语句在同一个transaction中,则insert可以使用刚刚释放的block space;②如果insert语句与相应的释放block space的语句不在同一个transaction中,则释放的block space只有在事务被commit之后才能被使用。Oracle当发生以下两种情况会进行free space的合并:insert或update操作视图使用一个有足够free space的block;free space存在大量碎片,无法进行数据的insert等。
## row的链接与迁移:当一条记录row的数据太大时,可能无法放在一个block中,这种情况下Oracle往往会使用chain(链接)的方法;此外,当one row被update后,数据量增大,当前的block已经不能完全容纳时,Oracle会把该row数据整个迁移(migrates)到其他的数据块中,但在原来row的位置上保存一个指针,链接到新的地址上,大量的迁移、链接将会降低DB的I/O性能。
2、extent:extent 是每次分配给一个对象的逻辑最小单位,是由一定数量连续的block组成。一个或多个extent又组成了一个segment。
@ Extent的分配:对于本地管理表空间,DB会先确定能够分配extent的候选datafile,随后查询该datafile的bitmap,确定是否有所需大小的连续空闲blocks,直到找到满足的datafile。如果使用dictionary managed tablespace,则是去查询数据字典,而不是datafile头部的bitmap信息。另外,由于某些原因,如果想手工非配extent时,可以使用alter table table_name allocate extent。
@ Extent的收回: 当一个extent被分配给了某个object,除非这个obj被drop,否则extent将不会被其他obj所使用。除非 trauncate … drop storage.或者alter table … dealocate unused.(以上两种方法都不适用于index)。另外,对于rollback segments,如果指定了optimal参数,oracle会自己dealocate一些extent。
在dictionary managed tablespace中,如果所请求的ext 大于各个free extents 大小,这是oracle将聚合临近的extent,形成一个更大的extent。在local managed tablespace中,则无此限制。 一旦extent 被分配和回收,相应的文件头bitmap或者数据字典都会被更新。
3、segment:它是extents的集合,它包含了在表空间中所包含的具体逻辑存储机构的所有extents。例如一个未分区的table,index, cluster被成为一个段,一个被分区的index,table的一个partition 被成为一个段。对于temporary segment,主要用于排序等操作,只有当DB的内存无法存放相应的排序操作并无法找到其他更好的解决办法时,才会在临时表空间中创建temporary segment。以下语句都可能要创建temporary segment。
CREATE
INDEX
SELECT ... ORDER BY
SELECT DISTINCT ...
SELECT ... GROUP BY
SELECT
. . . UNION
SELECT ... INTERSECT
SELECT ... MINUS
相关推荐
表空间可以进一步细分为多个段(Segment),段又可以细分为多个区间(Extent),最终由数据块(Block)构成。通过这种方式,Oracle能够高效地管理存储空间,并实现数据的快速存取。 #### 三、数据文件的作用 数据...
Oracle数据库的存储结构主要包括Block、Extent、Segment、Tablespace和Database等。Block是最小的I/O单位, extent是一组连续的数据块,Segment是有共同结构的一个或几个区域,Tablespace是一组物理数据的逻辑组合...
### Oracle 学习笔记知识点详解 #### 一、Block(块) ...综上所述,Oracle数据库中的Block、Extent和Segment构成了其存储架构的基础,通过合理的管理和配置这些组件,可以有效提高数据的存储效率和访问性能。
4. data block, extent 和 segment 的区别 data block 是数据库中最小的逻辑存储单元。当数据库对象需要更多的物理存储空间时,持续的 data block 就构成了 extent。一个数据库对象拥有的所有 extents 被称为该对象...
在Oracle中,数据以数据块(block)的形式存储,这是最基本的存储单位,其大小由数据库创建时的DB_BLOCK_SIZE参数决定。数据块组成范围(extent),即一组连续的数据块,当对象需要更多的存储空间时,Oracle会分配新...
在Oracle数据库中,datablock、extent和segment是存储结构的重要组成部分。Datablock是数据库中最小的逻辑存储单元,当对象需要更多存储空间时,datablock会组成extent,而一个对象的所有extent形成了segment。理解...
在解析这些转储结果时,你需要理解Oracle的存储结构,如块、区(Extent)、段(Segment)以及表空间(Tablespace)的概念。此外,了解ROWID(Row Identifier)的组成也很关键,因为ROWID是定位数据库中具体行的唯一...
在 Oracle 数据库中,可以使用各种 join 操作来实现多表查询,例如 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 等。 五、ORACLE 列函数和分组 列函数是指对表中的列进行操作的函数,例如 SUM、AVG、MAX、MIN ...
Oracle数据库的逻辑结构包括方案(schema)对象、数据块(data block)、区间(extent)、段(segment)和表空间(tablespace)等。数据库由若干个表空间组成,表空间由表组成,表由段组成,段由区间组成,区间则由...
4. data block、extent 和 segment 的区别: data block 是数据库中最小的逻辑存储单元。extent 是连续的 data block 组成的存储单元。segment 是数据库对象拥有的所有 extents 的集合。 5. 检查表结构的方法: ...
4. **datablock、extent和segment的区别**: - **datablock**:数据库最小的逻辑存储单元。 - **extent**:由连续的datablock组成,是分配给数据库对象的存储空间。 - **segment**:对象的所有extents的集合。 5...
逻辑结构包括 database、tablespace、segment、extent 和 block。 Oracle 表空间的创建可以使用 CREATE TABLESPACE 语句,包括 BIGFILE、SMALLFILE 和 TEMPORARY 三种类型。创建表空间时需要指定数据文件的路径和...
1. **确定最大block_id**:通过查询`dba_extents`视图找到当前表空间中最大的block_id,计算出该block_id对应的大小。 2. **移动表、索引等对象**:将block_id大于目标表空间大小的表、索引、分区表等对象移动到一个...
在Oracle的逻辑结构中,数据组织成多层:数据块(Data Block)、数据区(Data Extent)、数据段(Data Segment)、逻辑对象(Logic Object)、表空间(Tablespace)和数据库(Database)。表空间是存储数据的主要...
通过以上内容,我们详细了解了Oracle中的表空间与数据文件的概念、分类以及它们在Oracle数据库存储结构中的作用,并学习了如何通过SQL查询来查看和管理这些表空间和数据文件。这对于管理和优化Oracle数据库的性能至...
此外,表空间的区(Extent)和段(Segment)管理应采用自动分配的方式,且快(Block)大小设定为8MB。这些参数的设定是为了确保表空间能够根据数据库活动的需要动态调整大小,同时简化管理。 在Oracle EM中创建表...
在使用Oracle数据库的过程中,遇到各种错误代码是在所难免的。了解并掌握这些错误的产生原因及解决方法对于初学者来说至关重要。 ##### ORA-01650: unable to extend rollback segment NAME by NUM in tablespace ...
每个段由一个或多个较小的存储单元——扩展区(Extent)组成,而每个扩展区又由一系列连续的数据块(Data Block)构成。 根据数据类型的不同,Oracle中有四种类型的段: 1. **永久数据段**(Permanent Data ...
4. data block, extent 和 segment 的区别 data block 是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的 data block 就组成了 extent。一个数据库对象拥有的所有 extents 被称为该...
4. 解释 data block , extent 和 segment 的区别 data block 是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的 data block 就组成了 extent . 一个数据库对象拥有的所有 extents 被...