Informix 11.70系统管理: 空间管理(下)

原创
2016-06-07 17:53:59 751浏览

授予或撤销碎片的权限 如果您希望授予有用的碎片权限,您必须有一种战略来控制数据分布。一种有效的战略是按表达式来将数据记录碎片化。但是,round-robin 数据记录分布战略没有用,因为每个新数据记录都会被添加到下一个碎片中。round-robin 分布会清空任何

授予或撤销碎片的权限

如果您希望授予有用的碎片权限,您必须有一种战略来控制数据分布。一种有效的战略是按表达式来将数据记录碎片化。但是,round-robin 数据记录分布战略没有用,因为每个新数据记录都会被添加到下一个碎片中。round-robin 分布会清空任何跟踪数据分布的任何干净方法,进而消除对碎片授权的真正使用。出于基于表达式分布和 round-robin 分布之间的这一区别,GRANT FRAGMENT 和 REVOKE FRAGMENT 语句仅适用于具有基于表达式碎片的表。

当创建碎片表时,不存在默认的碎片授权。使用 GRANT FRAGMENT 语句在一个或多个碎片上授予插入、更新和删除权限。如果希望同时授予所有 3 种权限,可使用 GRANT FRAGMENT 语句的 ALL 关键字。请记住,不能仅通过命名包含碎片的表来授予碎片权限。您必须命名特定的语句。

当您希望撤销插入、更新或删除权限时,可以使用 REVOKE FRAGMENT 语句。此语句会撤销一个或多个用户针对碎片表的一个或多个碎片的权限。如果希望撤销一个表中当前存在的所有权限,可使用 ALL 关键字。如果不在命令中指定任何碎片,撤销的权限将适用于表中当前拥有该权限的所有碎片。

附加或分离碎片

您可以使用 ALTER FRAGMENT ATTACH 和 DETACH 语句来执行碎片操作。ALTER FRAGMENT ATTACH 提供了一种方式来组合两个未碎片化的表或向碎片表中添加碎片。ALTER FRAGMENT DETACH 提供了一种方式来删除一个碎片表的碎片。

ATTACH

使用 ALTER FRAGMENT ON TABLE 语句的 ATTACH 子句来将具有相同结构的表组合到一个碎片战略中。该子句还提供了一种方式,通过利用碎片技术来将大量数据增量地加载到一个现有的表中。

您附加的任何表都必须已在独立的分区中创建。不能多次附加同一个表。ATTACH 子句中列出的所有使用表必须具有与幸存的表相同的结构。列的数量、名称、数据类型和相对位置必须相同。

用户定义的例程以及对一个 ROW 类型列的字段的引用是无效的。不能将一个碎片表附加到另一个碎片表。

所有存储碎片的 dbspace 都必须具有相同的页面大小。

在两个未碎片化的表上执行 ATTACH 操作不能生成一个按间隔或按列表碎片化的幸存表。(如果希望附加两个未碎片化的表,您可使用 ALTER FRAGMENT 语句的 INIT 选项来为一个未碎片化的表定义中间隔或列表碎片模式,然后使用 ATTACH 选项将第二个表附加到它。)

对于按间隔碎片化的幸存表,具有以下限制:

  • 因为确定了碎片的顺序位置,所以 BEFORE 和 AFTER 规范无效。
  • 不能附加其表达式与现有的间隔碎片表达式相匹配的碎片。
  • 在附加超过过渡值的碎片时,正附加碎片的上限必须与一个间隔碎片边界保持一致。也就是说,碎片的上限必须等于过渡值加上间隔值的一个整数倍数。

对于由安全策略保护的碎片表,如果未满足任何以下条件,将一个碎片附加到该表的操作将会失败:

  • 源表和目标包都受相同的安全策略保护。
  • 两个表都具有相同的保护粒度(行级、列级或同时包含行级和列级)。
  • 在两个表中,同一组受保护的列受到了相同安全标签的保护。如果有多个受保护的列,可能每个表中有多个安全标签,但同一个标签必须保护两个表中的同一列。

如果由于未满足一个或多个上述条件,导致 ATTACH 操作失败,可以使用 ALTER TABLE 语句使两个表的模式相等,然后在修改的表上再次执行 FRAGMENT ATTACH 语句。

当将具有相同表结构的表转换为一个表中的碎片时,您允许数据库服务器管理碎片,而不是允许应用程序来管理碎片。分布模式可以是 round-robin 或基于表达式。

要从两个或多个结构相同的未碎片化表中创建一个碎片表,ATTACH 子句必须在附加列表中包含幸存表。附加列表是 ATTACH 子句中的一个表列表。

要在新创建的单个碎片表中包含 rowid 列,可首先附加所有表,然后使用 ALTER TABLE 语句添加 rowid。

将一个表附加到一个碎片表

要将一个未碎片化的表附加到一个已碎片化的表,未碎片化的表必须已在一个独立的 dbspace 中创建,并且必须具有与碎片表相同的表结构。

当将一个或多个表附加到一个碎片表时,consumed_table 必须是未碎片化的。

在 ATTACH 操作中使用 ONLINE 关键字。

ONLINE 关键字要求数据库服务器在内部提交 ALTER FRAGMENT ATTACH 工作(如果没有错误),以及向幸存表应用一个意向独占锁,而不是独占锁。独占锁适用于使用表,这些表必须是未碎片化的表。

执行 ATTACH 后的索引

幸存表上分离的索引会保留相同的碎片战略。也就是说,分离的索引不会自动调整来适应幸存表的新碎片。

在支持事务日志的数据库中,ATTACH 操作会依据幸存表的新碎片战略扩展幸存表上的任何附加索引。使用表的所有行将采用这些自动调整的索引。

在 IBM Informix 的无日志记录的数据库中,ATTACH 操作不会依据幸存表上的新碎片战略来扩展幸存表上的索引。要依据幸存表上的新碎片战略来扩展一个附加索引的碎片战略,必须丢弃该索引并在幸存表上重新创建它。

一些 ALTER FRAGMENT ... ATTACH 操作可能导致数据库服务器更新索引结构。当在这些情况下重新构建一个索引时,关联的列分布会自动重新计算,并且该索引可供查询优化器在为附加了碎片的表设计查询计划时使用。

对于 ALTER FRAGMENT ... ATTACH 自动为其重建了 B 型树索引的一个(或一组)索引列,重新计算的列分布统计信息等同于 HIGH 模式下由 UPDATE STATISTICS 语句所创建的分布。

如果重新构建的索引不是 B 型树索引,自动重新计算的统计信息将对应于 LOW 模式下由 UPDATE STATISTICS 语句所创建的分布。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。