将可用空间返还给数据库空间

压缩、重新打包或压缩并重新打包表或分段时,可将可用空间返还给数据库空间(收缩空间);也可在不压缩或重新打包的情况下单独返还可用空间。 返还可用空间将减小分段或表的总大小。

可在不影响表的分配策略的情况下,安全收缩整个表。例如,如果有一个分段表,一周的每一天都有一个分段,并且还有许多预分配的分段供将来使用,那么可在不影响该分配策略的情况下收缩该表。如果该表为空,GBase 8s 将把该表收缩为创建该表时指定的初始扩展数据块大小。

启动收缩操作时,GBase 8s 将缩小扩展数据块,如下所示:
  • 将除第一个扩展数据块之外的其他所有扩展数据块尽量缩小。
  • 如果整个表都在第一个扩展数据块中(例如,因为该表是空表),GBase 8s 将不把第一个扩展数据块收缩为小于使用 CREATE TABLE 语句创建该表时指定的扩展数据块大小。

可以使用 ALTER TABLE 语句的 MODIFY EXTENT SIZE 子句来减小当前扩展数据块大小。执行此操作之后,可重新运行收缩操作,以便将第一个扩展数据块收缩为新扩展数据块大小。

先决条件:您必须可以连接到 sysadmin 数据库(缺省情况下只有用户 gbasedbt 可连接),并且必须是 DBSA。

要将可用空间返还给数据库空间:

  1. 运行带 table shrinkfragment shrink 自变量的 admin()task() 函数。

    例如,为表指定:

    EXECUTE FUNCTION admin(“table shrink”, “table_name”, 
    “database_name”, “owner_name”);

    必须指定表名。数据库和所有者名称可选。 如果不指定数据库或所有者名称,GBase 8s 将使用当前数据库和所有者名称。

    例如,为分段指定:

    EXECUTE FUNCTION task(“fragment shrink”, “partnum_list”);

    partnum_list 是属于同一个表的分区号的空格分隔列表。

  2. 可以选择扩展自变量以在以下任意组合中包含 compressrepack
    • compress repack shrink
    • compress shrink
    • repack shrink

以下示例显示了这样的一个命令:指示 GBase 8s 收缩所有者为“bob”的“music”数据库内名为“opera”的表。

EXECUTE FUNCTION task("table shrink","opera","music","bob");
以下示例显示了这样的一个命令:指示 GBase 8s 重新打包和收缩分区号为 14680071 的分段。
EXECUTE FUNCTION task("fragment repack shrink," "14680071");