***oracle点知识2——数据扩展的分配和回收管理

简介: 1、如何决定数据扩展分配的数量与容量: 每个段的定义中包含了数据扩展的存储参数,这个参数可以表征数据创建表或者索引的时候为数据扩展分配多少数据块,或者限定 一个表(一个数据段)最多可以有多少 数据扩展。

1、如何决定数据扩展分配的数量与容量:

每个段的定义中包含了数据扩展的存储参数,这个参数可以表征数据创建表或者索引的时候为数据扩展分配多少数据块,或者限定 一个表(一个数据段)最多可以有多少 数据扩展。我们可以在 CREATE TABLE 语句中用STORAGE子句设定这个参数,如果没有设定,那就用这个段所在表空间的默认参数。

在本地管理表空间中,一个数据扩展的容量可以使手工设定的固定值,也可以是系统自动设定的可变值,注意:这是在创建表空间时就设定好的跟上面的在段内的存储参数是不一样的。在创建表空间的时候,可以用UNIFORM 这个设定固定值,也可以用AUTOALLOCATE设定为可变值。

  • 对于固定容量(UNIFORM)的数据扩展,用户可以为数据扩展设定容量或使用默认大小(1 MB)。用户须确保每个数据扩展的容量至少能包含5个数据块(database block)。本地管理(locally managed)的临时表空间(temporary tablespace)在分配数据扩展时只能使用此种方式。
  • 对于由系统管理(AUTOALLOCATE)的数据扩展,由Oracle决定新增数据扩展的最佳容量,其最小容量为 64 KB。如果创建表空间时使用了“segment space management auto”子句,且数据块容量大于等于 16 KB,Oracle扩展一个段时(segment)所创建的数据扩展的最小容量为 1 MB。对于永久表空间(permanent tablespace)上述参数均为默认值
在本地管理的表空间(locally managed tablespace)中,INITIALNEXTPCTINCREASE,和 MINEXTENTS 这四个存储参数可以作用于段(segment),但不能作用于表空间。INITIALNEXTPCTINCREASE,和 MINEXTENTS 相结合可以用于计算段的初始容量。当段容量确定后,Oracle使用内部算法确定其中每个初始数据扩展(extent)的容量。


2、数据扩展如何被分配:

oracle根据表空间的管理方式不同,分为本地管理或者数据字典管理,现在除了system表空间意外,基本上都是本地管理。

所以我们只说本地管理表空间数据扩展的分配方式:对于本地管理的表空间,当需呀新的数据块来存储数据的时候,首先选择一个数据此表空间的物理的数据文件,然后搜索此数据文件的位图,查找连续的数据块。如果此数据文件中没有足够的空间用来存储数据,那oracle会继续查找下一个数据此表空间的数据文件。


3、数据扩展的回收:

oracle提供了一个叫segment advisor的工具,他能依据方案对象内存储空间的碎片程度判定是否需要回收数据扩展。

一般情况下,在oracle移除一个方案对象之前,这个方案对象里的数据扩展是不会被回收的,也就是说,你只要分配给人家了,人家还没死,你就不能要会来。但是,有几个很不地道的情况还是可以要会来的。来咱看看:

1) 表、簇表的所有者,或者拥有delete any权限的用户,可以使用一个DDL语句 叫 TRUNCATE ....DORP STORAGE 语句将表或者簇表的语句清除。这时,里面的段就可以回收了。。人家还没死呢。。哎。。

2)一个段中如果有没有使用的数据扩展,dba可以用一个语句来收集回来:

ALTER TABLE table_name DEALLOCATE UNUSED.

3)如果用户为回滚段(rollback segment)设定了 OPTIMAL 参数,Oracle将周期性地从其中回收数据扩展。

数据扩展被释放后,oracle会修改数据文件中的位图,将新释放的数据扩展视为可用空间,其内的数据无法被访问。


4、看几个特殊情况:

1、簇表中的数据扩展:因为整个簇才是一个段,所以当oracle移除(drop)一个簇表中的表时,其中的数据扩展不会被回收,如果想回收,那只能通过移除(truncate)整个簇表来实现。(哈希簇表除外,这个以后研究他)

2、物化视图及其日志的数据扩展回收与表是一样的,不再做重复介绍。

3、索引的数据扩展,只要索引存在,那就不会被回收,但是删除了索引,或者将索引对应的表删除之后,索引就会被自动回收了。

4、临时表中临时段的数据扩展管理当Oracle执行完一个 SQL 语句,且在执行过程中使用的临时段(temporary segment)时,Oracle自动地移除(drop)临时段,并将属于此临时段的数据扩展(extent)空间还给临时段所在的表空间(tablespace)。当用户执行单一排序(single sort)语句时,Oracle将在此用户的临时表空间(temporary tablespace)中创建为这个排序服务的临时段(temporary segment),并在执行后将此临时段使用的数据扩展回收。但是对于多重排序(multiple sort),可能会使用临时表空间(temporary tablespace)中专为排序而创建的排序段(sort segment)。在每个实例中只会分配一个排序段,在排序操作使用后也不会被回收,而是继续供以后的多重排序使用。同一会话或同一事务的多个 SQL 语句,有可能共同使用一个临时表(temporary table)的临时段(temporary segment)存储临时数据。在这种情况下,Oracle在会话或事务结束后 才移除(drop)临时段,并为临时段所在表空间回收使用的数据扩展(extent)。

5、回滚段的数据扩展管理:Oracle周期性地检查数据库回滚段(rollback segment)的容量是否超过了最优值(optimal size)。如果回滚段超过了这个最优值(即回滚段中的数据扩展(extent)过多),Oracle将自动地从回滚段回收一些数据扩展。



相关文章
|
4月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
80 0
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
【赵渝强老师】Oracle的还原数据
|
4月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
2月前
|
Oracle 关系型数据库 数据库
oracle数据创建同义词
oracle数据创建同义词
52 0
|
4月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
68 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle误删数据怎么恢复?
Oracle误删数据怎么恢复?
52 0
|
7月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之从Oracle数据库同步数据时,checkpoint恢复后无法捕获到任务暂停期间的变更日志,如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
SQL Oracle Java
实时计算 Flink版产品使用问题之采集Oracle数据时,为什么无法采集到其他TABLESPACE的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。