ORACLE的逻辑存储结构

逻辑存储结构

逻辑存储结构是由 Oracle数据库创建识别,操作系统不知道这些结构,操作系统层面的是oracle的物理存储结构,如数据文件,控制文件,日志文件等,详情移步我的上两篇博文

oracle数据块(block)

oracle 数据块是数据库中最小的逻辑存储单元,是数据库执行输入、输出操作的最小单位,由一个或多个操作系统块构成。一个逻辑数据块对应于特定数量的物理磁盘空间,例如 2 KB

--查看目前库里数据块的大小(数据库创建时设置,之后无法更改,除非重新创建数据库。)
select * from v$parameter where name like '%db_block_size%'

段视图中查看:
PCTFREE:块中保留用于UPDATE操作的空间百分比,当数据占用的空间达到上限时,新的数据将不能插入此块中,为10的话就是数据块最多用9成
PCTUSED:什么时候重新往快里放数据,为40的话,就是低于4成又可以继续存数据了

块结构:
块头:存放一些基本信息,如物理位置,块所属的段类型(数据段、索引段、回滚段等)

表目录:如果块中存储的数据为表数据,则表目录中保存这个表的相关信息

行目录:如果块中存储的数据为表数据,则行目录中保存数据行的相关信息。

块头、表目录和行目录组成块的头部信息(overhead),这部分不存数据库中实际的数据,而是用来记录该块的逻辑结构,而且这部分占用的空间不是固定的,大约在84-107字节之间。

行记录:真正存放数据的区域,这部分空间已被使用。

空闲空间:未使用的区域,用于新行的插入或者已经存在行的更新。(这里有个概念行迁移:就是当update操作时,块中空闲的空间不够保存修改的数据,那么记录就将保存到另一个拥有足够空间的块中,而只在原块上保留一条指向新块的rowid,这就是行迁移row migration)


行链接和行迁移

都是原块上保留一条指向新块的rowid

往数据库中插入(INSERT)一行数据,这行数据很大,以至于一个数据块存不下一整行,Oracle就会把一行数据分作几段存在几个数据块中,这个过程叫行链接(Row Chaining)。

用户执行UPDATE更新这条记录,这个UPDATE操作使这条记录变长,这个过程叫行迁移(Row Migrating)。

区(extent) 又称扩展数据块

区是由一系列连续的数据块构成的逻辑存储单元,是存储空间分配的最小单元(所以表空间的管理实际上就是针对于区的管理)。当创建一个数据库对象时,oracle 为对象分配若干个区,以构成一个段来为对象提供初始的存储空间。当段中已分配的区都写满后,oracle 会为段分配一个新区,以容纳更多的数据。构成一个段的所有区只能是在一个文件中

--查看区(扩展块)
select * from user_extents;

--查看表中记录在块中的信息
select rowid,dbms_rowid.rowid_relative_fno(rowid) rel_fno,dbms_rowid.rowid_block_number(rowid)
blockno from user_test;

段(segment)

段是由一个或多个连续或不连续的区组成的逻辑存储单元,用于存储特定的、具有独立存储结构的数据库对象(表段、索引段、临时段和回退段)

--查看段
select * from user_segments;

--查看表(表段)
select * from user_tables;
--查看索引(索引段)
select * from user_tab_comments;

注意:在创建创建表、索引和分区时使用延迟段创建来仅更新数据库元数据。,就是说创建表后不会立即创建段,而是插入数据后才会创建

撤销段(undo segment)

Oracle 数据库维护事务操作的记录,统称为撤消数据

回滚活动事务
恢复已终止的事务
提供读取一致性
执行一些逻辑闪回操作

表空间(tablespace)

表空间是 oracle 数据库最大的逻辑存储单元,数据库的大小从逻辑上看就是由表空间决定的,所有表空间大小的和就是数据库的大小,表空间根据存储数据类型的不同,分为系统表空间和撤销表空间、临时表空间和用户表空间

--查看表空间
select * from user_tablespaces;
select * from dba_tablespaces;

撤销表空间(undo tablespace)

undo表空间储存数据修改前的备份,如插入的话记录添加的rowid信息,修改的话记录修改的旧值,删除的话记录删除的整行数据,如果一个事务未提交,另一事务所查询的数据将由undo信息提供

表空间空间管理技术不同分为:

在表空间视图的EXTENT_MANAGEMENT字段查看
本地管理的表空间-LMT(默认)
字典管理的表空间-DMT(数据库中的数据字典表管理,Oracle 8i以前使用)

在本地管理的表空间中,数据库可以使用自动段空间管理 (ASSM) 或手动段空间管理 (MSSM) 来管理段

在表空间视图的SEGMENT_SPACE_MANAGEMENT字段查看
mssm=Manual Segment Space Management
assm=automatic Segment Space Management

逻辑空间管理

Oracle 数据库必须使用逻辑空间管理来跟踪和分配表空间中的扩展数据块

本地管理的表空间在数据文件头(Ddta File Header)中维护一个位图,以跟踪数据文件正文中的可用空间和已用空间。

每个位对应于一组块。分配或释放空间后,Oracle 数据库会更改位图值以反映块的新状态

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值