南大通用GBase8s 常用SQL语句(七十九)
存储选项
使用 CREATE TABLE 语句的 FRAGMENT BY 子句、PUT 子句、EXTENT 大小选项和 COMPRESSED 选项指定存储位置、分布方案、表的 extent 大小以及该表的大量新的数据行是否启用自动压缩。
Storage 选项
元素 | 描述 | 限制 | 语法 |
dbspace | 存储表的 Dbspace | 必须存在 | 标识符 |
extspace | 在 onspaces 命令中声明的名称,指的是数据库服务器之外的存储区域 | 必须存在 | 请参阅文档以了解您使用的存取方法 |
用法
为该表指的位置、分布方案和 extent 大小的存储选项是 SQL 语法 ANSI/ISO 标准的扩展。
如果使用 USING 存取方法子句来指定存取方法,则该方法必须支持存储空间。
您可以为表指定一个不同于数据库存储位置的 dbspace,或将表在多个 dbspace 之间分片,或在一个或多个 dbspace 的多个分区之间分片。
如果没有指定 IN 子句也没有指定分片方案,则新表将驻留在当前表所在的同一个 dbspace 中。但是,如果您启用了自动定位和分片,则表在被服务器选定的 dbspace 中创建和分片。要启用表的自动定位和分片功能,请将 AUTOLOCATE 配置参数或会话环境变量设置为正整数。该整数值代表初始分配给该表的分片数量。其它的分片随着表的增长而添加。
在 GBase 8s 中,您可以使用 PUT 子句为智能大对象指定存储选项。
注: 如果您的表包含简单对象(TEXT 或 BYTE),则可以为每个对象指定单独的 blobspace 。
使用 IN 子句
使用 IN 子句为该表指定存储空间。您指定的存储空间必须已经存在。
在 dbspace 中存储数据
可以使用 IN 子句来隔离表。例如,如果 history 数据库在 dbs1 dbspace 中,但是您希望将 family 数据放在名为 famdata 的一个单独的 dbspace 中,请使用以下语句:
CREATE DATABASE history IN dbs1;
CREATE TABLE family
(
id_num SERIAL(101) UNIQUE,
name CHAR(40),
nickname CHAR(20),
mother CHAR(40),
father CHAR(40)
)
IN famdata;
有关如何在不同的 dbspace 中存储和管理表的信息,请参阅 GBase 8s 管理员指南 。
在 extspace 中存储数据
通常,将 extspace 存储选项与 USING 存取方法子句 一起使用。有关更多信息,请参阅您使用的存取方法的文档。
PUT 子句
使用 PUT 子句指定存储空间以及要包含智能大对象的每个列的特征。
PUT Clause
元素 | 描述 | 限制 | 语法 |
column | 存储在 sbspace 中的列 | 必须包含 BLOB 、CLOB 、用户定义的或复杂数据类型 | 标识符 |
kilobytes | 要为 extent 大小而分配的千字节数 | 必须是整数值 | 精确数值 |
sbspace | 智能大对象的存储区域的名称 | 必须存在 | 标识符 |
指定的列不能是 column.field 格式。即,您所存储的智能大对象不能是 ROW 类型的一个字段。
指定存储位置
每个智能大对象都存储在单独的 sbspace 中。除非 PUT 子句 指定了另外的区域,否则 SBSPACENAME 配置参数指定在其中创建智能大对象的系统缺省值。
例如,以下示例创建只包含了 BLOB 数据类型列的 tabwblob 表。声明该列的名称为 image01,且 PUT 子句指定所有的 BLOB 对象的存储位置为 sbspace01 :
CREATE TABLE tabwblob
(
image01 BLOB
) PUT image01 IN (sbspace01);
要使以上示例有效,则 sbspace01 必须已经存在。因为 PUT 子句没有指定其它选项,所以 sbspace01 具有 extent 大小的缺省值和 PUT 子句能定义的其它存储特征的缺省值,包括以下定义中的 NO LOG 、HIGH INTEG 和 NO KEEP ACCESS TIME 。
PUT 子句可为 BLOB 和 CLOB 列列表指定存储位置。以下示例定义了 tabw2blobs 表,它有两个列,image02 列是 BLOB 类型,commentary03 列是 CLOB 类型。在下一个示例中,PUT 子句指定了在这两个列中的所有的智能大对象都将存储在同一智能大对象空间 sbspace01 中:
CREATE TABLE tabw2blobs
(
image02 BLOB,
commentary03 CLOB
) PUT image02 IN (sbspace01),
commentary03 IN (sbspace01);
可以在循环分布方案中指定多个 sbspace 来存储同一 BLOB 或 CLOB 列,这样每个 sbspace 中的智能大对象旧大致相同。单个列的 sbspace 列表(按逗号分隔)必须包含在括号内。
下一示例定义了 tabw2sblobs 表,它具有两列,image04 列是 BLOB 类型,commentary05 列是 CLOB 类型。PUT 子句指定 image04 列中的 BLOB 对象存储在两个 sbspace 中:sbspace01 和 sbspace02 ,而 image05 列中所有的 CLOB 对象存储在 sbspace03 sbspace 中:
CREATE TABLE tabw2sblobs
(
image04 BLOB,
commentary05 CLOB
) PUT image04 IN (sbspace01,sbspace02),
commentary05 IN (sbspace03);
如果 INSERT 或 MERGE 操作向此示例中的表中添加六个新的行,
- 三个 image04 BLOB 对象将存储于 sbspace01 ,
- 其它三个 image04 BLOB 对象将存储于 sbspace02 ,
- 所有的六个 commentary05 CLOB 对象将存储于 sbspace03 。
当您跨不同的 sbspace 传递智能大对象时,可以用较小的 sbspace 操作。如果限制了 sbspace 的大小,则备份和归档操作会加快执行,有关 PUT 子句的其它示例,请参阅完全备份的备用方式。