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 LOGHIGH INTEGNO 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 中:sbspace01sbspace02 ,而 image05 列中所有的 CLOB 对象存储在 sbspace03 sbspace 中:

CREATE TABLE tabw2sblobs
        (
        image04 BLOB,
        commentary05 CLOB
        ) PUT image04 IN (sbspace01,sbspace02),
        commentary05 IN (sbspace03);

如果 INSERT 或 MERGE 操作向此示例中的表中添加六个新的行,

当您跨不同的 sbspace 传递智能大对象时,可以用较小的 sbspace 操作。如果限制了 sbspace 的大小,则备份和归档操作会加快执行,有关 PUT 子句的其它示例,请参阅完全备份的备用方式

指定 sbspace 特征

以下存储选项可用于存储 BLOB 和 CLOB 数据:

选项
作用
EXTENT SIZE
指定智能大对象中能最少存储多少千字节。数据库服务器可能将指定的 kilobytes 值集中起来,从而使范围是 sbspace 页面大小的若干倍。
HIGH INTEG
此高级数据完整性选项生成包含页眉和页尾的用户数据页以检测不完整的写和数据损坏。这是缺省的数据完整性行为。
MODERATE INTEG
此数据完整性选项生成包含页头但不包含页尾的用户数据页面。该选项可将页头和页尾进行比较以检测不完整的写和数据损坏。
KEEP ACCESS TIME
对于智能大对象元数据中的记录,智能大对象是最近一次对其进行读或写操作的系统时间。
NO KEEP ACCESS TIME
不记录智能大对象最近一次进行读或写的系统时间。与 KEEP ACCESS TIME 选项相比,它能提供更好的性能并且是缺省的跟踪行为。
LOG
对于相应的智能大对象,与当前数据库日志一起记录日志的过程。该选项将会生成大量的日志流量并增加填满逻辑日志的风险。(另见 完全备份的备用方式。)
NO LOG
关闭日志记录。该选项是缺省行为。

定义 sbspace 特征的关键字选项的逗号分隔的列表必须包含在括号中内,且紧随存储 BLOB 或 CLOB 列的 sbspace (或 sbspace 列表)的后面。在以下示例中, PUT 子句指定未日志记录的 sbspace01sbspace02 sbspaces 存储 image04 列的 BLOB 对象,它们与 sbspace03 具有不同的特征,sbspace03 是一个日志记录的 sbspace ,它存储 commentary05 列的 CLOB 对象:

CREATE TABLE tabw2sblobs
        (
        image04 BLOB,
        commentary05 CLOB
        ) PUT image04 IN (sbspace01,sbspace02) (KEEP ACCESS TIME, MODERATE INTEG),
        commentary05 IN (sbspace03) (EXTENT SIZE 30, LOG);

当您为智能大对象启动日志记录时,必须立即执行 0 级备份以便恢复并重新存储智能大对象。

syscolattribs 系统目录表包含 PUT 子句中每个 sbspacecolumn 组合的行:
  • syscolattribs.extentsize 列存储 extent 大小,它基于 kilobytes 值。
  • syscolattribs.flags 列存储关联到日志记录和存取时间状态的位图,和数据完整性设置。
如果用户定义的或复杂数据类型包含多个大对象,则指定的大对象存储选项将应用到该类型中的所有大对象。除非当大对象创建时重设了存储选项。
重要: PUT 子句不影响简单大对象数据类型(BYTE 和 TEXT)的存储。有关如何存储 BYTE 和 TEXT 数据的信息,请参阅大对象数据类型