更改开始

创建LOB表空间

CREATE LOB TABLESPACE 语句用于在当前服务器上定义大型对象(LOB)表空间。 如果表格中的数据无法完全显示在数据页中,您可以将一个或多个列定义为LOB列。 每个LOB列必须在LOB表空间中有一个关联的辅助表。 如果基础表的表空间被分区,则基础表的每个分区都需要一个LOB表空间中的关联辅助表。

更改开始如果 Db2 隐式创建LOB表空间,请不要使用此语句。 更多信息,请参阅 LOB表空间隐式创建更改结束

有关明确创建辅助表的信息,该表用于定义基础表的LOB列与LOB表空间之间的关系,请参阅 CREATE AUXILIARY TABLE语句

更改开始有关创建LOB表空间以外的其他表空间的信息,请参阅 CREATE TABLESPACE语句更改结束

调用 CREATE LOB TABLESPACE

此语句可嵌入应用程序中或者以交互方式发出。 这是一个可执行语句,只有在DYNAMICRULES RUN行为生效时才能动态准备。 更多信息,请参阅授权ID和动态SQL

授权 CREATE LOB TABLESPACE

以下定义的特权套装必须至少包含以下一项:

  • 数据库的CREATETS权限
  • 数据库的DBADM、DBCTRL或DBMAINT权限
  • SYSADM 或 SYSCTRL 权限
  • 系统 DBADM
  • 更改开始安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)更改结束

如果数据库是隐式创建的,则数据库权限必须位于隐式数据库或 DSNDB04 上。

可能需要附加特权,如BUFFERPOOL和USING STOGROUP子句的描述中所述。

权限设置:

如果语句嵌入到应用程序中,权限集就是计划或软件包所有者所拥有的权限。 如果应用程序在可信环境中绑定,并指定了“角色作为对象所有者”子句,则角色就是所有者。 否则,授权ID就是所有者。

如果语句是动态准备的,则权限集是指进程的 SQL 授权 ID 拥有的权限,除非该进程处于可信上下文中,并且指定了 ROLE AS OBJECT OWNER 子句。 在这种情况下,特权集是指与流程的主要授权ID关联的角色所拥有的特权。

语法 CREATE LOB TABLESPACE

阅读语法图跳过可视化语法图 CREATE LOB TABLESPACE 表格空间名称 1INDSNDB04IN数据库名称BUFFERPOOLbpnameCLOSE YESCLOSE NOCOMPRESS NOCOMPRESS YESDEFINE YESDEFINE NODSSIZE4 GDSSIZE整数Ggbpcache-块LOCKMAXSYSTEM整数锁定块LOGGEDNOT LOGGEDusing-block
注意:
  • 1 同一条款不得重复出现。

gbpcache-block:

阅读语法图跳过可视化语法图GBPCACHE CHANGEDGBPCACHE ALLGBPCACHE SYSTEMGBPCACHE NONE

锁定块:

阅读语法图跳过可视化语法图LOCKSIZE ANYLOCKSIZE LOB

使用块:

阅读语法图跳过可视化语法图 USING VCAT目录名称STOGROUP用户组名称PRIQTY整数SECQTY整数ERASE NOERASE YES1
注意:
  • 1 同一条款不得重复出现。
表格空间名称
命名表空间。 该名称(由IN子句隐式或显式指定的数据库名称限定)不得标识当前服务器上存在的表空间、索引空间或LOB表空间,也不得标识SYSPENDINGOBJECTS目录表中存在的表空间、索引空间或LOB表空间。
IN database-name
指定创建表空间的数据库。 LOB表空间必须与其关联的基础表空间位于同一数据库中。 数据库名称必须标识当前服务器上存在的数据库,且不得指定以下内容:
  • DSNDB06
  • 工作文件数据库
  • 临时数据库
  • 一个隐式创建的数据库

DSNDB04 是默认值。

缓冲池(BUFFERPOOL )bpname
确定用于表空间的缓冲池,并确定表空间的页面大小。 对于 4KB、 8KB、 16KB 和 32KB 页面缓冲池,页面大小分别为4 KB、8 KB、16 KB和32 KB。 bpname 必须标识已激活的缓冲池,权限集必须包括SYSADM或SYSCTRL权限,或缓冲池的USE权限。

如果您没有指定 BUFFERPOOL 条款,则默认缓冲池为安装面板 DSNTIP1 上 DEFAULT BUFFER POOL FOR USER LOB DATA 字段中指定的缓冲池。

有关bpname 的详细信息,请参阅 SQL中的命名约定。 请参阅ALTER BUFFERPOOL命令( Db2 ) 了解活动和非活动缓冲池的说明。

CLOSE
当开放数据集的数量达到上限时,指定关闭数据集的优先级。
YES
在收盘前有资格收盘,无数据集。 关闭 是默认值。
在所有符合条件的CLOSE YES数据集关闭后,才符合关闭条件。
更改开始COMPRESS更改结束
更改开始指定数据压缩是否适用于表空间中的 LOB 数据。
更改开始 Db2 for z/OS® 中的 LOB 压缩需要满足以下条件:
  • Db2 12 必须达到功能级别500 或更高
  • 硬件和软件必须可用且配置正确。 zEDC 硬件和软件必须可用,并配置在 z/OS 系统中。 更多信息,请参阅 zEnterprise 数据压缩要求

    在数据共享中,如果成员访问压缩的LOB数据,且 zEDC 硬件和软件未配置为 z/OS

  • LOB表空间必须与通用表空间中的基础表相关联。
  • 整个LOB的总长度必须大于定义的数据页面大小,否则LOB不会被压缩。
更改结束

更多信息,请参阅压缩LOB数据

YES
指定数据压缩。 LOB数据在表空间中的表上运行LOAD或REORG实用程序之前,或在通过插入操作执行插入操作之前,不会被压缩。
指定表空间不进行数据压缩。
更改结束
DEFINE
指定表空间的基础数据集的物理创建时间。
YES
数据集在创建表空间时分配(执行CREATE LOB TABLESPACE语句时)。 缺省值为 YES。
在数据插入表空间之前,数据集不会被分配。 定义“否”仅适用于 Db2 管理的数据集(指定使用STOGROUP)。 对于用户管理的数据集,DEFINE NO将被忽略(指定了USING VCAT)。 Db2 使用目录表SYSTABLEPART中的SPACE列记录数据集的状态(未定义或已分配)。

如果您打算使用 Db2 以外的任何工具来操作数据(例如加载数据),则不建议使用“定义否”,因为这样可能会导致数据集在 Db2 未预料的情况下出现。 当 Db2 遇到这种不一致的状态时,应用程序将收到错误。

对于使用“定义无”创建的表空间,在数据集和恢复副本存在之前,时间点恢复将不起作用。

DSSIZE 整数 G

指定LOB表空间中每个数据集的最大大小(以整数千兆字节为单位)。

如果未指定 DSSIZE,则默认值为 4 G。 数据集的最大数量为254。

要指定大于4 G的值,表空间的数据集必须与 DFSMS 数据类相关联,该数据类已指定扩展格式和扩展寻址。

有关LOB表空间的最大大小(或基础表每列LOB数据的最大大小)的描述,请参阅 LOB表空间

GBPCACHE
在数据共享环境中,指定将表空间的哪些页面写入组缓冲池。 在非数据共享环境中,您可以指定 GBPCACHE,但会被忽略。
已更改
当对表空间存在互Db2 读/写操作时,更新后的页面会写入组缓冲池。 当没有互Db2 读/写操作时,不使用组缓冲池。 当数据共享组中不止一个成员打开了表空间,且至少有一个成员打开表空间进行更新时,就存在跨Db2 R/W 权限。 GBPCACHE CHANGED是默认值。
建议 更改开始使用 GBPCACHE CHANGED 选项。 根据 LOB 的使用模式,使用 GBPCACHE CHANGED 可以避免向磁盘和组缓冲池同步写入过多数据。更改结束

如果表空间位于定义为仅用于交叉失效(GBPCACHE NO)的组缓冲池中,则将忽略“已更改”,且不会将任何页面缓存到组缓冲池中。

全部
指示页面在从DASD读取时缓存到组缓冲池中。

例外: 如果只有 Db2 成员更新,而其他 Db2 成员对页面集不感兴趣,则不会在组缓冲池中缓存任何页面。

如果表空间位于定义为仅用于交叉失效(GBPCACHE NO)的组缓冲池中,则ALL将被忽略,且不会将任何页面缓存到组缓冲池中。

SYSTEM
表示仅将LOB表空间中已更改的系统页面缓存在组缓冲池中。 系统页面是指空间地图页面或任何其他不包含实际数据值的页面。
表示没有页面被缓存到组缓冲池。 Db2 仅将组缓冲池用于交叉验证。
LOCKMAX
指定应用程序进程在表空间中可同时持有的最大锁数。 如果程序请求的数量超过此限制,则锁会升级。 锁被释放,桌面空间的意向锁定被提升为S或X模式。
整数
指定升级前允许的锁数量,范围为0-2147483647。

零(0)表示桌面上锁的数量不计入升级范围。

SYSTEM
更改开始FL 507 指定 Db2 从 SYSIBMADM.MAX_LOCKS_PER_TABLESPACE 内置全局变量中确定程序在表空间中可同时持有的最大锁数。

更多信息请参阅内置全局变量MAX_LOCKS_PER_TABLESPACE

更改结束
下表总结了指定LOCKSIZE值而忽略LOCKMAX的结果。
LOCKSIZE 最终锁紧力矩
任何 SYSTEM
表空间 0

更改开始如果锁的大小为 TABLESPACE,则必须省略 LOCKMAX,否则其值必须为 0。更改结束

LOCKSIZE
指定表格空间内使用的锁的大小,在某些情况下,还指定升级锁的阈值。
ANY
指定 Db2 可以使用任何大小的锁。

更改开始FL 507 在大多数情况下, Db2 对 LOB 表空间使用 LOCKSIZE LOB LOCKMAX SYSTEM。 然而,当为表空间获取的锁的数量超过表空间允许的最大锁数量( SYSIBMADM.MAX_LOCKS_PER_TABLESPACE 内置全局变量的值)时,LOB锁将被释放,并设置到下一个更高的级别。 更多信息,请参阅 MAX_LOCKS_PER_TABLESPACE 内置全局变量更改结束

如果隐式创建表空间,则 Db2 使用LOCKSIZE ANY。

TABLESPACE
指定表空间锁。
LOB
指定LOB锁。
LOGGED 或 NOT LOGGED
指定是否将指定表空间中的数据更改记录在日志中。 此设置适用于表格的所有索引。 辅助索引从关联的基表空间继承日志记录属性。
已记录
指定对指定表空间中的数据进行更改时,将记录在日志中。

LOGGED 是缺省值。

NOT LOGGED
指定对指定表空间中的数据所做的更改不记录在日志中。

未登录(NOT LOGGED)可防止撤销和重做信息记录在日志中;但是,指定表空间的控制信息将继续记录在日志中。

使用块
如果省略了 USING,则数据库的默认存储组必须存在。 USING子句表明表空间的数据集是由您定义还是由 Db2 定义。 如果 Db2 用于定义数据集,则该子句还提供空间分配参数和擦除规则。

如果省略了 USING, Db2 将使用数据库的默认存储组以及 PRIQTY、SECQTY 和 ERASE 的默认值来定义数据集。

VCAT 目录名称
指定表空间的第一组数据由用户管理,后续数据组(如有需要)也由用户管理。

数据集是VSAM线性数据集,在集成目录工具目录中编目, 目录名称为 有关目录名称值的更多信息,请参阅 SQL中的命名约定

多个 Db2 子系统可以与当前服务器共享集成目录设施目录。 为了避免这些子系统尝试为不同的数据集指定相同名称,请指定一个其他 Db2 子系统未使用的目录名称值

STOGROUP stogroup-name
指定 Db2 将定义和管理表空间的数据集。 每个数据集将在已识别的存储组中定义。 PRIQTY和SECQTY的指定值(或默认值)决定了数据集的主次分配。 存储组为数据集提供卷名,并为数据集名称提供一级限定符。 一级限定符也是集成目录设施目录的名称或别名1 ,数据集将在该目录中编目。 数据集的命名规则与用户管理数据集时使用的规则相同。 正如上文提到的VCAT,如果本地 Db2 能够与其他 Db2 子系统共享集成目录设施目录,则一级限定符可能会导致命名冲突。

stogroup-name 必须标识当前服务器上存在的存储组。 需要SYSADM或SYSCTRL权限,或存储组的USE权限。

存储组的描述必须至少包含一个卷序列号,或者必须说明卷的选择由存储管理子系统(SMS)决定。 如果描述中出现卷序列号,则每个序列号必须标识一个卷,以便 z/OS 动态分配数据集,且所有标识的卷必须属于同一设备类型。

用于存储组的集成目录设施目录不得包含表空间第一个数据集的条目。 如果集成目录设施目录受密码保护,则存储组的描述必须包含有效的密码。

PRIQTY 整数

指定由 Db2 管理的数据集的最小主空间分配。 integer 必须是正整数,或者 -1。 通常,当您指定PRIQTY为正整数时,主空间分配至少为n千字节 ,其中 n 为整数。 但以下情况除外:

  • 对于 4KB 页面大小,如果整数大于0且小于200, 则n 为200。
  • 对于 8KB 页面大小,如果整数大于0且小于400, 则n 为400。
  • 对于 16KB 页面大小,如果整数大于0且小于800, 则n 为800。
  • 对于 32KB 页面大小,如果整数大于0且小于1600, 则n 为1600。
  • 对于任何页面大小,如果整数大于67108864,则 n 为67108864。

如果您没有指定 PRIQTY,或者指定的 PRIQTY 值为 -1 ,则 Db2 会使用默认值进行主空间分配;有关 Db2 如何确定默认值的信息,请参阅 Db2 表空间和索引的主空间分配

如果您指定了PRIQTY,但没有指定 -1 的值,则 Db2 将使用 p KB 的最小倍数(不小于 n) 来指定访问方法服务的主要空间分配,其中 p 是表空间的页面大小。 分配的空间可能大于 Db2 所申请的空间。 例如,可能只有最少的曲目数量能够满足要求。 根据VSAM空间分配限制,存储组中必须有一定容量可用于满足所请求的存储空间量。 否则,首要的空间分配将无法实现。 要更精确地估计实际存储量,请参阅 DEFINE CLUSTER 命令

执行此语句只会创建一个数据集。 然而,您可能拥有比这一数据集所能容纳的更多的数据。 Db2 在需要时自动定义更多数据集。 无论PRIQTY中的值是多少,当数据集达到最大值时, Db2 会创建一个新的数据集。 为了使数据集达到最大容量而不超出范围,建议您允许 Db2 自动选择扩展的辅助空间分配值。

如果您确实需要明确指定SECQTY,为避免浪费空间,请使用以下公式确保PRIQTY及其关联的二级扩展值不超过数据集的最大大小:
PRIQTY + (number of extents * SECQTY) <= DSSIZE (implicit or explicit)
SECQTY 整数
指定由 Db2 管理的数据集的最小辅助空间分配。 整数必须为正整数、0或 -1。 如果您没有指定SECQTY,或者指定SECQTY的值为 -1 , Db2 将使用公式来确定一个值。 有关用于辅助空间分配的实际值的信息(无论您是否指定了值),请参阅 Db2 表空间和索引的主空间分配

如果您指定了SECQTY,但没有指定 -1 的值,则 Db2 将使用 p KB的最小倍数(不小于整数 )指定访问方法服务的辅助空间分配,其中 p 是表空间的页面大小。 分配的空间可能大于 Db2 所申请的空间。 例如,可能只有最少的曲目数量能够满足要求。 要更精确地估计实际存储量,请参阅 DEFINE CLUSTER 命令

擦除
指示在执行删除表空间的实用程序或SQL语句时,是否要删除 Db2 管理的表空间数据集。
不会删除数据集。 涉及数据集删除的操作将比“ERASE YES”执行得更好。 不过,数据仍然可以访问,但不是通过 Db2。 这是缺省值。
YES
删除数据集。 作为安全措施, Db2 在删除数据集中的所有数据前,会用0覆盖这些数据。

创建LOB TABLESPACE的注意事项

主要和次要空间分配规则
您可以指定主空间和次空间分配,也可以让 Db2 来选择。 让 Db2 选择数值,尤其是辅助空间数量,可以增加在超出范围之前达到最大数据集大小的可能性。 欲了解更多信息,请查看 Db2 空间分配
确定要创建的LOB表空间的数量

对于分区表,基础表的每个分区都需要单独的LOB表空间、辅助表以及每个LOB列的辅助索引。

其他语法和同义词

db2z_addpartition

更改开始为与以前的 Db2 版本或功能级别兼容,支持以下关键字:更改结束
  • 在指定表空间的日志记录属性时,您可以将LOG YES指定为LOGGED的同义词,将LOG NO指定为NOT LOGGED的同义词。

虽然这些关键词可以作为备选方案,但它们并不是首选语法。

示例 CREATE LOB TABLESPACE

假设在示例员工表中为每位员工的照片添加了一个名为 EMP_PHOTO 的列,数据类型为 BLOB( 110K )。 在数据库中为将保存BLOB数据的辅助表创建LOB表空间PHOTOLTS DSN8D12A 用于保存BLOB数据的辅助表。

Db2 使用存储组 DSN8G120。 每个数据集的主空间分配为3200千字节,辅助空间分配为1600千字节。 数据集在删除前无需先进行擦除。 (因为默认值为“ERASE NO”,所以无需明确指定该子句即可获得该行为。)
   CREATE LOB TABLESPACE PHOTOLTS
     IN DSN8D12A
     USING STOGROUP DSN8G120
       PRIQTY 3200
       SECQTY 1600
     LOCKSIZE LOB
     BUFFERPOOL BP16K0
     GBPCACHE SYSTEM
     NOT LOGGED
     CLOSE NO;
更改结束
1 集成目录工具目录的别名。