可以使用 ALTER FRAGMENT ON TABLE . . . MODIFY INTERVAL 语句的 Rolling Window 子句来修改或删除一个滚动参考表的现有清除策略。该子句也可以将不具有分布存储策略或不具有范围区间策略或具有范围区间策略(没有清除策略)的表更改为滚动窗口表。
元素 | 描述 | 限制 | 语法 |
---|---|---|---|
quantity | 滚动的区间分片的最大数 | 必须是比零打的整数。用户定义的分片不在此限制内。 | 整型字符 |
size | 分配给表和它的索引的存储的上限 | 必须比零大 | 整型字符 |
units | 表的总存储量的单位的简写 | 必须是 K 、KB 、KiB 、M 、MB 、MiB 、G 、GB 、GiB 、T 、TB 、TiB(或这些字符的小写)。任何尾随字符会导致语法错误。 | 以字母 K 、M 、G 或 T开头的不带引号的字符串 |
ALTER FRAGMENT MODIFY INTERVAL 语句中的 Rolling Window 子句的语法支持之前 CREATE TABLE FRAGMENT BY INTERVAL 语句中的 Rolling Window 子句的语法。
ALTER FRAGMENT MODIFY INTERVAL 语句的 Rolling Window 子句类似于它的语法,但是它不等同于 CREATE TABLE 语句的 Rolling Window 子句。ALTER FRAGMENT 的 Rolling Window 子句支持以下功能:
如果您打算暂时中止当前的清除策略,再随后恢复该相同的清除策略,则应该使用 INTERVAL DISABLED 关键字而不是 DROP ALL ROLLING 关键字。
当已分配的总存储大小或区间分片的总量超出 Rolling Window 子句指定的限制时,滚动窗口表的清除策略不会立即强制执行。
清除策略被设计为在滚动窗口表的分片上的所需 DETACH 和 ATTACH 操作不可能与并发用户的访问尝试冲突时作为 Scheduler 任务每天强制执行。缺省情况下,清除策略会每天的本地时间 00:45 时强制执行。有关更多信息,请参阅 GBase 8s 管理员指南 中的 Scheduler 的内置的 purge_tables 任务。
清除策略也可以通过执行 syspurge() 系统函数而手动强制执行。在 DBA 调用 syspurge() 函数之后,数据库服务器会检查系统目录,并标识任何清除策略已超出的滚动窗口表。然后数据库服务器会按照清除策略指定丢弃或拆离合格的滚动分片直到满足此清除策略,或直到没有可移除的滚动分片。syspurge() 函数不需要参数,但是接受可启用联机日志诊断的可选参数。
只有具有 DBA 存取权限的用户才能调用实行 DETACH 或 DISCARD 选项以拆离滚动分片的例程。具有 RESOURCE 存取权限的用户可以执行 syspurge() 函数,但是这只能对它们所拥有的表的强制执行清除策略。
数据库服务器会默默地忽略 syspurge() 函数关于高可用数据复制集群(HDR)环境中的辅助服务器的调用。类似地,在 grid 环境下,不会强制执行已复制的表的清除策略。这是因为 grid 环境和集群环境不会复制 DETACH 和 DISCARD 选项触发的 ALTER FRAGMENT 更改,这是滚动窗口清除策略的核心。
< original_table_name >_< lower value >_< higher value >
此处 lower_value 和 higher_value 是该分片在被拆离前,其范围区间的最小和最大值。
< original_table_name >_< lower value >_< higher value >_1以此类推,将 _2 附加在下一个表的名称后(或附加一个更大的整数,如果附加 _2 没有产生唯一的表名称。)
DISCARD 关键字指定删除已拆离的分片,因此当强制执行清除策略时,会及时地删除非必须的数据记录。通过这种方法,滚动分片的数量或滚动窗口表的存储空间总量会约束到规定值。