【问题标题】:Do I need to reclaim space in Oracle when updating a varchar2 column?更新 varchar2 列时是否需要回收 Oracle 中的空间?
【发布时间】:2014-06-06 16:23:57
【问题描述】:

如果我有一个包含长度为 4000 的 VARCHAR2 列的 Oracle 表,并且我在表中插入了一个 4000 个字符的字符串,然后用 1 个字符串更新了该行,我是否需要做任何事情来制作另一个3999 个字符的空间可重复使用,还是自动可重复使用?

【问题讨论】:

  • 据我了解 Oracle,这是一个非常智能的平台 :) 他们已经做了很长一段时间的工作,并且肯定已经找到了 VARCHAR2 变量类型。 TL;DR - 您无需执行任何操作,Oracle 会为您完成。

标签: oracle varchar2


【解决方案1】:

更新后,行所在的块中释放了 3999 字节的空间(假设 1 个字符 = 数据库字符集中的 1 个字节)。如果该块中的其他行需要扩展大小或该行中的其他列需要扩展大小,则该空间将立即可用。当然,由于大多数数据库使用 8k 块,最大块大小为 32k,由于原始行很大,因此该特定块中的行可能相对较少。

Oracle 还跟踪块的完整程度,并使用该信息使它们可用于后续的insert 操作。其机制取决于表空间的类型(本地或字典管理)、段空间管理策略(自动或手动)和表级参数,如pctused。但是,在较高级别上,释放单个数据块中的 4k 空间几乎肯定会导致该数据块可用于将来的insert 操作(或用于导致其他块中的行需要的update 操作)被迁移到一个新的块或跨多个块链接)。因此,几乎可以肯定该空间可以重复使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多