`
gaoyuntao2005
  • 浏览: 311160 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle区概念总结

阅读更多

数据区概述

数据扩展(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)。用户须确保每个数据扩展的容量至少能包含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游标的总结oracle游标的总结

    Oracle 游标是 Oracle 数据库中的一种重要概念,用于查询数据库,获取记录集合(结果集)的指针。游标可以看作是一个临时表,你可以对其每一行的数据进行任意的操作。本文将对 Oracle 游标的概念、分类、声明方式、...

    *oracle存储过程总结*oracle存储过程总结*

    根据提供的文件信息,我们可以归纳出以下Oracle存储过程的相关知识点: ### Oracle存储过程基础概念 ...以上是基于提供的部分内容对Oracle存储过程进行的总结,包含了从基础概念到具体应用实例的全面解析。

    Oracle核心基础总结

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级数据存储、管理和处理方面具有卓越性能。..."Oracle核心基础总结"文档将帮助你快速回顾和掌握这些关键概念,节省自我研究的时间。

    oracle学习总结(适合刚学习oracle的人)

    本文将根据"oracle学习总结(适合刚学习oracle的人)"这一主题,深入探讨Oracle数据库的基础知识,帮助初学者建立起对Oracle的基本理解。 1. **Oracle简介**:Oracle数据库是由美国甲骨文公司开发的一款产品,它...

    oracle 基础知识总结初学者必备

    ### Oracle基础知识总结初学者必备 Oracle数据库作为一款广泛使用的数据库管理系统,在企业和开发领域扮演着重要的角色。对于初学者而言,掌握其基础知识是非常必要的。本文将根据提供的内容进行深入解析,并结合...

    oracle概念详解

    ### Oracle概念详解 #### 一、数据库名 (Database Name) **定义:** 数据库名是用于唯一标识一个Oracle数据库的名称,类似于人的身份证号码。它由`DB_NAME`参数表示,并在数据库创建时设置。 **作用:** - **安装...

    oracle精品实例,练习总结

    8. **安全性**:Oracle支持用户权限管理,如GRANT和REVOKE命令,以及角色的概念。实例将展示如何创建和管理用户,设定访问权限,以及如何使用审计功能来监控数据库活动。 9. **数据库复制**:Oracle的逻辑复制技术...

    Oracle DB优化总结

    【Oracle DB优化总结】 在数据库管理系统中,Oracle Database(Oracle DB)因其稳定性和高性能而备受赞誉,但随着数据量的增长,优化数据库性能显得至关重要。本文将深入探讨Oracle DB的优化策略,包括优化器的选择...

    Oracle非常全的学习总结

    本学习总结涵盖了Oracle的入门知识、全套命令及SQL语法,旨在为初学者提供全面的学习材料。以下是对这些主题的详细阐述: 一、Oracle入门总结 Oracle数据库的基本概念包括数据库实例、表空间、数据文件、控制文件、...

    oracle学习总结.docx

    Oracle 学习总结 Oracle 是一种关系数据库管理系统,由 Larry Ellison 和 Bob Miner 于 1977 年创立。它是一种对象关系数据库管理系统,支持多种编程语言,包括 Java、Python、C++ 等。 一、创建 Oracle 数据库...

    Oracle Form 实战总结.pdf

    通过对《Oracle Form 实战总结》的详细分析,我们可以看到文档不仅提供了创建客户化应用的具体步骤,而且还涉及了许多Oracle Forms的核心概念和技术要点。这对于初学者来说是非常宝贵的资料,可以帮助他们更快地掌握...

    Oracle重要知识总结

    本文将针对“Oracle重要知识总结”这一主题,深入探讨Oracle的核心概念、关键技术和实用技巧,结合提供的压缩包文件,包括"oracle官方文档介绍.doc"、"Oracle Flashback 技术总结.doc"以及"Oracle 10g 要点整理 之 ...

    oracle 笔记总结

    这篇笔记总结将深入探讨Oracle的核心概念、关键功能以及常见操作,旨在帮助读者理解和掌握Oracle数据库的关键知识点。 一、Oracle数据库基础 Oracle数据库采用SQL(结构化查询语言)作为其主要的数据交互方式,支持...

    oracle总结

    在本文中,我们将深入探讨Oracle数据库系统的核心概念、管理和优化技术。 首先,Oracle数据库采用SQL(结构化查询语言)作为其主要的数据操作语言,允许用户进行数据查询、更新、插入和删除等操作。SQL在Oracle中的...

    Oracle 数据库语法总结

    这篇文档“Oracle数据库语法总结”旨在为用户提供一个全面的参考指南,帮助理解和掌握Oracle SQL的使用。 1. **数据定义语言(DDL)** - **创建表(CREATE TABLE)**:用于定义表的结构,包括字段名、数据类型、...

    Java调用oracle存储过程总结

    本文将全面总结如何使用Java与Oracle存储过程进行交互。 首先,理解Oracle存储过程的基本概念。存储过程是预编译的SQL语句集合,存储在数据库中,可以接受参数、执行一系列操作并返回结果。它们提高了性能,减少了...

    Oracle数据库的总结

    逻辑存储则由表空间、段、区和块等概念构成,用于管理和组织数据。理解这些概念有助于优化数据库性能和存储管理。 二、SQL语法与PL/SQL编程 Oracle支持标准SQL语法,包括DML(数据操纵语言)、DDL(数据定义语言)...

Global site tag (gtag.js) - Google Analytics