系统数据、用户数据和临时数据的表空间

每个数据库都必须要有最小的一组表空间,这些表空间用于存储系统数据、用户数据和临时数据。

一个数据库至少必须包含三个表空间:
  • 目录表空间
  • 一个或多个用户表空间
  • 一个或多个临时表空间

目录表空间

目录表空间包含数据库的所有系统目录表。 此表空间称为 SYSCATSPACE,它不能被删除。

用户表空间

用户表空间包含用户定义的表。 缺省情况下,将创建一个用户表空间 USERSPACE1。

如果创建表时未对其指定表空间,那么数据库管理器将自动进行选择。 有关更多信息,请参阅 CREATE TABLE 语句的 IN tablespace-name 子句的文档。

表空间的页大小确定了表中的最大行长度或列数。 CREATE TABLE 语句的文档说明了页大小与最大行大小和列数之间的关系。 在 V9.1 之前,缺省页大小为 4 KB。 在 V9.1 及其后续版本中,缺省页大小可以是其他受支持的值中的一个。 缺省页大小是在创建新的数据库时声明的。 声明了缺省页大小之后,仍然可以使用具有一种页大小的表空间作为表,而使用具有另一种页大小的另一个表空间来存储长型数据或 LOB 数据。 如果列数或行大小超过表空间页大小的限制,那么返回一个错误(SQLSTATE 42997)。

临时表空间

临时表空间包含临时表。 临时表空间可以是系统临时表空间用户临时 表空间

系统临时表空间存放数据库管理器在执行诸如排序或连接之类的操作时所需的临时数据。 这些类型的操作需要额外的空间来处理结果集。 数据库必须有至少一个系统临时表空间;在缺省情况下,创建数据库时会创建一个名为 TEMPSPACE1 的系统临时表空间。

处理查询时,数据库管理器可能需要访问页大小足以处理与查询相关的数据的系统临时表空间。 例如,如果查询返回的数据包含长度为 8KB 的行,并且没有页大小至少为 8KB 的系统临时表空间,那么该查询将失败。 您可能需要创建具有更大页大小的系统临时表空间。 通过定义页大小等于用户表空间的最大页大小的临时表空间,可以帮助您避免这些类型的问题。

用户临时表空间存放使用 DECLARE GLOBAL TEMPORARY TABLE 或 CREATE GLOBAL TEMPORARY TABLE 语句创建的表的临时数据。 缺省情况下,创建数据库时不会创建这些表空间。 它们还存放已创建临时表的实例化版本。 为了能够定义已声明临时表或已创建临时表,至少一个用户临时表空间应该是使用相应 USE 特权创建的。 USE 特权是使用 GRANT 语句授予的。

如果数据库使用多个临时表空间,并且需要新的临时对象,那么优化器将为此对象选择相应的页大小。 然后将把该对象分配到具有相应页大小的临时表空间中。 如果存在多个具有该页大小的临时表空间,那么将以循环方式来选择表空间,即,先选择具有该页大小的表空间,然后为将要分配的下一个对象选择下一个表空间并依此类推,直到用尽所有合适的表空间后回到第一个表空间。 但是,在大多数情况下,建议您不要创建多个具有相同页大小的临时表空间。