在手动管理的block中,采用手动管理的本地管理表空间中的段和数据字典管理的表空间中的段
中的空闲数据块的管理都使用位于段头部的空闲列表来管理,例如SYSTEM表空间是本地管理表空
间,但是它是采用了手动段空间管理,所以也是用FREELIST来管理段中的空闲数据块的。
空闲列表是一个逻辑上的链表,在段的HEADER BLOCK中记录了一个指向第一个空闲块的BLOCK ADDRESS,第一个DB BLOCK中同时也记录了指向下一个空闲块的BLOCK ADDRESS。以此形成一个单向链表。
试验过程:
1、新建一个手动管理的表空间
create tablespace user_test datafile
'C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\user_test01.DBF'
size 20M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT MANUAL;
2、在其中新建表:
CREATE TABLE T3 (ID NUMBER)
TABLESPACE USER_TEST
3、先插入3条记录:
INSERT INTO T3(ID) VALUES(2);
INSERT INTO T3(ID) VALUES(3);
INSERT INTO T3(ID) VALUES(4);
4、查看表占据的block
SELECT * FROM user_EXTENTS WHERE segment_name='T3' --查看到的开始block为9
select id,DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid),DBMS_ROWID.ROWID_OBJECT(rowid)
from t3 --查看到blockid为10
这时表至少占据了两个block的空间
5、dump出9的block:
alter system dump datafile 6 block 9
Start dump data blocks tsn: 15 file#: 6 minblk 9 maxblk 9
buffer tsn: 15 rdba: 0x01800009 (6/9)
scn: 0x0000.002db04a seq: 0x01 flg: 0x00 tail: 0xb04a1001
frmt: 0x02 chkval: 0x0000
type: 0x10=DATA SEGMENT HEADER - UNLIMITED--第一个block的类型
.
.
.
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 1 #blocks: 7
last map 0x00000000 #maps: 0 offset: 4128
Highwater::
0x0180000b(下一个空闲block) ext#: 0 blk#: 1 ext size: 7
#blocks in seg. hdr's freelists: 1
#blocks below: 1
mapblk 0x00000000 offset: 0
Unlocked
Map Header:: next 0x00000000 #extents: 1 obj#: 53443 flag: 0x40000000
Extent Map
-----------------------------------------------------------------
0x0180000a length: 7
nfl = 1, nfb = 1 typ = 1 nxf = 0 ccnt = 1
SEG LST:: flg: USED
lhd: 0x0180000a ltl: 0x0180000a --空闲的block
6、测试将0x0180000a这个block塞满,
执行:
BEGIN
FOR i in 1..1000 loop
insert into t3 values(i);
end loop;
commit;
END;
7、之后在dump出9这个block
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 1 #blocks: 7
last map 0x00000000 #maps: 0 offset: 4128
Highwater::
0x0180000c ext#: 0 blk#: 2 ext size: 7
#blocks in seg. hdr's freelists: 1
#blocks below: 2
mapblk 0x00000000 offset: 0
Unlocked
Map Header:: next 0x00000000 #extents: 1 obj#: 53443 flag: 0x40000000
Extent Map
-----------------------------------------------------------------
0x0180000a length: 7
nfl = 1, nfb = 1 typ = 1 nxf = 0 ccnt = 2
SEG LST:: flg: USED
lhd: 0x0180000b ltl: 0x0180000b
红色标记处发生了变化。
以上为原创,转载请注明出处。
分享到:
相关推荐
逻辑存储结构主要包括数据块(Data Block)、扩展区(Extent)、段(Segment)以及表空间(Tablespace)。 - **数据块**:这是Oracle数据库中最小的数据存储单位,也是I/O操作的基本单位。 - **扩展区**:一组连续...
MSSM需要手动管理空间,包括pctused、freelists和freelist groups等参数。ASSM自9i版本引入,10g后成为默认设置,它废弃了pctused,但保留了pctfree,并通过自动管理空闲空间来提高性能。 在Oracle中,数据块...
在段空间管理方面,Oracle提供了手动段空间管理(Manual Segment Space Management, MSSM)和自动段空间管理(Automatic Segment Space Management, ASSM)。MSSM允许通过参数如PCTFREE、PCTUSED和FREELIST来精细...
Oracle提供了两种段空间管理方式:手动段空间管理(Manual Segment Space Management, MSSM)和自动段空间管理(Automatic Segment Space Management, ASSM)。MSSM使用PCTFREE、PCTUSED和FREELIST等参数手动管理...
Oracle数据库的逻辑结构是其数据管理和存储的核心,它主要由四个层次构成:表空间(TABLESPACE)、段(SEGMENT)、区(EXTENT)和块(BLOCK)。这一结构使得数据库能够高效地组织和管理数据。 1. **表空间...
本文将围绕 Oracle 的内部工具 BBED (Block Browse and Edit) 来展开讨论,旨在帮助读者更好地理解数据块的结构及其在数据库中的作用。 #### 二、Oracle 数据块概述 Oracle 数据库的核心存储单元是数据块,它由一...
段的空间管理有两种模式:手动段空间管理(MSSM)和自动段空间管理(ASSM)。MSSM允许用户通过PCTFREE、PCTUSED和FREELIST参数精细控制空间使用,而ASSM使用位图来跟踪可用空间,简化了空间管理,但只支持PCTFREE...
- **类型**:根据数据管理方式的不同,可以分为自动扩展区和手动扩展区。 3. **段(Segment)** - **定义**:段是一组相关的区,用于存储某一类数据(如表数据、索引数据等)。 - **类型**:根据存储数据的类型...
- `SEGMENT SPACE MANAGEMENT MANUAL`:手动管理方式,需要手动管理空闲列表。 #### 示例 以下是一个创建表空间的具体示例: ```sql CREATE TABLESPACE "IMAGEDATA" NOLOGGING DATAFILE 'D:\oracle\oradata\DATA...
### Oracle 学习笔记知识点详解 #### 一、Block(块) ...综上所述,Oracle数据库中的Block、Extent和Segment构成了其存储架构的基础,通过合理的管理和配置这些组件,可以有效提高数据的存储效率和访问性能。
对于段的空间管理,可以手动通过PCTFREEn、PCTUSEDn和FREELIST等参数进行控制,也可以采用自动段空间管理(ASSM),利用位图跟踪空闲空间,简化管理。 在存储子句的优先级方面,可以在段级别指定存储参数,以覆盖表...
段(Segment)、分区(Partition)和块(Block)是更细粒度的存储结构,段是逻辑存储单元,通常代表一个表或索引;分区则是对大表进行水平切分,提高查询效率;块是Oracle的最小I/O单位,存储数据行和索引项。 ...
表空间的管理策略包括自动管理与手动管理,例如,撤销表空间的自动管理通过UNDO_TABLESPACE参数设定。 接下来,逻辑存储结构的第二层是数据段(SEGMENT),它是由一个或多个区(EXTENT)组成的。数据段代表了一个...
范围进一步组合成段(segment),段是特定逻辑存储结构的所有数据的集合,可以跨越多个数据文件。对于索引,每个索引对应一个索引段。 在维护B-tree索引时,我们可以通过查询数据库的系统表来检查索引的状态。例如...
此外,表空间的区(Extent)和段(Segment)管理应采用自动分配的方式,且快(Block)大小设定为8MB。这些参数的设定是为了确保表空间能够根据数据库活动的需要动态调整大小,同时简化管理。 在Oracle EM中创建表...
自动管理方式(Automatic Segment-Space Management, ASSM)更加高效,因为它使用位图来记录段内空间的使用情况,能够更好地适应数据的变化,提高空间利用率。 #### 六、数据块可用空间的有效性及优化 为了提高...
在Linux环境下,使用GCC编译器时,程序的内存结构通常包含文本段(Text Segment)、数据段(Data Segment)、BSS段(Block Started by Symbol Segment)和堆(Heap)。文本段包含程序的代码部分,是只读的;数据段...
- 包括表空间、段(Segment)、区(Extent)和块(Block)等层次。 - **6. OEM Oracle企业管理器** - 提供图形界面,用于管理数据库实例和执行日常维护任务。 - **7. 管理ORA实例** - 包括启动、关闭和监控数据库实例...
16. 一个数据库实例包括Oracle内存结构、Oracle I/O结构和Oracle后台进程。正确答案是D。 17. 用于将脏数据块写入数据文件的是DBWR (Dbwriter)。正确答案是A。 18. 数据库启动时,会在挂载数据库阶段读取控制文件...
- **自动管理**:栈中的内存是自动管理的,无需程序员手动释放。 - **高效访问**:栈的内存分配和释放效率非常高,因为它是按照顺序进行的。 ### 总结 BSS段、数据段、代码段、堆与栈都是程序运行时必不可少的内存...