【发布时间】:2016-02-12 13:50:31
【问题描述】:
出于归档目的,我需要从表中删除数据,但由于删除不会释放空间,因此占用了大量数据。为了保存这一点,我想出了一个使用 oracle 提供的收缩空间命令的解决方案。 但这需要启用行移动。
所以我的问题如下: 1. 使用收缩空间命令启用行移动是否是个好主意。 2. 我们可以只启用运行收缩空间命令的行移动,然后再次禁用它吗 3. 或者我们应该启用行移动并在需要时运行收缩空间命令(比如每周一次)。
【问题讨论】:
出于归档目的,我需要从表中删除数据,但由于删除不会释放空间,因此占用了大量数据。为了保存这一点,我想出了一个使用 oracle 提供的收缩空间命令的解决方案。 但这需要启用行移动。
所以我的问题如下: 1. 使用收缩空间命令启用行移动是否是个好主意。 2. 我们可以只启用运行收缩空间命令的行移动,然后再次禁用它吗 3. 或者我们应该启用行移动并在需要时运行收缩空间命令(比如每周一次)。
【问题讨论】:
您是要删除表上的所有数据还是仅删除其中的一部分?如果要删除所有内容,则可以将其截断,以非常快速的方式释放为表和索引分配的所有空间:
truncate table t;
如果您没有全部删除,则行移动方法应该没问题(3 个选项中的任何一个),但您必须测试对该表的并发访问。是否有其他人会在您维护的同时尝试更新/插入此表?我的猜测是这可能是个问题。
因此,另一种方法可以根据您的清除标准对表进行分区。例如,如果您要删除超过 3 个月的数据,您可以按月对表进行分区,只删除不再需要的分区。这实际上就是为了方便数据维护而进行分区的目的。
【讨论】: