更新varchar2列时是否需要在Oracle中回收空间?

时间:2014-06-06 16:23:57

标签: oracle varchar2

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

1 个答案:

答案 0 :(得分:1)

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

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