oracle数据库中表、段、区、块是什么意思?

oracle数据库中表、段、区、块是什么意思?,第1张

oracle的逻辑结构包括表空间(tablespace),段(segment),区(extent),数据块(data block)\x0d\x0aoracle数据库在逻辑上是由多个表间组成的,表空间中存储的对象叫段,比如数据段,索引段,和回退段。段由区组成,区是磁盘分配的最小单位。段的增大是通过增加区的个数来实现的。每个区的大小是数据块大小的整数倍,区的大小可以不相同;数据块是数据库中最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位。块的大小由参数DB_BLOCK_SIZE设置,其值应设置为 *** 作系统块大小的整数倍。\x0d\x0a表空间\x0d\x0a表空间是Oracle数据库最大的逻辑结构,一个Oracle数据库在逻辑上由多个表空间组成,一个表空间只隶属于一个数据库。Oracle中有一个称为SYSTEM的表空间,这个表空间是在创建或安装数据库时自动创建的。主要用于存储系统的数据字典,过程,函数,触发器等;也可以存储用户的表,索引等。一个表空间可以有多数据文件,但是一个数据文件只能属于一个表空间。\x0d\x0a一个表空间就是一片磁盘区域,他由一个或者多个磁盘文件组成,一个表空间可以容纳许多表、索引或者簇等。每个表空间有一个预制的磁盘区域称为初始区间(initial extent)用完这个区间后再用下一个,直到用完表空间,这时候需要对表空间进行扩展,增加数据文件或者扩大已经存在的数据文件\x0d\x0a段\x0d\x0aOracle中的段可以分成4种类型:数据段、索引段、回滚段、临时段。\x0d\x0a数据段用来存储用户的数据,每个表都有一个对应的回滚段,其名称和数据表的名字相同。索引段用来存储系统、用户的索引信息。回滚段用来存储用户数据修改前的值,回退段与事务是一对多的关系,一个事务只能使用一个回退段,而一个回退段可存放一个或多个事务的回退数据。临时段用于order by语句的排序以及一些汇总。\x0d\x0a区\x0d\x0a区是磁盘空间分配的最小单位。磁盘按区划分,每次至少分配一个区。区存储于段中,它由连续的数据块组成。区的分配过程中,每次至分配5个区。如果所剩的空闲空间不够5个区,就会出现错误:ORA-01653。可以通过字典dba_tablespaces查询表空间中区的信息。可以通过字典user_tables查询段中区的信息。可以通过字典user_extents查询区的分配状况。我们可以通过以下SQL语句分别查询表空间、段、区中区的分配信息\x0d\x0aSQL>select * from dba_tablespaces\x0d\x0aSQL>select table_name, tablespace_name, min_extents, max_extents from user_tables\x0d\x0aSQL>select * from user_extents\x0d\x0a数据块\x0d\x0a数据块是数据中中最小的数据组织单位与管理单位,是数据文件磁盘存储空间单位,也是数据库I/O 的最小单位,数据块大小由DB_BLOCK_SIZE参数决定,不同的oracle版本DB_BLOCK_SIZE的默认值是不同的。

关于ORACLE数据库结构的简介

ORACLE的数据库结构大家都了解吗?如果不了解,下面我为大家整理了关于ORACLE数据库结构简介的文章,希望能为你提供帮助:

一、物理结构:

1、数据文件:ORACLE数据库包含若干数据文件,数据文件存储数据库数据,包括表、索引等等。数据文件的几个特点:

1)一个数据文件只允许分配给一个数据库

2)数据文件可设置为自动扩展

3)一个或多个数据文件构成表空间

在进行数据库 *** 作的时候,数据库先从内存寻找要 *** 作的数据,如果没有找到的话,再从数据文件取出数据放在内存中,然后才对内存中的数据进行相关的 *** 作。 *** 作完的数据并没有立即写到数据文件中(这样减少了磁盘的IO),而是放在内存中,然后由DBWn进程决定何时批量写入数据文件。

2、控制文件:每一个数据库都有一个或多个控制文件,控制文件包含了数据库的物理结构,包括:

1)数据库名

2)数据文件名及位置

3)重做日志文件名及位置

4)数据库的建立时间等等

一般一个数据库都有若干个控制文件镜像。数据库在打开的时候(ALTER

DATABASE OPEN),会读取控制文件中的信息来打开数据库。当数据库的物理结构发生变化的时候,比如增加一个数据文件、一组重做日志等等,控制文件都会自动地做相应的修改。在数据库物理结构发生变化后,最好重新备份一下控制文件,用于数据库恢复。

3、重做日志文件:重做日志中记录了数据的变化。一般一个数据库都会有两到三组重做日志文件。同一日志组的镜像最好分布于不同的磁盘上。

4、归档日志:当数据库启动归档的时候,重做日志会被自动归档到指定的位置。

5、初始化参数文件:包含了数据库启动时的配置信息

6、警告和跟踪日志文件

1)跟踪文件:每一个后台进程都有一个单独的'跟踪文件,比如当系统发现某一个进程有问题的时候,相关的信息就会写到相应的跟踪文件中。可以从数据库的跟踪文件来发现和调试数据库的错误。

2)警告文件,也叫警告日志。是一个特别的跟踪文件,它记录着数据库启动、运行中的相关信息,它是按时间顺序进行记录的。

7、备份文件

二、逻辑结构

1、表空间:相关逻辑对象的集合。在oracle10g中,在创建数据库的时候就自动创建了SYSTEM和SYSAUX表空间。

2、数据块:数据存储在数据块中,一个数据块的大小(DB_BLOCK_SIZE)由 *** 作系统块来决定。可以指定5种,分别为2K、4K、8K、16K、32K。

3、区:一系列连续的数据块组成区,区存储特定类型的数据,比如索引,表等等。

4、段:由一系列区组成段。

1)数据段:对于每一个非聚集表有一数据段,表的所有数据存放在该段。每一聚集有一个数据段,聚集中每一个表的数据存储在该段中。分区表中的每一个分区有一个数据段,分区中的数据存储在该段中。

2)索引段:每一个索引有一索引段,存储索引数据。分区索引中的每一分区有一个索引段。

3)回滚段:用于临时存储要撤消的信息,这些信息用于生成读一致性数据库信息,在数据库恢复时使用,回滚未提交的事务。系统回滚段用于处理系统事务,不建议用户使用系统回滚段来做其它 *** 作。

4)临时段:当一个SQL语句需要临时工作区时,由ORACLE建立临时段。当语句执行完毕,临时段的区退回给系统。

( )段 区段 块

Oracle中的段segment是占用磁盘存储空间的一个对象 从逻辑上讲一个数据库由若干表空间(TABLESAPCE)组成 每个表空间有若干个表(TABLE) 每个表又可以分为若干数据段(DATA SEGMENT) 索引段等 每个段又可分为若干数据库区间(EXTENT) 每个区间由若干数据块(BLOCK)组成 区段(EXTENT)是最小的分配单 块(BLOCK) 是最小的存储单位

( )常见的段类型

聚簇cluster 分为散列聚簇和B*树聚簇 通常用于存储多个表上的相关数据

可以在聚簇段中建表 此时这个表可能与其它表同在一个聚簇段中

表table 表段用于保存一个数据库表的数据 是最常用的段类型 通常与索引段结合使用

表分区partition或子分区subpartition 主要用于分区 与表段类型

索引index 这种段类型用于保存索引结构

Lob分区 子分区 索引 Lob段 用于保存大对象的结构 每个LOB列需要分别创建两个段 一个用于存储CLOB或BLOB的

实际数据块logsegment 另一个是用于跟踪这些LOB块在哪里的lobindex

嵌套表nested table 这是为嵌套表指定的段类型

回滚段 用于存放undo的数据

( )段的管理

手动段空间管理Manual Segment Space Management

手动设置FreeLists FreeList Groups PctUsed 其它参数来控制如何分配 使用 重用段空间 MSSM是oracle的遗留实现 许多版本都支持MSSM

自动段空间管理Automatic Segmnet Space Management

只需要控制与空间使用相关的PctFree 其它参数被忽略 ASSM只有在 i版本后才被引入 用于减少MSSM中的太多参数的管理

应用于ASSM段的存储设置只有Buffer_Pool PctFree IniTrans MaxTrans( g后的版本都会忽略这个参数) 其它存储和物理属性参数都不适用于ASSM段

段空间管理是从段的表空间继承来的一个属性 而且段都没有跨表空间 段要使用ASSM就必须位于支持ASSM空间管理的表空间中

HWM高水平线

HWM是随着表数据的增长而增长的 只有重建 截除 收缩对象时 HWM才会降低 HWM很重要 因为在oracle进行全表扫描时会扫描HWM下的所有块 即使这张数据库表不包含任何数据

TrunCate会把表的HWM重新置为 还会截除表上的相关索引 而DELETE整张表时并没有修改HWM 所以如果打算删除表的所有行 应尽量使用TrunCate

在MSSM表空间中 段只有一个HWM 但在ASSM表空间中 除了HWM外 还有一个低HWM 这是因为在ASSM中 HWM推进时 ORACLE并没有立即格式化所有的物理块 而是只在第一次使用时才会完成格式化 以便安全读取

freelists

freelists是使用MSSM表空间时 oracle使用块时 需要把块放在freelist或从freelist中删除 freelists可能对性能有很大的提升或有很大的影响

而在ASSM中 没有也不用去设置freelist参数

create tablespace as *** datafile size m autoextend on next m segment space management auto

create table xxx( ) tablespace as ***

( )pctfree与pctused

PctFree告诉oracle应该在块上保留多少空间来完成将来的更新 默认值是 % 如果自由空间的百分比高于PctFree指定值 这个块就称为自由的 PctUsed告诉oracle应在当前不自由的块上自由空间的百分比需要达到多大时 才能使它再次变为自由的 默认值为 %

使用MSSM 时 这两个参数设置控制着块何时放入freelist 中 以及何时从freelist 中取出 如果使用默认值 PCTFREE为 PCTUSED为 那么在块到达 %满之前(有 %以上的自由空间) 这个块会一直在freelist 上 一旦到底 % 就会从freelist 中取出 而且直到块上的自由空间超过了块的 %时 才会重新回到freelist上 在此之前 这个块一直不在freelist上

使用ASSM 时 PCTFREE 仍然会限制能否将一个新行插入到一个块中 但是它不会控制一个块是否在freelist上 因为ASSM根本不使用freelist 在ASSM 中 PCTUSED参数将被忽略

如果把块的PCTFREE 设置得过高 就会浪费空间 如果把PCTFREE 设置为 % 而你从未更新数据 那么每个块都会浪费 %的空间 不过 对行初始很小 现在想将行的大小加倍 这种情况下 %的设置就非常合理 但是倘若PCTFREE 设置得太小 更新行时就会导致行迁移

高PCTFREE 低PCTUSED

如果你插入了将要更新的大量数据 而且这些更新会频繁地增加行的大小 此时就适合采用这种设置 这种设置在插入后会在块上预留大量的空间(高PCTFREE) 并使得将块放回到freelist 之前必须几乎为空(低PCTUSED)

低PCTFREE 高PCTUSED

如果你只想对表完成INSERT 或DELETE 或者如果你确实要完成UPDATE 但UPDATE 只是缩小行的大小 此时这种设置就很适合

( )行迁移row migration

lishixinzhi/Article/program/Oracle/201311/17472


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9971138.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存