Oracle数据库服务器自动管理空间的方法

段空间的分配

空间以区间的形式分配给段,区间是一组连续的Oracle块。每个数据文件都有一个位图,来描述文件中块的状态,块可能是空闲的,也可能是区间中已分配给段的一部分。段被填满,需要扩展时,Oracle会搜索表空间文件的位图中的空闲空间,选择一个文件,修改位图,创建合适大小的一个新区间。接着,该区间就可以分配给段了。

段是对象的容器,但两者并不相同。没有段,对象也可以存在。如果先创建段,它至少有一个区间——但一些对象可以在没有段的情况下存在。

实例参数DEFERRED_SEGMENT_CREATION,它默认为TRUE,这个参数告诉Oracle不要创建段,除非对象实际包含一些数据。在创建表时,只创建描述表的数据字典机构。使用CREATE TABLE语句的SEGMENT CREATION子句可以控制这种行为,覆盖参数设置。

内部用户如SYS或SYSTEM创建对象时,会立即创建段。无论该参数设置是什么,尝试以SYS的身份使用SEGMENT CREATION DEFERRED子句,会返回一个错误。

自动管理段空间

表段在一个或多个区间中包含多个块。尝试把行插入表中时,Oracle必须做出决定:行应该放在哪个块中?这是由位图决定的,位图反映了段中的每个块有多满。

一些Oracle数据类型(主要是VARCHAR2)是变长度的。因此,执行UPDATE语句,以扩展VARCHAR2或填充以前是NULL的列时,行就会变大。于是需要块中更多的空间。

默认情况下,Oracle会保留一个块的10%空间,以扩展行。这是段的PCTFREE(percent free)设置,它在创建段时设置(但以后可以修改)。如果一个块的使用超出了段的PCTFREE设置,就由Automatic Segment Space Management(ASSM)位图归类为FULL,因此,即使该块实际上仍有一些空闲空间,也不能用于插入。所以,如果块中的行在其生命周期中平均增长不超过10%,就没有问题:行的新版本会有足够的空间可用。如果行的扩展比较显著,块中没有足够的空间容纳它,它就必须移到有足够空间的块中。这称为行迁移。行迁移有UPDATE语句导致。INSERT和DELETE从来不会导致行迁移。

迁移行时,会把行从它所在的块中删除,再把它插入有足够空间的另一个块。行的ROWID没有改变。ROWID仍指向原来的块,而该块现在仅存储了行的“转发地址”。转发地址是行移入的块的地址。

使用压缩节省空间

压缩有各种形式,其中一些需要独立的许可:Advanced Compression选项。

压缩类型在创建表时确定。压缩可以在创建后添加或删除,但这种变更不会影响已有的行。

积极监控和管理表空间的使用

数据库通过服务器报警系统自动监控表空间的使用。除了报警系统之外,Oracle维护着表空的使用历史。这存储在Automatic Workload Repository(AWR)中,所收集的信息作为AWR快照(有可管理的监控(MMON)进程创建)的一部分。可以在DBA_HIST_TBSPC_SPACE_USAGE视图中看到这些信息。

使用Segment Advisor

Segment Advisor(段顾问)尝试生成建议,以重新组织段,来回收空间。它会考虑AWR中的数据和对象的当前状态,,提供的建议基于对象的取样分析和历史信息,以预测未来的增长趋势。Segment Advisor默认为每晚运行为自动调度的任务。自动任务不会尝试分析每个段,而是选择满足如下标准的段:

  • 表空间中超过空间使用阈值的段
  • 最优活力的段
  • 增长率最高的段

要查看自动任务的结果,可以使用DBMS_SPACE_ASA_RECOMMENDATIONS函数。这个函数返回一个包含最后一次运行结果的表。

使用段收缩功能从表和索引中回收浪费了的空间

如果删除了一行,其在块中占用的空间可在插入另一行时重用。不过,对表进行操作的性质可能造成表中大量空间的浪费。可用MOVE操作进行回收:在MOVE之后,所有块将连续地填满新近重插入的行。但在MOVE操作时,锁定表,并且必须重新生成所有索引。对于许多环境来说,不可能使用MOVE命令来重组表。SHRINK命令避免了这些问题。它可以在不影响最终用户的情况下运行。限制就是表的表空间必须创建为使用自动段空间管理。表空间中使用旧空闲列表结束管理端控件使用的表不能收缩,因为(与新的位图方法不同)空闲列表并不包括Oracle用于计算块实际有多满所需的信息。、

表收缩的底层实现是通过匹配的INSERT和DELETE操作,将块中的行从表的末尾重新定位表的开始。然后当所有可能的移动完成后,将表的高水位线降至最后使用的块,释放该点上的所有空间。有两个不同的阶段:压缩阶段通过生成撤销和重做数据的DML将行移入一系列小事务中,并使用行锁定。第二阶段是DDL命令。和任何DDL命令一样,这是个针对数据字典的事务:它几乎瞬时执行,但要求短暂的表锁定。最后一步常常称为“重新定位段的高水位线(HWM)”。

表收缩操作生成撤销和重做数据。索引得到维护,因为收缩实现为一组DML事务。在压缩期间没有表锁定,但在移动单独行时将锁定它们。

SHRINK SPACE命令的语法如下:

ALTER TABLE <TABLE NAME> SHRINK SPACE [COMPACT] [CASCADE];

使用关键字COMPACT执行第一阶段,但不是第二阶段:重新定位行,但并不从段中释放空间。使用它的原因是,尽管可以在正常运行时间进行压缩(在大型表上要花很长时间完成),但很可能DDL最终会因为与其他事务并发而挂起,还使库缓存中解析了的SQL无效。因此,有必要首先用COMPACT关键字收缩表,然后在维护时不使用COMPACT:其速度将是很快的,因为已经压缩过。CASCADE关键字指示Oracle也收缩依赖对象,如索引。

SHRINK SPACE COMPACT命令充足段的内容,但不返回空间给表空间。

在收缩表前,必须对表启用行移动:

ALTER TABLE <table name> ENABLE ROW MOVEMENT;

启用行移动时必要的,因为操作的性质以为着将改变ROWID。相同的行(主键不变)将在不同的物理位置,因此有一个不同的ROWID。这是Oracle所不允许的,除非启用了行移动。

表必须位于采用自动段空间管理功能和启用了行移动的表空间中,否则不能收缩。如果不满足这些条件,MOVE就是重组表的唯一方式。

管理可恢复空间的分配

许多操作会因为空间不够而失败。这通常显示为不能在段中添加另一个区间,有几个原因:数据文件已满;自动扩展的数据文件或临时文件在已满的磁盘上;撤销段在已满的撤销表空间中;需要临时空间的操作在使用已满的临时表空间;或者用户到达了表空间上的配额限制。

如果启用可恢复空间分配,当操作遇到(任何)空间问题而不是因为错误而失败(在许多情况下,回滚已做的工作)时,操作将暂停。对于用户来说,这将显示为会话挂起。当错误得到解决时,它将继续。所有挂起的会话(当前挂起和之前挂起的但现在再次运行的)列在视图DBA_RESUMABLE中。

要在会话级别启用可恢复空间分配:

ALTER SESSION ENABLE RESUMABLE [ TIMEOUT <seconds> ];

TIMEOUT选项用于指定语句将挂起多长时间。如果到达这个时间,但问题没有解决,那么将返回错误并且语句失败。

也可以通过设置一个实例参数,为所有会话启用可恢复空间。这是一个动态的参数。

alter system set resumable_timeout=60;

Oracle 存储结构三的更多相关文章

  1. Oracle 存储结构

    数据库是存储数据的容器,它的主要功能是保存和共享数据. oracle数据库的存储结构可以分为逻辑存储结构和物理存储结构,对于这两种存储结构,oracle是分别进行管理的. 逻辑存储结构:oracle内 ...

  2. oracle存储结构

    数据库的物理存储结构 select * from v$datafile; 数据库的逻辑存储结构,从表空间开始查起一个数据库对象的逻辑存储结构如下表空间-段-区-块 select * from dba_ ...

  3. Oracle存储结构-表空间

    表空间 oracle文件注意的问题 控制文件,redolog文件,数据文件----一定要放在存储上 问题:银行用户,集群切换失败,原因是数据库中部分的文件未放到存储上 存储三种组织形式:文件系统.AS ...

  4. Oracle 存储结构一

    了解块中表行数据的存储 Oracle数据存储模型 逻辑结构在左,物理结构在右 有一个关系使用虚线绘制,表示段与数据文件的多对多关系.之所以使用虚线表示关系,是因为这种多对多关系不应存在. 表空间实体消 ...

  5. Oracle 存储结构二

    创建和管理表空间 创建表空间 典型语句: CREATE SMALLFILE TABLESPACE "JWTS" DATAFILE '/u01/app/oracle/oradata/ ...

  6. Oracle存储结构-段区块

    段 一个段建立以后首先会分配一个区,区中包括含8个块,这时执行insert插入数据,当这个区写满后,会在分配一个区 1.一个段建立以后,Oracle如何给段分配区? 2.段分配到区以后,有了空闲空间, ...

  7. Oracle 逻辑存储结构

    一.总述 逻辑存储结构是 Oracle 数据库存储结构的核心内容,对 Oracle 数据库的所有操作都会涉及逻辑存储结构.逻辑存储结构是从逻辑的角度分析数据库的组成,是对数据存储结构在逻辑概念上的划分 ...

  8. 学习笔记:oracle学习一:oracle11g体系结构之体系结构概述和逻辑存储结构

    目录 1.oracle 11g体系结构概述 1.1 三个重要概念 1.2 oracle数据库存储结构 2 逻辑存储结构 2.1 数据块(Data Blocks) 2.2 数据区(Extent) 2.3 ...

  9. Oracle存储——逻辑结构

    Oracle 数存储——物理结构 Oracle存储结构:物理结构+逻辑结构 Oracle 数据库存储逻辑结构 Oracle Schema Objects(Schema Object Storage A ...

随机推荐

  1. JDBC基本操作示例

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  2. laravel开发之-网站初建

    1 cmd 打开电脑命令窗口 2 目录切换到网站根目录 3 输入命令:php artisan serve 4 model 生成命令:php artisan make:model 需要生成的model名 ...

  3. 如何让转换的视频支持HTML5在线播放

    转换工具当然是ffmpeg了,那么如何让转换后的视频支持所有支持HTML5的浏览器在线播放?只需要如下命令行代码就行了: ffmpeg -i output.mpg -vcodec libx264 -a ...

  4. DrawerLayout使用

    1 :DrawerLayout侧边栏用于实现如图所示的效果:

  5. springDataJpa学习笔记

    目录 前言 springData 准备 引用 xml配置初始化JPA pojo dao层接口 使用 新增.修改:save 删除 查询所有 根据ID查询findById 命名规则查询(条件查询) 自定义 ...

  6. apache 配置PHP的支持重写伪静态

    1.开启rwrite模块 LoadModule rewrite_module modules/mod_rewrite. 允许任何目录使用.htaccess AllowOverride None 改成 ...

  7. sql大数据多条件查询索引优化

    此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多 优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出 ...

  8. SqlServer数据库(可疑)的解决办法

    当数据库发生这种操作故障时,可以按如下操作步骤可解决此方法, 打开数据库里的Sql 查询编辑器窗口,运行以下的命令. // 1.使用指定值强制重新配置:(1.0表示为真假) sp_configure ...

  9. HTML简单框架网页制作 吴昊

  10. how to drop multiple talbes in oracle use a sigle query

    Tool:PL/SQL developer Syntax:SELECT 'DROP TABLE ' || table_name || ';' FROM user_tables; 1.then you ...