数据区概述

数据扩展(extent)是由一组连续的数据块(data block)构成的数据库逻辑存储分配单位。而段(segment)则是由一个或多个数据扩展构成。当一个段中已有空间已经用完,Oracle为这个段分配新的数据扩展。

数据区何时被分配

当用户创建数据表时,Oracle为此表的数据段分配一个包含若干数据块的初始数据扩展(initial extent)。虽然此时数据表中还没有数据,但是在此初始数据扩展中的数据块已经为插入新数据做好了准备。

如果一个段(segment)的 初始区中的数据块(data block)都已装满,且有新数据插入需要空间时,Oracle自动为这个段分配一个增量数据扩展(incremental extent)。增量数据扩展 是一个段中继已有数据扩展之后分配的后续数据扩展,她的容量大于或等于之前的数据扩展 。

为了管理的需要,每个段的段头(header block)中包含一个记录此段所有数据扩展(extent)的目录。(对于这里的数据扩展目录,个人理解为,在本地管理表空间中段所使用的位图来管理数据区的分配,待验证 )

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

每个段(segment)的定义中都包含了数据扩展(extent)的存储参数 (storage parameter)。存储参数适用于各种类型的段。这个参数控制着Oracle如何为段分配可用空间。例如,用户可以在 CREATE TABLE 语句中使用 STORAGE 子句设定存储参数,决定创建表时为其数据段(data segment)分配多少初始空间,或限定一个表最多可以包含多少数据扩展。如果用户没有为表设定存储参数,那么表在创建时使用所在表空间(tablespace)的默认存储参数。

用户既可以使用 数据字典管理的表空间(dictionary managed tablespace)(依赖数据字典表监控空间的利用情况),也可以使用本地管理的表空间(locally managed tablespace)(使用位图(bitmap)来标记可用与已用空间)。由于本地管理的表空间性能较好且易于管理,当用户没有显式地设定数据扩展(extent)管理参数时,除了10G以后 SYSTEM 之外的所有永久表空间(permanent tablespace)默认使用本地管理方式。

在一个本地管理的表空间中,其中所分配的数据扩展(extent)的容量既可以是用户设定的固定值,也可以是由系统自动决定的可变值。当用户创建表空间(tablespace)时可以使用UNIFORM (用户指定)或 AUTOALLOCATE ( 由系统管理)子句设定数据扩展的分配方式。

对于固定容量(UNIFORM )的数据扩展,用户可以为数据扩展设定容量或使用默认大小(1 MB)。 用户须确保 其中最小的UNIFORM SIZE容量至少能包含5个数据块 。本地管理的临时表空间 在分配数据扩展时只能使用此种方式。

对于由系统管理(AUTOALLOCATE )的数据扩展,由Oracle决定新增数据扩展的最佳容量,其最小容量为 64 KB 。如果创建表空间时使用了“segment space management auto”子句,且数据块容量大于等于 16 KB,Oracle扩展一个段时所创建的数据扩展的最小容量为 1 MB。对于永久表空间上述参数均为默认值。

在本地管理的表空间中,INITIAL ,NEXT ,PCTINCREASE ,和 MINEXTENTS 这四个存储参数可以作用于段(segment),但不能作用于表空间。INITIAL ,NEXT ,PCTINCREASE ,和 MINEXTENTS 相结合可以用于计算段的初始容量。当段容量确定后,Oracle使用内部算法确定其中每个初始数据扩展(extent)的容量。

区如何被分配

Oracle依据表空间管理方式的不同(本地管理(locally managed)或数据字典管理(dictionary managed)),选择不同的算法分配数据扩展(extent)。

对于本地管理的表空间,Oracle在为新的数据扩展(extent)寻找可用空间时,首先选择一个属于此表空间的数据文件(datafile),再搜 索此数据文件的位图(bitmap)查找连续的数据块(free block)。如果此数据块中没有足够的连续可用空间,Oracle将查询其他数据文件。

数据区合适被回收

Oracle 数据库提供了 Segment Advisor 工具,她依据方案对象(schema object)存储空间中的碎片程度来判断此对象中是否包含可回收的空间。

一般来说,在用户将一个段(segment)对应的方案对象(schema object)移除(使用 DROP TABLE 或 DROP CLUSTER 语句)之前,此段的数据扩展(extent)不会被回收到表空间(tablespace)中,但是以下情况例外:

1、表,簇表的所有者(owner)或拥有 DELETE ANY 权限的用户, 可以使用 TRUNCATE...DROP STORAGE 语句将表,簇表的数据清除

2、DBA 可以使用以下语法收回一个段中未使用的数据扩展:

ALTER TABLE table_name DEALLOCATE UNUSED;

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

当数据扩展(extent)被释放后,Oracle修改数据文件中的位图(对于本地管理的表空间)或更新数据字典(对于数据字典管理的表空间),将回收的数据扩展视为可用空间。被释放的数据扩展中的数据无法继续访问。

非簇表中的数据扩展

只要用户没有移除(drop)或清空(truncate)非簇表,那么对应数据段内的任何数据块都不会被回收。Oracle会在插入数据时使用这些数据块(只要数据块有足够的空间)。即使用户删除(delete)了表的所有行,Oracle也不会回收此表的数据块供表空间内的其他方案对象(schema object)使用。

当用户移除(drop)了一个非簇表(nonclustered table),Oracle将在需要空间时回收此表对应的数据扩展 。Oracle将此表对应的数据段(data segment)、索引段(index segment)中包含的数据扩展(extent)全部收回,并供存储于此表空间的其他方案对象(schema object)使用。

对于数据字典管理的表空间(dictionary managed tablespace),当一个段(segment)需要的数据扩展(extent)比现有可用扩展的都大时,Oracle通过寻找、合并连续的被回收的数据扩展来形成更大的数据扩展。这个过程被称为数据扩展合并 (coalescing)。本地管理的表空间没有必要进行数据扩展合并,因为所有连续空间都可以被用于分配新数据扩展,而无需关心所用空间是如何被回收的。

簇表中的数据扩展

Therefore, if you drop one table in a cluster, the data segment remains for the other tables in the cluster, and no extents are deallocated. You can also truncate clusters (except for hash clusters) to free extents.
  簇表(clustered table)的数据存储在为整个簇(cluster)分配的数据段(data segment)中。因此当用户移除(drop)簇中的一个表时,数据段还要为簇中的其他表保留,因此没有数据扩展(extent)被回收。用户可以通过清空(truncate)整个簇来回收属于簇的数据扩展(哈希簇(hash cluster)除外)。

物化视图的数据扩展

Oracle回收属于物化视图(materialized view)及其日志(materialized view log)的数据扩展的方式与表或簇相同。

索引的数据扩展

只要索引存在,那么对应索引段(index segment)的所有数据扩展(extent)都不会被回收。当用户移除(drop)索引或相关的表、簇表时,Oracle才将索引使用的数据扩展回收。

临时段中的数据扩展

当Oracle执行完一个 SQL 语句,且在执行过程中使用的临时段时,Oracle通过以下机制对临时段的数据空间进行回收。

1、当用户执行单一排序语句时,Oracle将在此用户的临时表空间中创建为这个排序服务的临时段,并在执行后将此临时段使用的数据扩展回收。

2、 当用户执行 多重排序 语句 时 ,可能会使用临时表空间中专为排序而创建的排序段。在每个实例中只会分配一个排序段,在排序操作使用后也不会被回收,而是继续供以后的多重排序使用。 
同一会话或同一事务的多个 SQL 语句,有可能共同使用一个临时表的临时段存储临时数据。在这种情况下,Oracle在会话或事务结束后才移除临时段,并为临时段所在表空间回收使用的数据扩展。

回滚段的数据扩展

如果用户为回滚段(rollback segment)设定了 OPTIMAL 参数, Oracle周期性地检查数据库回滚段的容量是否超过了最优值。如果回滚段超过了这个最优值(即回滚段中的数据扩展过多),Oracle将自动地从回滚段回收一些数据扩展。

Oracle区概念总结相关推荐

  1. oracle基本概念和术语

    oracle基本概念和术语      ChinaITLab收集整理  2006-3-15  保存本文  推荐给好友  QQ上看本站  收藏本站 ---------------------------- ...

  2. oracle 基本概念和与informix对照

    oracle 基本概念和与informix对照 一.概念 用户:informix直接使用操作系统的用户管理系统,一般使用root和informix作为超级操作员,对其他用户进行管理.oracle有自己 ...

  3. oracle数据库模糊搜索表名,Oracle基本概念和介绍

    Oracle基本概念 Oracle Database的基本概念 一个Oracle服务器 是一个数据管理系统,它提供开放的,全面的,近乎完整的信息管理 Oracle服务器有两大部分组成 一个Oracle ...

  4. Oracle基本概念与数据导入

    Oracle基本概念 实例 一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成.一 ...

  5. 文档丨Oracle 20c 概念手册

    墨天轮文档:<Oracle 20c 概念手册>:https://www.modb.pro/doc/2099(复制到浏览器中打开或者点击"阅读原文"立即下载) 以下截取部 ...

  6. day06 : 01 Oracle 体系结构概念,内存结构,内存结构(服务器进程和用户进程)

    一    概念: 1. 实例/instance: 后台进程+共享内存 用于管理和控制数据库  数据库/database: 物理文件的集合 为实例提供数据,如数据文件,控制文件,参数文件,日志文件等   ...

  7. Oracle的概念和术语 (一)

    racle数据库系统是一个复杂的软件系统.如果不了解其内部的结构原理及关系,就不可能设计和编写出高质量的应用软件系统,也不可能管理好一个复杂的应用系统.为了给以后章节的打好基础,本章简要给出 ORAC ...

  8. oracle 分区概念,Oracle 分区的概念

    Oracle 分区的概念 分区是指将巨型的表或索引分割成相对较小的.可独立管理的部分,这些独立的部分称为原来表或索引的分区.分区后的表与未分区的表在执行查询语句或其他DML语句时没有任何区别,一旦进行 ...

  9. Oracle 用户概念与基本操作

    目录 目录 Oracle的用户 通过系统用户来登陆SQLPlus system和sys的区别 查看登陆的用户 启用和锁定一个用户 启用用户 锁定用户 创建用户 修改用户 删除用户 角色权限 常用的用户 ...

最新文章

  1. eleNuxt 打包到服务器上
  2. boost::hana::comparing用法的测试程序
  3. 线程回顾Thread
  4. WPF实现下拉框带图文和水印
  5. wav文件头修复_windows文件夹分析(xp版,网络整理)
  6. Javascript正则
  7. 被坑的过来人告诉你,为什么数据中台永远都搞不成?
  8. 服务器 上传文件进度,Java动态显示文件上传进度实现代码
  9. 6 设置限速_注意!全国高速将统一限速标志,这四种超速不再扣分罚款!
  10. java项目:基于ssm的高校后勤管理系统(spring+spring mvc+mybatis+easyui+jquery)1004
  11. Linux源码包安装的详细教程
  12. 数据库防火墙数据库加密与脱敏数据泄露防护
  13. 最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)
  14. NoClassDefFoundError: Could not initialize class
  15. GRPC: 如何优雅关闭进程(graceful shutdown)?
  16. TemplatesImpl利用链与Fastjson注入内存马
  17. [原创]关于搭建企业级应用的AJAX框架
  18. 2022-2028年全球与中国防水翘板开关行业产销需求与投资预测分析
  19. 使用AssetFileDescriptor 来读取(android)app的raw文件夹下的数据
  20. 上传ftp工具,细数5款很好用的上传ftp工具

热门文章

  1. php网站需要装zend吗,php-zend网站也需要别名
  2. lesson2-python3数据类型
  3. Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码
  4. php静态变量的销毁
  5. js 获取日期并格式化
  6. Gitlab搭建安装及使用中遇到的问题。
  7. 对于java反射的理解
  8. Ubuntu 12.04 图形界面问题解决 开机死机
  9. 如何用excel筛选相似内容_Excel中如何将两组数据的相同内容进行快速筛选配对...
  10. 试验设计与matlab数据分析 下载,试验设计与MATLAB数据分析(附光盘)