Oracle 存储结构一

了解块中表行数据的存储

Oracle数据存储模型

逻辑结构在左,物理结构在右

有一个关系使用虚线绘制,表示段与数据文件的多对多关系。之所以使用虚线表示关系,是因为这种多对多关系不应存在。

表空间实体消除了段与数据文件之间的多对多关系。一个表空间可以包含多个段,而且可以由多个数据文件组成。这意味着,一个段可以分布在多个数据文件中,而任一数据文件可以包含多个段的全部或一部分。

“段”实体表示存储数据从而需要表空间中的空间的任何数据库对象。典型的段是表,但也存在其他段类型,主要是索引段和撤销段。任何一个段可以仅存在于一个表空间中。

Oracle块是数据库的基本I/O单元。数据文件设置为连续编号的oracle块。对于表空间而言,Oracle块的大小固定不变(一般而言,数据库中多有表空间的块大小都是相同的),默认大小是8KB。行可能只有数百个字节,因此,一个块中可能有多个行,但在会话需要行时,将从磁盘将整个块读入到数据库缓冲区缓存中。同样,如果数据库缓冲区缓存中的一行中的一列发生了变化,DBWn最终也将整个块协会到源数据文件中,从而覆盖以前的版本。块大小由DB_BLOCK_SIZE参数控制。在创建数据库后,DB_BLOCK_SIZE用于设置构成SYSTEM表空间的数据文件的格式,所以固定不变。如果后来发现块大小不合适,唯一办法是新建一个数据库,并将所有数据传输到其中。块由数据文件中的编号唯一标识,仅块号是不够的。

如果在管理空间时,每次仅管理一个块,那么将是一项棘手的任务,为此,又将块组合成了区间。区间是一个数据文件中一组连续编号的Oracle块。这些区间可能位于构成表空间的任何或所有数据文件中。可以根据段的维度(区间根据每个段连续编号,从零开始)或数据文件的维度(每个区间在一个文件中,从某个Oracle块编号开头)确定。

段、区间、块和行

数据存储在段中。数据字典视图DBA_SEGMENTS描述了数据库中的每个段。

[email protected] prod>select segment_type,count(1) from dba_segments group by segment_type order by segment_type;

SEGMENT_TYPE         COUNT(1)
------------------ ----------
CLUSTER                    10
INDEX                    2379
INDEX PARTITION           300
LOB PARTITION               1
LOBINDEX                  724
LOBSEGMENT                724
NESTED TABLE               33
ROLLBACK                    1
TABLE                    1625
TABLE PARTITION           144
TYPE2 UNDO                 10

11 rows selected.

[email protected] prod>

段类型:

  • TABLE 这些是堆结构的表,其中包含以随机顺序存储的变长度的数据行。虽然典型的段是表段,但要注意,不能说表就是段,还有更复杂的表组织使用其他段类型。
  • INDEX 索引是键值的有序列表,相应的指针ROWID指向每行的物理位置。ROWID指定行位于哪个数据文件的那个Oracle块中,并指定行在块中的编号。
  • TYPE2 UNDO 这些是撤销段(不能讲它们称为“type2 undo”段),存储数据的更改前版本,为了提供完整性(回滚,读取一致性和隔离),这些是必需的。
  • TABLE PARTITION 可以将表分成多个区。如果这样的话,分区将称为一个个的段,而表本身完全不是段:仅以分区综合的形式存在。堆表的每个表分区在本身的表段中,成为堆表结构。这些段可能使用不同的表空间,这意味着,可以将一个表分布到多个表空间中。
  • INDEX PARTITION 默认方式下,一个索引在一个段中,但是,也可以对索引进行分区。如果对表进行分区,通常也会对这些表上的索引进行分区。
  • LOBSEGMENT、LOBINDEX、LOB PARTITION如果将列定义为大对象数据类型,那么,仅在表本身存储一个指针,此指针指向列数据实际所在的不同段中的条目。LOB可以拥有在此基础上构建的索引以便快速访问对象中的数据,另外,可以对LOB进行分区。
  • CLUSTER Cluster段包含多个表。分区将一个表分布在多个段中,而Cluster与此相反,允许将多个表反规范化(denormalize)为一个段。
  • NESTED TABLE 如果将一个表列定义为本身就具有列的用户定义的对象类型,那么,列可以作为嵌套表,存储在自身的段中。
  • ROLLBACK

每个段都有一个或多个区间。创建段时,Oracle将在指定的任何表空间中为其分配区间。最后,随着数据的输入,区间将被填满。此后,Oracle将在同一表空间(但不一定在同一个数据文件中)分配第二个区间。如果知道段需要更多空间,则可以手动分配区间。如何精确地确定段的位置:

[email protected] prod>create table scott.newtab(c1 date) segment creation immediate;

Table created.

[email protected] prod>select tablespace_name,file_id,extent_id,block_id,blocks,bytes
  2  from dba_extents where owner=‘SCOTT‘ and segment_name=‘NEWTAB‘;

TABLESPACE_NAME                   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS      BYTES
------------------------------ ---------- ---------- ---------- ---------- ----------
USERS                                   4          0        528          8      65536

[email protected] prod>alter table scott.newtab allocate extent;

Table altered.

[email protected] prod>select tablespace_name,file_id,extent_id,block_id,blocks,bytes
  2  from dba_extents where owner=‘SCOTT‘ and segment_name=‘NEWTAB‘;

TABLESPACE_NAME                   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS      BYTES
------------------------------ ---------- ---------- ---------- ---------- ----------
USERS                                   4          0        528          8      65536
USERS                                   4          1        536          8      65536
[email protected] prod>select tablespace_name,file_name from dba_data_files where file_id=4;

TABLESPACE_NAME
------------------------------
FILE_NAME
------------------------------------------------------------------------------------------------------------------------------------------------------
USERS
/u01/oradata/prod/users01.dbf

[email protected] prod>

第一个命令完全依赖于存储的默认设置创建表SCOTT.NEWTAB。此后,针对DBA_EXTENTS的查询显示此段仅包含一个区间(区间编号0)。此区间位于文件编号4中,长度为8个块。在8个块中,第一个块的编号是528。区间大小是64KB,块大小是8KB。下一个命令强制Oracle在即使第一个区间不满的情况下将另一个区间分配给段。下一个查询显示,此区间编号为1,也在文件编号4中,正好从区间0之后开始。注意,无法从上面例子中清晰地判断表空间是否由多个数据文件组成,这是因为Oracle计算出在何处分配下一个区间的算法并不接着仅使用数据文件。如果表空间确实由多个数据文件组成,则可以使用下列语法重写Oralce的选择:

ALTER TABLE tablename ALLOCATE EXTENT STORAGE (DATAFILE ‘filename‘);

最后一个查询继续查看DBA_FILES来确定区间分配到的文件的名称,以及数据文件所属的表空间的名称。为了确定表的表空间,也可以查询DBA_SEGMENTS视图。

一个区间有一组连续编号的块组成。每个块都包含标题区域和数据区域。标题的大小可变,从块的顶部向下延伸。除了其他信息之外,行标题还包含行目录(列出每行在块中的开始位置)和行锁信息。数据区域按由下而上的方式填充。二者之间可能有空闲空间,也可能没有。

可以导致块标题增长的事件包括插入和锁定行。数据区域一开始是空的,随着在其中插入行(对于索引段的块,将插入索引项),它将变满。随着行的插入、删除和更新(可能导致行大小的更改),空闲空间中会出现碎片,但这无关紧要,因为在将块复制到数据库缓冲区缓存中的缓冲区后,这些都在内存中发生。在必要时,会在DBWn将块写回数据文件之前,将空闲空间接合称一个连续区域。

原文地址:https://www.cnblogs.com/zhaochunyi/p/10654883.html

时间: 2024-10-04 07:22:02

Oracle 存储结构一的相关文章

Oracle存储结构

Oracle数据库的存储结构分为逻辑存储结构和物理存储结构. 一.逻辑存储结构 逻辑存储结构主要描述Oracle数据库的内部存储结构,即从技术概念上描述在Oracle数据库种如何组织.管理数据.因此,逻辑存储结构是和操作系统平台无关的,是由Oracle数据库创建和管理的. 从逻辑上来看. 数据库是由一个或者多个表空间等组成. 一个表空间(tablespace)由一组段组成, 一个段(segment)由一组区组成, 一个区(extent)由一批数据库块组成, 一个数据库块(block)对应一个或多

Oracle存储结构深入分析与管理_超越OCP精通Oracle视频教程培训07

课程目标 Oracle视频教程,风哥本套oracle教程培训学习BBED.数据块,内容包括Oracle数据存储结构的深入分析,表空间(tablespace),段(segments),区(Extent),数据库块( Database Block),表,索引,SYSTEM与SYSAUX及temp临时表空间的日常管理与维护. 适用人群 IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 课程地址: http://edu.51cto.com/course/course_id-38

详解Oracle存储结构 掌握基本操作管理

2018.10.14那天我写了Oracle12C 的安装并初步了解了一下Oracle体系结构中数据库和实例.从中我们知道: 数据库是磁盘上数据的集合,位于收集和维护相关信息的数据库服务器上的一个或多个文件中.数据库由各种物理和逻辑结构组成,而表则是数据库中最重要的逻辑结构.表由包含数据的相关行和列组成. 组成数据库的文件主要分为两类:数据库文件和非数据库文件.两者之间的区别在于存储何种数据.数据库文件包含数据和元数据,非数据库文件则包含初始参数和日志记录信息等.数据库文件对于每时每刻正在进行的数

01.Oracle存储结构深入分析与管理的课程内容介绍

课程概述: 1.上章课程内容回顾 2.本章课程内容介绍 3.学习本套课程前言 学习完上章节部分后,应能掌握以下内容: Oracle网络相关概念与常用配置文件 熟悉监听管理工具 创建与管理监听服务 使用tnsping测试Oracle Net的连接 监听静态注册与动态注册 如何增加数据库service 生产环境如何配置第二个监听优化数据传输 Oracle服务器 进程中的LOCAL=NO和LOCAL=YES Oracle监听与客户端配置要点分析 配置文件listener.ora和tnsnames.or

oracle存储结构_表空间-笔记

oracle数据库,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件. 表空间的定义:存放数据的一个容器.表空间由一个数据文件或多个数据文件组成,一个数据文件只属于一个表空间.-----(这个容器会随着数据文件的增加而增大) 表空间的作用能帮助DBA用户完成以下工作:    1.决定数据库实体的空间分配;    2.设置数据库用户的空间份额;    3.控制数据库部分数据

Oracle 存储结构详解

1.一个数据文件只能同时属于一个表空间 2.段是可以跨域数据文件的.但是一般不能跨越表空间.分区表可以跨越表空间,堆表不能跨越表空间. 3.区是连续的block组成的,不能跨域文件.对于区表空间有两种不同的管理方式:本地的管理方式和数据字典的管理方式.建立表空间的时候的可以设定使用哪种方式 数据字典形式 UET$ used   FER$ free  不适合并发很高的情况 本地管理方式   使用bit map(位图):如果使用了表示为1,没有使用表示为0,只要0是连续的,表示就是连续的空间,就不需

Oracle存储(物理+逻辑)结构

Oracle存储结构:物理结构+逻辑结构 Oracle 数据库存储逻辑结构 在操作系统中无法找到逻辑存储结构所对应的文件,但通过查询Oracle数据库的数据字典,可以找到逻辑存储结构的描述. 逻辑存储结构包括表空间,段,区,数据块.逻辑结构之间的关系是:多个块组成区,多个区组成段,多个段组成表空间,多个表空间组成逻辑数据库. 表空间(多个表空间组成逻辑数据库) 段(多个段组成表空间) 区(多个区组成段) 数据块(多个数据块组成区) 一个区:一个区只能在一个数据文件中. 段中的各个区:一个段中的各

DBA_Oracle基本体系架构(概念)(每个Oracle开发员和维护员都必须熟知的一些关于Oracle底层结构的概念)

2014-07-26 BaoXinjian 一. Oracle体系结构基本概念 1. Oracle总体结构分为三个部分 第一部分:系统全局区(SGA) 第二部分:程序全局区和后台进程 第三部分:Oracle的文件 2. 从功能角度接那些划分 存储结构 包括: 控制文件.数据文件和日志文件 作用: 由这些文件就构成了Oracle的物理存储结构. 内存结构 包括: 系统全局区(SGA) 和 程序全局区(PGA) 作用: 使用内存最多的是SGA,也是影响数据库系统性能最大的一个参数. 进程结构 包括:

ORACLE管理存储结构之物理机构+逻辑结构【weber出品】

一.数据库的存储结构有物理结构和逻辑结构组成的 物理结构:物理上,oracle是由一些操作系统文件组成的 SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/undotb