压缩表或分段时,可以合并(重新打包)表和分段中的可用空间,或单独合并可用空间,而不进行压缩。
可以使用 repack 或 repack_offline 自变量,以联机或脱机方式执行重新打包操作。 repack_offline 操作与 repack 操作相同,但当 GBase 8s 在表或分段上持有互斥锁定期间执行操作时例外。 此操作在完成之前,会阻止对数据的所有其他访问。
如果执行 repack 操作时在表或分段中进行了轻量级追加,那么 repack 操作不会在表或分段的末尾完成空间合并。 repack 操作无法完成的原因是,在已执行了 repack 操作的位置中添加了新的扩展数据块,因此空间无法返还给数据库空间。要完成 repack 进程,必须在完成轻量级追加活动之后,再运行一次 repack 操作。第二次运行的 repack 操作将在第一次 repack 操作工作的基础上构建。
完成 repack_offline 操作之前删除或禁用索引可以缩短服务器完成此操作所用时间量。之后,可以重新创建或重新启用索引,最好是利用 PDQ。先删除或禁用索引,再重新创建或启用索引,要比不这样做而直接完成 repack_offline 操作的速度更快。
要合并表中的可用空间,请执行以下操作:
以下示例显示了这样的一个命令:指示 GBase 8s 合并所有者为“bob”的一个“music”数据库中名称为“opera”的表中的可用空间。
EXECUTE FUNCTION task("table repack","opera","music","bob");
以下示例显示了这样的一个命令:指示 GBase 8s 以脱机方式合并所有者为“bob”的一个“music”数据库中名称为“folk”的表中的可用空间。
EXECUTE FUNCTION task("table repack_offline","folk","music","janna");以下示例显示这样的一个命令:指示 GBase 8s 合并可用空间,并将空间返还给数据库空间中分区号为 14680071 的分段。
EXECUTE FUNCTION task("fragment repack shrink", "14680071");
可以取消使用 compress 自变量的命令,例如在 DB-Access 中输入 CTRL-C。之前中断命令之后,可重新发出带 repack 或 repack_offline 自变量的命令。(压缩和重新打包操作将记录,但是在较小的部分中运行。)