Oracle 1Z031第九章 存储结构和关系

本文介绍了数据库存储结构的基础概念,包括数据库的逻辑结构、不同类型的段及其使用方式,还详细阐述了扩展的分配与回收机制,以及数据块的管理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第九章
Storage Structure and Relationships
存储结构和关系
 
Objectives
学习目标
描述数据库的逻辑结构
列举段的类型和它们的使用方式
列举控制数据块使用的关键命令
从数据字典中获取存储相关的信息
列举单个段的特征
 
 
Overview
 
数据库的逻辑结构
数据库——X表空间——X——X扩展——X数据块
逻辑结构     X           |
|                   |            |
|                   |            |
X                  |            |
            数据文件———————             |
|                                |
|                                |
X                               |
操作系统块 X————————————
X 表示一对多)
 
Types of Segments
段的类型
段是数据库中占有空间的对象。它们使用数据库中数据文件的空间。
Table
表是数据库中存储数据的最通常的方式。表段存储非群集、非分区的表中的数据。表中的数据存储时没有特定的顺序,并且数据库管理员对行存储于数据块中的位置只有很少的控制能力。所有在一个表段中的数据必须存储在一个表空间中。
 
Table Partition
分区表
可用性和可扩展性是数据库中高并发使用的表要注意的主要问题。在这种情况下,在一个表中的数据必须存储在几个分区中,其中的每个分区可以位于不同的表空间。目前Oracle支持通过一个范围值分区或者散列算法分区。如果一个表被分区,那么每个分区是一个段,并且存储参数可以独立的标明来控制存储。使用这种段需要Oracle9i企业版中的分区特性。
 
Cluster
群集
群集类似于表,是一种类型的数据段。群集中的行的存储基于关键字段的值。一个群集可以包含一个或者多个表。群集中的表属于同一个端并共有相同的存储特征。群集中的表可以通过索引或者散列算法来访问。
 
Index
索引
所有特定索引的入口均存储在一个索引段中。如果一个表有三个索引,将使用三个索引段。索引段的目的是通过特殊的键值查找表中行的位置。
 
Index-Organized Table
索引组织的表
在索引组织的表中,数据基于键值存储在索引中。一个索引组织的表不需要表扫描,因为所有的数据可以通过索引树直接获取。
 
Index Partition
索引分区
一个索引可以分区并分散到几个表空间中。在这个情况下,索引中的每个分区对应于一个段并且这个段是不能跨越多个表空间。索引分区的主要用途是减少单独索引的并发I/O。使用这种段需要Oracle8i企业版中的分区特性。
 
Undo Segment
回退段
回退段用于改变数据库的事物。在改变数据或者索引块前,旧的数据存储在回退段中。这样就可以保证用户可以回退已产生的改变。
 
Temporary Segment
临时段
当用户运行例如CREATE INDEX,SELECT DISTINCT,或者SELECT GROUP BY命令的时候,Oracle 服务器尽量在内存中进行排序。当排序需要比可用内存更多的空间时,中间结果写到磁盘。临时段就是用来存储这些中间结果。
 
LOB Segment
LOB段
表中的一个或者多个字段可以用来存储大对象(LOBs)例如文本,图像,或者影像.如果字段是大对象字段,Oracle将这些数据存储在单独的叫做LOB的段中.表中只有存放指针指明相应的LOB数据的位置。
 
Nested Table
嵌套表
表中的一个字段有可能是由用户定义的表组成的,例如订单中的Item。在这种情况下,内表被叫做嵌套表,存储为一个单独的段。
Bootstrap Segment
引导段
引导段,也被叫做缓存段(cache segment)是由sql.bsq脚本在数据库创建的时候建立的。这些段用于数据库被一个实例打开的时候辅助初始化数据字典缓存。
引导段不能被查询或者更新并且不需要数据库管理员维护。
 
Storage Clause Precedence
储存分句的优先级
Oracle default, Tablespace,segment 从左至右优先级越高。
Storage Parameters
存储参数
存储分句可以在段级别表明用于控制扩展(extent)如何分配给段。
1、任何在段级别标明的存储参数覆盖对应的在表空间级别申明的参数,除了minimum extent 和 uniform size 表空间参数。
2、当段级别没有明确的申明存储参数,那么默认的参数就是表空间基本的存储参数。
3、当表空间级别没有明确的申明存储参数,Oracle系统默认的参数将被使用。
 
Other Considerations
其它的考虑
如果存储参数被改变,新的选项仅仅应用在还没有分配的扩展上。
一些参数不能在表空间级别申明,只能在段级别申明。
如果扩展的最小尺寸被申明,这个尺寸应用到所有的将分配到段的扩展上。
 
Extent Allocation and Deallocation
扩展的分配和回收
当段在以下情况下分配扩展
n      创建
n      增长
n      改变
回收在下述情况下发生
n      删除
n      改变
n      截断(truncated)
 
 
 
Used and Free Extents
使用了的和空闲的扩展
数据文件由三部分构成
文件头,已使用的扩展,空闲扩展
Extents
扩展
当一个表空间创建的时候,表空间中的数据文件包含一个头,这是文件中的第一个块或者第一批块。
当段创建的时候,它们从表空间中的空闲扩展中分配空间。段使用的连续空间标明为已使用的扩展。当段释放空间时,扩展被释放掉并加入到表空间可用空闲扩展池中。
 
Database Block
数据库块
最小的I/O单位
包含一个或者多个OS块
在表空间创建的时候设置
db_block_size是默认的块大小
 
Database Block Contents
数据库块的内容
头,空闲空间,数据
Data Blocks
数据块
Oracle数据块包含:
块头:头包含数据块地址,表目录,行目录,事务的入口用于事务改变在这个块中的行。块头从上向下增长。
数据空间:行数据从底部向上插入数据块。
空闲空间:块中的空闲空间在块的中间:这样不论是头还是数据空间都可以在需要的时候增长。块中的空闲空间在开始的时候是连续的。但是删除和更新可能分裂块中的空闲空间。块中的空闲空间可以在需要的时候被Oracle服务器合并。
 
Block Space Utilization Parameters
数据块空间参数
initrans,maxtrans,ptcfree,ptcused
数据块应用参数用于控制数据和索引中的段使用的空间。
Parameters Controlling Concurrency
控制并发的参数
INITRANS和MAXTRANS 标明数据和索引数据块中初始和最大数量的事务入口。事务入口用于存储在某一个时刻事务对数据块的改变的信息。一个事务只使用一个入口,而不管它是否改变多行或者多个索引实体。
INITRANS,默认数据段为1,索引段为2,保证最小级别的并发。例如,如果设置为3,INITRANS保证最少3个事务可以并发的改变数据块。如果必要,附加的事务入口可以从块中空闲空间中分配以容许多个并发的事务改变块中的行。
MAXTRANS,默认的值是255,设置改变数据和索引的并发事务的数量限制。当设置时,这个值限制事务入口所使用的空间,因此要保证数据块中有足够的空间供行和索引数据使用。
Parameters Controlling the Use of Data Space
控制数据空间的参数
PTCFREE 用于数据段标明每个数据块中为更新保留的增长空间百分比,默认的PCTFREE是10%。
PTCUSED 表示Oracle服务器为表中的每个数据块保留的最小的可以使用空间的百分比。数据块使用空间小于PCTUSED时将被放回空闲列表。段的空闲列表是用于未来插入操作的候选数据库的列表。一个段,默认地在创建时产生一个空闲列表。段可以在创建时通过设置FREELISTS存储参数,指定更高的空闲列表。默认的PCTUSED是40%。
PCTFREE和PCTUSED都是通过计算可用的数据空间得到,因此,数据块剩余空间是减去头部空间后的空间。
 
Data Block Management
数据块管理
2种方法可以用于管理数据块:
自动段空间管理
手工配置
Automatic Segment-Space Management
自动段空间管理
在数据库段内管理空闲空间的方法。
跟踪段内空闲空间和已使用空间是通过位图(bitmap)对应于空闲列表。
这种方法提供:
方便的管理
更好的空间使用
更好的并发insert操作
限制:不能用于包含LOB表空间。
容易使用
PCTUSED,FREELISTS,FREELIST GROUPS都是自动管理的。
Better Space Utilization
所有的对象特别是那些有大量行尺寸变化的对象使用空间更有效。
Better Concurrency Handling
运行时调整并发的访问能力提高了。
 
 
Automatic Segment-Space Management
位图管理的段包含描述段中每个数据块状态和它们的可用空间的位图。
这个图放置在独立的数据块中指向位图管理的数据块(BMBs)。
当插入新的行时,服务器查找有一定空间的数据块。
在块中可用空间的数量变化时,块在位图中的状态改变。
 
Configuring Automatic Segment-Space
Management
配置自动段空间管理
自动段空间管理只能在表空间级别配置,对本地管理的表空间
 
CREATE TABLESPACE data02
DATAFILE ‘/u01/oradata/data02.dbf’ SIZE 5M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K
SEGMENT SPACE MANAGEMENT AUTO;
 
在表空间创建后,这些申明应用到所有的在这个表空间中创建的段。
位图管理的段通过在CREATE TABLESPACE中标明SEGMENT SPACE MANGEMENT AUTO 子句,而且这个选项在以后不能修改。任何对PCTUSED,FREELIST,和FREELIST GROUPS参数的设置都是禁止的。
位图管理的段是大量的表(heap tables),索引,IOT,和LOB。
Manual Data Block Management
人工管理数据块
容许你人工管理数据块使用下列参数如:
PCTFREE
PCTUSED
FREELIST
只在以前版本的Oracle中可用。
在手工管理数据块时,你可以在数据块可用的情况下配置数据库中的空间如何使用。PCTFREE,PCTUSED,和FREELIST参数均可以在手工管理中使用。以前这是唯一的管理数据块的方法。
 
Block Space Usage
块空间的使用
下述的步骤解释块空间在段空间管理PCTFREE = 20 和 PCTUSED = 40情况下的区别:
1、行插入到数据块中直到块中的空闲空间等于或者小于20%。这个块将不能用于插入当数据行占有这个块80%或者更多可用空间时。
2、剩余的20%可以在行尺寸增加的时候使用。例如,一个列原来是NULL更新给与一个新值。因此数据块空间使用可能在更新后超过80%。
3、如果数据块中的行被删除或者行的大小在更新后减小,数据块使用空间将小于80%。但是一个块并不会用于插入操作直到使用空间低于PTCUSED,在这个例子中是40%。
4、当使用空间低于PCTUSED,这个块可以用于插入数据,当行插入到数据块中,数据块的已使用空间增加,这个循环从第一步重新开始。
 
Data Dictionary Views
数据字典视图
Used extents
DBA_EXTENTS
 
Free extents
DBA_FREE_SPACE
 
Segments
DBA_SEGMENTS
 
Data files
DBA_DATA_FILES
 
Tablespaces
DBA_TABLESPACES
 
Querying the Data Dictionary
查询数据字典
表空间,数据文件,段,和空闲、使用扩展可以通过查询数据字典来查看。
当一个有一个或者多个文件的表空间创建时,一个数据行将增加到DBA_TABLESPACES。对每一个数据块中的文件,一行数据将加入到DBA_DATA_FILES。在这个阶段,每个文件中的空间,包括文件头,在DBA_FREE_SPACE视图中显示为一个空闲空间。
当段创建时,在DBA_SEGMENTS中可以看到一行数据。分配给这个段中扩展的空间可以通过DBA_EXTENTS视图查询,而且DBA_FREE_SPACE视图调整显示扩展已经为相应段创建的文件较低的空间。
一个文件中的所有空间(包括头部块)必须通过DBA_FREE_SPACE或者 DBA_EXTENTS来计算。
Obtaining Storage Information
获取存储信息
数据字典视图
DBA_TABLESPACES
DBA_DATA_FILES
DBA_SEGMENTS
DBA_EXTENTS
DBA_FREE_SPACE
 
DBA_SEGMENTS视图可以获取段分配的扩展和数据块。
DBA_EXTENTS视图查看给定的段的扩展。
DBA_FREE_SPACE视图查看给定段的扩展。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值