在Oracle数据库中,段(Segment)是存储数据的基本单位,一个段可以包含多个区(Extent),而每个区又由多个盘区(Block)组成,在段的头部,有一个非常重要的结构,即HEADER_BLOCK,本文将对Oracle中的段、区、盘区以及HEADER_BLOCK结构进行详细的分析与介绍。
Oracle中的段(Segment)
在Oracle中,段是存储数据的基本单位,一个段可以包含多个区(Extent),而每个区又由多个盘区(Block)组成,段可以分为以下几种类型:
1、数据段(Data Segment):存储实际的数据;
2、索引段(Index Segment):存储索引数据;
3、临时段(Temporary Segment):存储临时数据;
4、回滚段(Rollback Segment):存储事务回滚信息。
Oracle中的区(Extent)
区是段的子集,它是由一组连续的盘区组成的,一个段可以包含多个区,每个区的起始地址都是相邻的,区的主要作用是分配和管理盘区,以及提高I/O操作的效率。
Oracle中的盘区(Block)
盘区是数据库中最小的物理存储单元,它是由一组连续的数据块组成的,一个区可以包含多个盘区,每个盘区的起始地址都是相邻的,盘区的主要作用是存储数据,以及提高I/O操作的效率。
Oracle中的HEADER_BLOCK结构
在Oracle中,每个盘区的头部都有一个HEADER_BLOCK结构,HEADER_BLOCK的主要作用是存储盘区的元数据信息,如盘区的起始地址、结束地址、空闲空间等,HEADER_BLOCK的结构如下:
字段名 | 类型 | 描述 |
DBA_HDR_BLKID | NUMBER(6) | 盘区的唯一标识符 |
BLOCK_ID | NUMBER(6) | 盘区的编号 |
BLOCK_TYPE | NUMBER(3) | 盘区的类型,如DATA、INDEX、TEMPORARY等 |
BLOCK_SIZE | NUMBER(10) | 盘区的大小,以字节为单位 |
BLOCK_START | NUMBER(6) | 盘区的起始地址 |
BLOCK_END | NUMBER(6) | 盘区的结束地址 |
FREELIST | NUMBER(6) | 空闲列表的指针 |
FREELIST_CHUNK | NUMBER(6) | 空闲列表的块大小 |
FREELIST_COUNT | NUMBER(10) | 空闲列表中的空闲块数量 |
PCT_FREE | FLOAT | 盘区的空闲百分比 |
ALLOCATED_CHUNKS | NUMBER(10) | 已分配的块数量 |
FIRST_ALLOCATION | LOB | 指向第一个已分配块的指针 |
NEXT_ALLOCATION | LOB | 指向下一个已分配块的指针 |
PREV_ALLOCATION | LOB | 指向上一个已分配块的指针 |
LAST_ALLOCATION | LOB | 指向最后一个已分配块的指针 |
FREELIST_HDR | LOB | 指向空闲列表头的指针 |
EXTENT_MAP | LOB | 指向扩展映射表的指针 |
BLOCK_CHECKSUM | SHORT | 盘区的校验和 |
BLOCK_FLAGS | SHORT | 盘区的标志位 |
BLOCK_DBA | SHORT | DBA版本号 |
BLOCK_CREATED | SHORT | 创建时间 |
BLOCK_LAST_DIT | SHORT | 最后一次修改时间 |
BLOCK_MOVED | SHORT | I/O状态标志 |
BLOCK_PCT_MOVED | FLOAT | I/O状态百分比 |
BLOCK_BYTES | SHORT | 块中的实际字节数 |
BLOCK_HWWM | SHORT >硬件写保护掩码 | |
BLOCK_HWWME | SHORT >硬件写保护使能掩码 | |
BLOCK_FLASHFILL | SHORT >闪存填充状态标志 | |
BLOCK_COMMIT >SHORT >提交状态标志 | ||
BLOCK_PCT_COMPACTED>FLOAT >压缩百分比 | ||
BLOCK_STATE >SHORT >块的状态 | ||
BLOCK_MIGRATE >SHORT >迁移状态标志 | ||
BLOCK_DEMOTE >SHORT >降级状态标志 | ||
BLOCK_REUSE >SHORT >重用状态标志 | ||
BLOCK_PCT_DIRTY >FLOAT >脏页百分比 | ||
BLOCK_PCT_READ >FLOAT >读页百分比 | ||
BLOCK_PCT_WRITE >FLOAT >写页百分比 | ||
BLOCK_PCT_INVALID >FLOAT >无效页百分比 | ||
BLOCK_PCT_MOVED >FLOAT >移动页百分比 | ||
BLOCK_PCT_NEW >FLOAT >新页百分比 | ||
BLOCK_PCT_REUSED >FLOAT >重用页百分比 | ||
BLOCK_PCT_FREE >FLOAT >空闲页百分比 | ||
BLOCK_PCT_ZERO >FLOAT >零页百分比 | ||
BLOCK_PCT_NORMAL >FLOAT >正常页百分比 | ||
BLOCK_PCT_DIRTYONCURRY >FLOAT >当前脏页百分比 | ||
BLOCK_PCT_CLEANONCURRY >FLOAT >当前干净页百分比 | ||
BLOCK_PCT_CORRUPT >FLOAT >损坏页百分比 | ||
BLOCK_PCT_UNAVAILABLE >FLOAT >不可用页百分比 | ||
BLOCK_PCT_ACCESSED >FLOAT >访问页百分比 | ||
BLOCK_PCT_MODIFIED >FLOAT >修改页百分比 |
相关问题与解答
问题1:Oracle中的段有哪些类型?如何区分它们?
答:Oracle中的段主要有四种类型:数据段(Data Segment)、索引段(Index Segment)、临时段(Temporary Segment)和回滚段(Rollback Segment),可以通过查询DBA\_\_\_\_\_\_\__\_\_\_\_\_\_\__\_\_\_\_\_\_\__\_\_\_\_\_\_\__\_\_\_\_\_\_\__\_\_\_\_\_\_\__\_\_\_\_\_\_\__{}视图来查看段的类型,查询数据段的信息可以使用以下SQL语句:SELECT FROM DBA\_{\}TABLESPACES;查询索引段的信息可以使用以下SQL语句SELECT FROM DBA\_{\}INDEXES;查询临时段的信息可以使用以下SQL语句SELECT FROM DBA\_{\}TEMP\_{\}FILES;查询回滚段的信息可以使用以下SQL语句SELECT * FROM DBA\_{\}ROLLBACK\_{\}SEGMENTS;。{TABLESPACES,INDEXES,TEMP\_{}FILES,ROLLBACK_{\}SEGMENTS}需要替换为相应的视图名称。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/507907.html