创建大型物体

将大型对象定义为 Db2 不同于将其他类型的数据和对象定义为大型对象。

准备工作

Db2 有时会隐式创建LOB表空间、辅助表以及表或分区中每个LOB列的辅助表索引。 更多信息,请参阅 LOB表空间隐式创建

如果 Db2 没有隐式创建LOB表空间、辅助表和辅助表索引,则必须通过发出CREATE TABLESPACE、CREATE AUXILIARY TABLE和CREATE INDEX语句来创建这些对象。

关于本任务

大型对象 和LOB 指的是 Db2 对象,可用于存储大量数据。 LOB是一个长度可变的字符串,最多可包含2GB的数据(1字节)。 Db2 支持以下LOB数据类型:
二进制大对象 (binary large object, BLOB)
使用BLOB来存储二进制数据,例如图片、语音和混合媒体。
字符大对象 (character large object, CLOB)
使用CLOB来存储SBCS或混合字符数据,例如文档。
double-byte character large object(双字节字符大对象,DBCLOB)
使用DBCLOB来存储仅包含DBCS数据的数据。

有关LOB数据类型的更多信息,请参阅大型对象(LOB )。

过程

要定义LOB列并将大对象数据移动到 Db2 ,请完成以下步骤:

  1. 可选: 在创建或修改表时,最多定义一个ROWID列,即使该表将包含多个LOB列。 如果在定义LOB列之前没有创建ROWID列, Db2 将隐式创建一个具有IMPLICITLY HIDDEN属性的ROWID列,并将其作为表的最后一列附加。

    如果在添加LOB列后添加ROWID列,则表中将有两个ROWID列:隐式创建的列和显式创建的列。 在这种情况下, Db2 确保两个ROWID列的值始终相同。

  2. 通过发出CREATE TABLE语句或一个或多个ALTER TABLE语句,定义一个或多个适当LOB类型列。
  3. 为LOB数据创建表空间和辅助表,除非 Db2 为您隐式创建了这些表。 更多信息,请参阅 LOB表空间隐式创建

    您必须为每个表分区创建一个LOB表空间,并为每个LOB列创建一个辅助表。 例如,如果您的基本表有三个分区,则必须为每个LOB列创建三个LOB表空间和三个辅助表。 使用以下语句创建这些对象 :CREATE LOB TABLESPACE 和CREATE AUXILIARY TABLE语句

    特权套装必须包括以下特权:

    • LOB对象使用的缓冲池和存储组的USE权限
    • 如果明确创建了基本表空间,则还需要在包含该表的数据库上创建 CREATETS(如果数据库是隐式创建的,则使用 DSNDB04 )
  4. 使用CREATE INDEX语句为每个辅助表创建一个索引。 每个辅助表必须有一个索引,每个索引条目都对应一个LOB。
  5. 请将LOB数据发送至 Db2

    如果LOB列和基础表行的总长度小于32 KB,您可以使用LOAD实用程序将数据放入 Db2您也可以使用SQL将LOB数据放入小于 32KB 的 Db2 中。 尽管数据位于辅助表中,但用于更改数据的LOAD实用程序语句或SQL语句会指定基础表。 使用INSERT或MERGE语句可能会比较困难,因为您的应用程序需要足够的存储空间来容纳LOB列中的全部值。

示例

开始通用编程接口信息。

假设您必须定义一个LOB表空间和一个辅助表来保存员工简历。 您还必须在辅助表上定义一个索引。 您必须在同一数据库中定义关联基本表的LOB表空间。 假设 EMP_PHOTO_RESUME 是基础表。 这个基本表有一个名为EMP_RESUME的LOB列。 您可以使用类似语句来定义LOB表空间、辅助表空间和索引:

CREATE LOB TABLESPACE RESUMETS
  IN MYDB
  LOG NO;
COMMIT;
CREATE AUXILIARY TABLE EMP_RESUME_TAB
  IN MYDB.RESUMETS
  STORES EMP_PHOTO_RESUME
  COLUMN EMP_RESUME;
CREATE UNIQUE INDEX XEMP_RESUME
  ON EMP_RESUME_TAB;
COMMIT;

您可以使用LOG子句来指定是否记录对表空间中的LOB列所做的更改。 前面的CREATE LOB TABLESPACE语句中的LOG NO子句表示不对RESUMETS表空间进行记录。

通用编程接口信息结束。