CREATE TABLESPACE 语句
CREATE TABLESPACE 语句用于在当前服务器上定义表空间。 表格空间类型取决于指定的关键字。
FL 504根据指定的关键字,结果为分区按范围或分区按增长表空间。
有关在工作文件数据库中创建表格空间的规则和限制的信息,请参阅工作文件数据库中的表格空间。
有关创建大型对象(LOB)表空间的信息,请参阅 CREATE LOB TABLESPACE。
Db2 当您创建或修改表以添加XML列时,会隐式创建XML表空间。 更多信息,请参阅 XML表空间隐式创建。
调用 CREATE TABLESPACE
此语句可嵌入应用程序中或者以交互方式发出。 这是一个可执行语句,只有在DYNAMICRULES RUN行为生效时才能动态准备。 更多信息,请参阅授权ID和动态SQL。
授权 CREATE TABLESPACE
以下定义的特权套装必须至少包含以下一项:
- 数据库的CREATETS权限
- 数据库的DBADM、DBCTRL或DBMAINT权限
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)
如果数据库是隐式创建的,则数据库权限必须位于隐式数据库或 DSNDB04 上。
可能需要附加特权,如BUFFERPOOL和USING STOGROUP子句的描述中所述。
权限设置:
如果语句嵌入到应用程序中,权限集就是计划或软件包所有者所拥有的权限。 如果应用程序在可信环境中绑定,并指定了“角色作为对象所有者”子句,则角色就是所有者。 否则,授权ID就是所有者。
如果语句是动态准备的,则权限集是指进程的 SQL 授权 ID 拥有的权限,除非该进程处于可信上下文中,并且指定了 ROLE AS OBJECT OWNER 子句。 在这种情况下,特权集是指与流程的主要授权ID关联的角色所拥有的特权。
语法 CREATE TABLESPACE
- 1 同一条款不得重复出现。
- 2 FL 504 如果CREATE TABLESPACE语句在应用程序兼容性级别 V12R1M503 或更低,您可以使用已弃用的规范来创建非UTS分段或分区表空间。 请参阅创建非UTS表空间(已弃用 )。
- 3 默认的 SEGSIZE 值由 DPSEGSZ 子系统参数控制。
- 4 imptkmod-parameter 是IMPTKMOD子系统的参数值。 更多信息,请参阅宏 DSN6SYSP 中的IMPTKMOD。
按增长规格分区:
- 1 同一条款不得重复出现。
- 2 指定一个介于 1-256 之间的 2 的整数次幂,或接受基于 MAXPARTITIONS 值和缓冲池页面大小的默认值。 见表2。
按范围分区规范:
- 1组多个分区条款。 其他条款不得重复。
- 2 同一条款不得重复出现。
- 3 IMPTKMOD子系统参数指定了默认的TRACKMOD选项。 更多信息,请参阅宏 DSN6SYSP 中的IMPTKMOD。
- 只有在PAGENUM RELATIVE生效时,才能指定分区级别的 4 DSSIZE。
- 5 若省略 PAGENUM 子句, Db2 则使用为 PAGESET_PAGENUM 子系统参数指定的值。 参见页面设置页码字段(PAGESET_PAGENUM 子系统参数)
- 6 如果使用 PAGENUM RELATIVE,请指定 1-1024 范围内的任意整数,或接受默认值 4G。 如果使用绝对页码,请指定一个介于 1-256 之间的二进制整数,或者接受基于 NUMPARTS 值和缓冲池页面大小的默认值。 见表3。
自由块:
- 1 默认的 PCTFREE 值由 PCTFREE_UPD 子系统参数控制。
- 2 同一条款不得重复出现。
gbpcache-block:
锁定块:
使用块:
描述 CREATE TABLESPACE
- 表格空间名称
- 命名表空间。 该名称(由IN子句隐式或显式指定的数据库名称限定)不得标识当前服务器上或SYSPENDINGOBJECTS目录表中存在的表空间、索引空间或LOB表空间。
工作文件数据库中必须有一个用于已声明临时表的表空间。 PUBLIC隐式获得在工作文件数据库中创建的任何表空间的USE权限(无GRANT权限)。 这种隐含的特权没有记录在 Db2 目录中,也无法撤销。
- IN database-name
- 指定创建表空间的数据库。 数据库名称必须标识当前服务器上存在的数据库,且不得指定以下内容:
- DSNDB06
- 临时数据库
- 一个隐式创建的数据库
如果表空间用于已声明的临时表或静态可滚动游标,则必须指定工作文件数据库的名称。
FL 504 如果数据库名称标识工作文件数据库,则表空间必须是按分区增长的表空间。
DSNDB04 是默认值。
- 缓冲池(BUFFERPOOL )bpname
- 确定用于表空间的缓冲池,并确定表空间的页面大小。 对于 4KB、 8KB、 16KB 和 32KB 页面缓冲池,页面大小分别为4 KB、8 KB、16 KB和32 KB。 bpname 必须标识已激活的缓冲池,权限集必须包括SYSADM或SYSCTRL权限,或缓冲池的USE权限。 如果要在工作文件数据库中创建表空间,则不能指定 8KB 缓冲池和 16KB 缓冲池。
如果您没有指定BUFFERPOOL子句,则使用数据库的默认缓冲池。
有关bpname 的详细信息,请参阅 SQL中的命名约定。 请参阅ALTER BUFFERPOOL命令( Db2 ) 了解活动和非活动缓冲池的说明。
缓冲池页面大小会影响可用的分区数量。 更多信息,请参阅最大分区数和表空间大小。
- 按增长规格分区
指定创建按增长分区(PBG UTS)表空间。
FL 504 如果省略了 "按增长分区指定 "和 "按范围分区指定",则会创建一个 MAXPARTITIONS 为 256 的按增长分区表空间。
有关控制要创建的表空间类型的子句摘要,请参阅表空间类型。- MAXPARTITIONS 整数
- 指定表空间为按增长分区表空间。
integer 指定表空间可以扩展的最大分区数。 整数必须介于1-4096之间,具体取决于DSSIZE子句的相应值。 下表显示了MAXPARTITIONS的最大值与页面大小或表空间DSSIZE值的关系。
更多信息,请参阅最大分区数和表空间大小。表 1. 给定页面大小和DSSIZE值的最大MAXPARTITIONS值 DSSIZE值 4K 页面大小 8K 页面大小 16K 页面大小 32K 页面大小 1-4 G 4096 4096 4096 4096 8 G 2048 4096 4096 4096 16G 1024 2048 4096 4096 32G 512 1024 2048 4096 64G 256 512 1024 2048 128 G 128 256 512 1024 256 G 64 128 256 512 始终创建第一个分区的模式定义,如果指定了 NUMPARTS 值,则该值将控制最初创建的分区模式定义的数量,并为数据集分配空间。 其他分区数据集在需要时才会分配。
虽然物理数据集不是根据MAXPARTITIONS值定义的,但存储和CPU开销是可能的。 如果使用MAXPARTITONS子句预期分区数量会增加,请注意,为所有按增长分区表空间指定一个大于实际需要的值(例如4096,即最大值)作为默认值,可能会导致超出预期的存储请求。
- NUMPARTS 整数
- 如果指定了MAXPARTITIONS,则该整数值指定了要初始创建的分区架构定义的数量。 除非指定了“不定义”,否则数据集也会被分配到这些分区中。 integer 必须是介于 1-4096(含)之间的值,且必须小于或等于为 MAXPARTITIONS 子句指定的值。
如果未指定 MAXPARTITIONS,请参阅按范围分区规范中的 NUMPARTS 子句说明。
- DSSIZE 整数 G
- 指定表空间中分区的数据集大小(以整数 GB 为单位)。 每个分区占用一个数据集,因此数据集的大小也是分区的最大大小。
当为按增长分区表空间指定 DSSIZE 时,它必须是介于 1-256 G(1、2、4、8、16、32、64、128 或 256)之间的二幂整数。
整数可以与G相隔0个或更多空格。
FL 504 如果省略 MAXPARTITIONS 子句,对于任何页面大小,DSSIZE 的默认值都是 4G。 否则,DSSIZE 的默认值取决于缓冲池页面大小和指定的 MAXPARTITIONS 值,如下表所示。 
表 2. DSSIZE 默认按增长分区表空间 页面大小 MAXPARTITIONS 价值 DSSIZE 默认值 任意 1-254 4G 4K 255-4096 4G 8K 255-4096 8 G 16K 255-4096 16G 32K 255-4096 32G 对于任何大于4 G的DSSIZE值,表空间的数据集必须与 DFSMS 数据类相关联,该数据类使用扩展格式和扩展寻址指定。
DSSIZE值会影响可用的分区数量。 更多信息,请参阅最大分区数和表空间大小。
- 按范围分区规范
FL 504 指定创建按范围分区(PBR UTS)表空间。 有关控制要创建的表空间类型的子句摘要,请参阅表空间类型。
- NUMPARTS 整数
FL 500如果未指定 MAXPARTITIONS,则表示创建了按范围分区的表空间。 整数指定要创建的分区模式定义的数量。 除非指定了“不定义”,否则数据集也会被分配到这些分区中。 整数的取值范围必须在 1-4096 之间。 
如果还指定了 MAXPARTITIONS,请参阅按增长指定分区中的 NUMPARTS 子句说明。
对于使用 PAGENUM RELATIVE 创建的表空间,分区的最大数量为 4096 个。 对于具有 PAGENUM ABSOLUTE 的表空间,最大分区数取决于缓冲池页面大小和 DSSIZE。
总表空间大小取决于分区数和 DSSIZE。 更多信息,请参阅最大分区数和表空间大小。- 分区整数
- 指定以下分区级子句适用的分区。 整数范围从1到NUMPARTS给出的分区数。
您可以根据需要多次指定PARTITION子句。 如果您多次使用相同的分区编号,则仅使用该分区最后一次的规格。

- DSSIZE 整数 G
- FL 500 在按范围分区表空间的 PARTITION 子句中指定时(仅当为表空间指定了 PAGENUM RELATIVE 时才支持),为由 PARTITION 整数标识的分区指定数据集大小 ( 以整数 GB 为单位)。 每个分区占用一个数据集,因此数据集的大小也是分区的最大大小。
integer G的值可以是任何值 1–1024G。 默认值为 4G。整数可以与G相隔0个或更多空格。

页码
FL 500确定创建按范围分区的表空间时使用的页码类型。 PAGESET_PAGENUM子系统参数指定了默认的PAGENUM值。 参见页面设置页码字段(PAGESET_PAGENUM 子系统参数)。- RELATIVE
- 表示内部页面编号保留为4字节值,不带分区号。 页码是从分区开始算起的相对页码,分区号仅保留在页眉中。 当指定了 PAGENUM RELATIVE 时,表空间的数据集必须与一个 DFSMS 数据类相关联,该数据类以扩展格式和扩展可寻址性指定。
- 绝对值
- 表示内部页面编号以4字节值的形式保存,包括分区号和页面号。 区分哪些位代表分区,哪些位代表页码需要移位值。 换档值是 LOG base 2 (DSSIZE /(page -size ))。提示: 为获得最佳效果,请为PBR表空间使用相对页编号(RPN)。 RPN支持更大的分区,并为分区扩展提供了更大的灵活性。
绝对页编号在PBR表空间中已弃用。

- DSSIZE 整数 G
- 指定表空间中分区的数据集大小(以整数 GB 为单位)。 每个分区占用一个数据集,因此数据集的大小也是分区的最大大小。
FL 500 当在表空间级别为具有PAGENUM RELATIVE的范围分区表空间指定DSSIZE时,可指定1至1024 GB范围内的任意整数值,默认值为4 GB。 
整数可以与G相隔0个或更多空格。
若采用绝对页编号,DSSIZE 值必须为 1 至 256 G 范围内的 2 的幂整数(即 1、2、4、8、16、32、64、128 或 256),其默认值取决于 NUMPARTS 值与缓冲池页大小,具体如下表所示:
整数可以与G相隔0个或更多空格。
表 3. DSSIZE 默认用于按范围分区且具有绝对页码的表空间 页面大小 NUMPARTS 价值 DSSIZE 默认值 任意 1-16 4G 任意 17-32 2 G 任意 33-64岁 1 G 任意 65-254 4G 4K 255-4096 4G 8K 255-4096 8 G 16K 255-4096 16G 32K 255-4096 32G DSSIZE值会影响可用的分区数量。 更多信息,请参阅分区最大数量和表空间大小。
对于任何大于4 G的DSSIZE值,表空间的数据集必须与 DFSMS 数据类相关联,该数据类使用扩展格式和扩展寻址指定。
- SEGSIZE 整数
指定表空间中每个分区的大小(以页为单位)。 整数 必须是4的倍数,且在4到64之间。如果未指定 SEGSIZE,则默认 SEGSIZE 值由 DPSEGSZ 子系统参数控制。 如果DPSEGSZ值为0,则使用SEGSIZE 32。 否则,SEGSIZE值就是DPSEGSZ值。
然而,DPSEGSZ值对工作文件数据库中创建的表格空间没有影响,因此使用SEGSIZE 16。

- CCSID 编码方案
- 指定表空间中表的编码方案。
如果允许不指定 CCSID,则默认值为表空间所在数据库的编码方案,但数据库 DSNDB04; 中的表空间除外,对于数据库 DSNDB04 中的表空间,默认值为安装面板 DSNTIPF 中的字段 DEF ENCODING SCHEME 的值。
- ASCII
- 指定使用ASCII CCSID对数据进行编码。 如果表空间所在的数据库已定义为ASCII,则使用与该数据库关联的ASCII CCSID。 否则,将使用服务器的默认ASCII CCSID。
- EBCDIC
- 指定使用EBCDIC CCSID对数据进行编码。 如果表空间所在的数据库已定义为EBCDIC,则使用与该数据库关联的EBCDIC CCSID。 否则,将使用服务器的默认EBCDIC CCSID。
表空间中的EBCDIC表可以包含Unicode列。
- UNICODE
- 指定使用服务器的UNICODE CCSID对数据进行编码。
通常,每种编码方案只需要一个CCSID。 当使用混合、图形或Unicode数据时,需要额外的CCSID。
除非表空间位于工作文件数据库中,否则表空间中存储的所有数据必须使用相同的编码方案。
- CLOSE
- 指定在达到开放数据集数量限制时关闭数据集的优先级。
- YES
- 在 CLOSE NO 数据集之前,该表空间的数据集符合关闭条件。 默认值为 "关闭是"。
- 否
- 在所有符合 CLOSE YES 条件的数据集关闭后,该表空间的数据集才符合关闭条件。
Db2 始终对工作文件数据库中的表空间采用关闭后不保留的行为。
- COMPRESS
- 指定数据压缩是应用于表空间的行还是表空间中的分区。对于分区表空间,分区的压缩属性由适用于CREATE语句的以下条件中的第一个条件确定:
- 分区条款中压缩条款中指定的该分区值
- 在压缩子句中指定的值不在任何分区子句中
- 否则,默认分区为压缩无
有关数据压缩的更多信息,请参阅压缩数据。
YES
FL 509 指定对表空间或分区使用数据压缩。 在表空间或分区中的表上运行LOAD或REORG实用程序之前,或者在执行插入操作时,直到总行数据大小达到压缩数据阈值之前,行都不会被压缩。如果未指定压缩算法的关键字,则使用默认的压缩算法。 数据压缩算法由TS_COMPRESSION_TYPE子系统参数决定。
如果指定了压缩算法的关键字:- 为该表空间中的LOB列隐式创建的LOB表空间,其定义如同指定了压缩算法的压缩为YES。 LOB压缩由 zEDC 硬件(如有)。
- 在此表空间中为 XML 列隐式创建的 XML 表空间将继承压缩属性。
- 固定长度
- FL 509 指定了固定长度的数据压缩算法。
- 胡夫曼
- FL 509 指定霍夫曼数据压缩算法。 请参阅 “使用霍夫曼压缩来压缩数据 ”,了解启用霍夫曼压缩的要求。

- 否
- 指定表空间或分区不进行数据压缩。 插入的行不会被压缩。
- DEFINE
- 指定表空间的基础数据集何时进行物理分配。
- YES
- 数据集在创建表空间时创建(执行CREATE TABLESPACE语句)。 缺省值为 YES。
- 否
- 数据集在数据插入到表空间中后才创建。 定义“否”仅适用于 Db2 管理的数据集(指定使用STOGROUP)。 对于用户管理的数据集,DEFINE NO将被忽略(指定了USING VCAT)。 Db2 使用目录表SYSTABLEPART中的SPACE列记录数据集的状态(未定义或已分配)。
如果您打算使用 Db2 以外的任何工具来操作数据(例如加载数据),则不建议使用“定义否”,因为这样可能会导致数据集在 Db2 未预料的情况下出现。 当 Db2 遇到这种不一致的状态时,应用程序将收到错误。
对于使用“定义无”创建的表空间,在数据集和恢复副本存在之前,时间点恢复将不起作用。
- 自由块
- 指定在加载或重组表空间时如何留出可用空间。
- 自由页面整数
- 指定在加载或重新组织表空间或分区时,每隔多长时间留出页面空白。 您必须指定一个介于0到255之间的整数。 如果指定为0,则没有剩余空白页。 否则, 每n页后留出一个空白页,其中 n 是指定的整数。
剩余页数必须小于分段大小。 若指定的整数不小于分段大小 ,则n等于分段大小减1。
默认值为FREEPAGE 0,即没有空余页面。
有关更多信息,请参阅:
- PCTFREE smallint
- 指示在加载或重新组织表格时,每页应保留多少空白空间。 小数int 的范围是0-99。 每页的第一个记录不受限制地加载。 加载其他记录时,每页至少留有 1% 的可用空间。
默认值为PCTFREE 5,即每页预留5%的空间作为自由空间。
- 更新小数
- 指定每页上预留的可用空间百分比,供后续更新操作使用。 小数值是一个介于 -1 到99之间的整数。 更新 -1 指定初始预留 5% 的可用空间,可用空间的大小根据某些实时统计值自动计算。 每页上的第一个记录总是无限制加载的。
更新操作可能使用比 PCTFREE 或 PCTFREE FOR UPDATE 选项指定的空间更大的可用空间。
默认的FOR UPDATE值由PCTFREE_UPD子系统参数控制。
该值记录在 SYSIBM.SYSTABLEPART 目录表的PCTFREE_UPD列中。
PCTFREE smallint 和 FOR UPDATE smallint 的值之和必须小于或等于99。
特定分区的 FREEPAGE 和 PCTFREE 值由以下选项中第一个适用选项给出:
- 在分区子句中为该分区指定的FREEPAGE和PCTFREE值
- 在自由块中给出的值,不在任何分区子句中
- 默认值为FREEPAGE 0和PCTFREE 5。
有关更多信息,请参阅:
- gbpcache-块
在数据共享环境中,指定将表空间或分区的哪些页面写入组缓冲池。 在非数据共享环境中,您可以为表空间指定 GBPCACHE,但会被忽略。 但是,无论数据共享还是非数据共享,都不要在工作文件数据库中的表空间指定 GBPCACHE。
- GBPCACHE
- 指定表空间或分区的哪些页面写入组缓冲池。
- 已更改
- 当对表空间或分区存在互斥Db2 读写时,更新的页面将写入组缓冲池。 当没有互Db2 读/写操作时,不使用组缓冲池。 当数据共享组中不止一个成员打开表空间或分区,且至少有一个成员打开表空间或分区进行更新时,就存在互Db2 读/写权限。 GBPCACHE CHANGED是默认值。
如果表空间位于定义为仅用于交叉失效(GBPCACHE NO)的组缓冲池中,则“已更改”将被忽略,且不会将任何页面缓存到组缓冲池中。
- 全部
- 指示页面在从DASD读取时缓存到组缓冲池中。
例外情况 :如果只有 Db2 对页面集感兴趣,而其他 DB2s 没有兴趣,则不会在组缓冲池中缓存任何页面。
如果表空间位于定义为仅用于交叉失效(GBPCACHE NO)的组缓冲池中,则ALL将被忽略,且不会将任何页面缓存到组缓冲池中。
- 无
- 表示没有页面被缓存到组缓冲池。 Db2 仅将组缓冲池用于交叉验证。
如果指定 NONE,则表空间或分区在执行 CREATE TABLESPACE 语句时不能处于恢复挂起状态,而必须处于停止状态。
特定分区 GBPCACHE 的值由以下选项中第一个适用选项决定:
- 在分区子句中为分区指定的 GBPCACHE。 在任何分区条款中,不要使用超过一个 gbpcache-block。
- 表空间gbpcache-block中指定的值。
- 默认值已更改。
插入算法级别
FL 500 指定向此表空间中的表插入行时使用的算法。 插入算法级别仅在指定了成员群集时才适用。 缺省值为 0。- 0
- 指定插入算法级别由插入行时DEFAULT_INSERT_ALGORITHM子系统参数决定。
- 1
- 指定使用基本的插入算法。
- 2
- 指定使用插入算法2。

- LOCKMAX
- 指定应用程序进程在表空间中可同时锁定的最大页数或行数。 如果程序请求的数量超过此限制,则锁会升级。 页面或行锁被释放,桌面空间上的意向锁提升为S或X模式。
- 整数
- 指定升级前允许的锁数量,范围为0-2147483647。
零(0)表示桌子或桌子空间上的锁数量不计入升级。
- SYSTEM
FL 507 规定,程序在表空间中可同时持有的最大锁数由内置 SYSIBMADM.MAX_LOCKS_PER_TABLESPACE 全局变量决定 Db2 。更多信息请参阅内置全局变量MAX_LOCKS_PER_TABLESPACE。

下表总结了指定LOCKSIZE值而忽略LOCKMAX的结果。LOCKSIZE 最终锁紧力矩 任何 SYSTEM 表格空间、页面、行 0
若锁定范围为表空间,则必须省略 LOCKMAX,或将其操作数设为 0。
- 锁定块
- 指定用于表空间锁的大小,以及某些情况下锁升级的阈值。
- LOCKSIZE
- 指定表格空间内使用的锁的大小,在某些情况下,还指定升级锁的阈值。
- ANY
- 指定 Db2 可以使用任何大小的锁。
FL 507 在大多数情况下, Db2 使用LOCKSIZE PAGE LOCKMAX SYSTEM。 但是,当为表空间获取的锁数量超过表空间允许的最大锁数量( SYSIBMADM.MAX_LOCKS_PER_TABLESPACE 内置全局变量的值)时,页面锁将被释放,并使用分区级锁。 有关更多信息,请参阅内置全局变量 MAX_LOCKS_PER_TABLESPACE。
- TABLESPACE
- 指定表空间锁。
- PAGE
- 指定页面锁定。
- ROW
- 指定行锁。
- LOGGED 或 NOT LOGGED
- 指定是否将指定表空间中的数据更改记录在日志中。 无法为数据库 DSNDB06 中的表空间指定 LOGGED 和 NOT LOGGED ,该数据库包含 Db2 目录。 此设置适用于在指定表空间中创建的表以及该表的所有索引。 XML表空间及其索引从关联的基表空间继承日志记录属性。 辅助索引也继承关联基本表空间的记录属性。
- 已记录
- 指定对指定表空间中的数据进行更改时,将记录在日志中。
LOGGED 是缺省值。
- NOT LOGGED
- 指定对指定表空间中的数据所做的更改不记录在日志中。
未登录(NOT LOGGED)可防止撤销和重做信息记录在日志中;但是,指定表空间的控制信息将继续记录在日志中。
- MAXROWS 整数
- 指定 Db2 在每个数据页面上最多可放置的行数。 整数范围是1-255。 插入操作、LOAD和REORG会考虑此值。 对于LOAD和REORG,在MAXROWS之前会考虑PCTFREE规范;因此,存储的行数可能少于您为MAXROWS指定的值。
如果您没有指定MAXROWS,则默认行数为255。
- MEMBER CLUSTER
- 指定 插入操作插入的数据不会通过隐式聚簇索引(第一个索引)或显式聚簇索引进行聚簇。 相反, Db2 会根据可用空间来选择数据在表空间中的位置。
- trackmod
- 指定 Db2 是否在空间地图页面中跟踪修改过的页面。
- YES
- Db2 在空间地图页面中更改了跟踪的页面,以提高增量图像复制的性能。
- 否
- Db2 不跟踪空间地图页面中的更改页面。 它使用每个页面中的LRSN值来确定页面是否被修改过。
可以为每个分区或表空间指定 TRACKMOD 子句。 如果未为分区指定 TRACKMOD 值,则使用表空间的 TRACKMOD 值。 如果未指定表空间的 TRACKMOD 值,则使用 IMPTKMOD 子系统参数指定的默认值。 更多信息,请参阅宏 DSN6SYSP 中的IMPTKMOD。
- using-block
指定由 Db2 系统还是用户管理表空间或其分区的数据集。 USING子句可以针对每个分区或表空间进行指定。 如果未为分区指定 USING 子句,则使用为表空间指定的 USING 子句。 如果未为表空间指定 USING 子句,则使用数据库的存储组,并使用 PRIQTY、SECQTY 和 ERASE 的默认值。
如果省略了表空间的USING子句,则数据库的默认存储组必须存在。

- VCAT 目录名称
- 表示分区数据集由用户使用数据集命名约定中规定的命名约定进行管理。 与非分区的情况一样, 目录名称用于标识数据集的目录,并为数据集名称提供一级限定符。
一个或多个 Db2 子系统可以与当前服务器共享集成目录设施目录。 为了避免其中一个子系统尝试为不同的数据集分配相同的名称,请为目录名称选择一个其他 Db2 子系统未使用的值。
对于按增长分区表空间,不得指定使用VCAT。
Db2 每个分区只有一个数据集。
- STOGROUP stogroup-name
- 指示 Db2 将借助名为 stogroup-name 的存储组为分区创建数据集。 数据集是在执行此语句时定义的。 Db2 每个分区只有一个数据集。
存储组名称必须标识当前服务器上存在的存储组,权限集必须包括 SYSADM 权限、SYSCTRL 权限或存储组的 USE 权限。 用于存储组的集成目录设施目录中不得包含该数据集的条目。
当指定分区使用STOGROUP时,PRIQTY、SECQTY和ERASE的默认值是USING STOGROUP子句中指定的值,这些值不在任何PARTITION子句中。 如果未指定 USING STOGROUP 子句,则默认值为 PRIQTY、SECQTY 和 ERASE 描述中指定的值。
- PRIQTY 整数
指定由 Db2 管理的数据集的最小主空间分配。 integer 必须是正整数,或者 -1。 通常,当您指定PRIQTY为正整数时,主空间分配至少为n千字节 ,其中 n 为整数。 但以下情况例外:
- 对于 4KB 页面大小,如果整数大于 0 且小于 12,则 n 为 12。
- 对于 8KB 页面大小,如果整数大于 0 且小于 24,则 n 为 24。
- 对于 16KB 页面大小,如果整数大于 0 且小于 48,则 n 为 48。
- 对于 32KB 页面大小,如果整数大于 0 且小于 96,则 n 为 96。
- 对于任何页面大小,如果整数大于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覆盖这些数据。
备注 CREATE TABLESPACE
- 表格空间类型
FL 504 在应用程序兼容性 V12R1M504 级别及更高版本中,目标表空间的分区类型取决于CREATE TABLESPACE语句是否指定了MAXPARTITIONS子句和NUMPARTS子句,具体情况如下表所示。 如果CREATE TABLESPACE语句指定了NUMPARTS子句,但没有指定MAXPARTITIONS子句,则结果为按范围分区(PBR UTS)表空间。 否则,结果就是按增长分区(PBG UTS)表空间。然而,在应用程序兼容性级别以下 V12R1M504 ,可以创建已弃用的表空间类型,包括分段(非UTS)和分区(非UTS)表空间。 在这种情况下,创建的表空间类型取决于CREATE TABLESPACE语句中指定的SEGSIZE、MAXPARTITIONS和NUMPARTS子句。
表 4. CREATE TABLESPACE子句用于根据应用程序兼容性级别指定表空间类型。 表空间类型 APPLCOMPAT( V12R1M504 )及更高版本 APPLCOMPAT( V12R1M503 )和更低 按增长分列 以下任意组合: - 最大分区数和最大零件数
- 最大分区
- 两者都省略
以下任意组合: - 最大分区数和最大零件数
- MAXPARTITIONS 和 SEGSIZE n 1
- 最大分区
按范围分区 仅限NUMPARTS NUMPARTS 和 SEGSIZE n 1 分段(非UTS) 不支持2 以下组合之一: - 大小 n 1
- 省略MAXPARTITIONS、NUMPARTS和SEGSIZE
分区(非UTS) 不支持2 NUMPARTS和SEGSIZE 0 注:- 其中n 为非零值。 DPSEGSZ子系统参数决定了默认值。 更多信息,请参阅默认分区 SEGSIZE 字段(DPSEGSZ 子系统参数 )。
FL 504 基础表的非UTS表空间已弃用。 在应用程序兼容性级别 V12R1M504 的应用程序兼容性级别或更高版本时,总是创建一个按增长分区或按范围分区的表空间,而指定非UTS表空间(包括现有的多表分段表空间)的CREATE TABLE语句会返回错误。 但是,如果需要,例如在恢复的情况下,您可以使用较低的兼容性级别来创建已弃用类型的表空间。 有关说明,请参阅创建非UTS表空间(已弃用)。
更多信息,请参阅 Db2 for z/OS 中的表格空间类型和特征。

- DSSIZE值大于4 G
- 对于任何大于4 G的DSSIZE值,表空间的数据集必须与 DFSMS 数据类相关联,该数据类使用扩展格式和扩展寻址指定。
FL 504 XML 表空间
如果按增长分区表空间包含 XML 列,则对应的 XML 表空间为按增长分区表空间,其增长独立于基础表空间。 如果按范围分区的表空间包含一个 XML 列,则相应的 XML 表空间是一个按范围分区的表空间,且数据已分区。 也就是说,它是根据基础表数据的分区方案进行分区的。
- 使用当前已承诺访问权限的应用程序,其表空间指定了 LOCKSIZE PAGE
- 为了确保使用 LOCKSIZE PAGE 定义的表空间中的数据读取者能够始终访问当前提交的数据,请将 MAXROWS 设置为 8 或更小。 如果MAXROWS大于8,读者可能需要等待表空间中表的插入或删除操作提交后才能访问表中的行。
更多信息,请参阅访问当前提交的数据以避免锁定争用。
- 工作文件数据库中的表格空间
工作文件数据库中的FL 504 A表空间始终是按增长分区的表空间。
以下限制适用于在工作文件数据库中创建的表格空间:
- 只有当执行 Db2 子系统和另一成员都可以访问工作文件数据集时,才能为另一成员创建它们。 无论数据集是由用户管理还是位于 Db2 存储组中,都必须满足这一要求。
- 它们不能使用8 KB或16 KB页面大小。 (缓冲池中定义的表空间决定了页面大小。 例如,在4 KB缓冲池中定义的表空间有4 KB的页面大小。)
- 在工作文件数据库中创建表格空间时,不允许使用以下子句:
- CCSID
- COMPRESS
- 定义 无
- FREEPAGE
- GBPCACHE
- 大型
- 锁定部件
- LOCKSIZE
- 已记录
- 最大行数
- MEMBER CLUSTER
- NOT LOGGED
页码
- PCTFREE
- SEGSIZE(始终使用SEGSIZE 16)
- trackmod
Db2 始终对工作文件数据库中的表空间采用关闭后不保留的行为。
- 已声明临时表的表空间
声明的临时表和敏感的静态可滚动游标必须驻留在工作文件数据库的表空间中。 在定义和使用已声明的临时表或打开敏感的静态可滚动游标之前,工作文件数据库中必须至少有一个表空间,且其页面大小为32 KB。工作文件数据库中的表空间由工作文件、创建和声明的全局临时表以及敏感的静态可滚动光标结果表共享。 您无法指定任何特定对象要使用的表空间。

- 表格空间行格式
所有新创建的表空间均采用重新排序的行格式。
- 主要和次要空间分配规则
- 您可以指定主空间和次空间分配,也可以让 Db2 来选择。 让 Db2 选择数值,尤其是辅助空间数量,可以增加在超出范围之前达到最大数据集大小的可能性。 欲了解更多信息,请查看 Db2 空间分配。
- 分区数量上限和表格空间大小
对于使用相对页编号创建的按范围分区表空间,最大分区数为4096。
对于采用绝对页编号的按范围分区表空间或按增长分区表空间,下表展示了最大分区数与总表空间大小如何随缓冲池页大小和DSSIZE值变化(采用5字节扩展寻址存储)。 1- 4 KB页面大小
表5。 最大分区数和表空间大小(按DSSIZE划分),页面大小为4 KB DSSIZE MAXIMUM NUMBER OF PARTITIONS 桌子总面积 1G 4096 4 TB 2G 4096 8 TB 4G 4096 16 TB 8G 2048 16 TB 16G 1024 16 TB 32G 512 16 TB 64G 256 16 TB 128G 128 16 TB 256G 64 16 TB - 8 KB页面大小
表6。 最大分区数和表空间大小(以DSSIZE为单位),页面大小为8 KB DSSIZE MAXIMUM NUMBER OF PARTITIONS 桌子总面积 1G 4096 4TB 2G 4096 8TB 4G 4096 16TB 8G 4096 32TB 16G 2048 32TB 32G 1024 32TB 64G 512 32TB 128G 256 32TB 256G 128 32TB - 16 KB页面大小
表7。 最大分区数和表空间大小(以DSSIZE为单位),页面大小为16 KB DSSIZE MAXIMUM NUMBER OF PARTITIONS 桌子总面积 1G 4096 4 TB 2G 4096 8 TB 4G 4096 16 TB 8G 4096 32 TB 16G 4096 64 TB 32G 2048 64 TB 64G 1024 64 TB 128G 512 64 TB 256G 256 64 TB - 32 KB页面大小
表8。 最大分区数和表空间大小(以DSSIZE为单位),页面大小为32 KB DSSIZE MAXIMUM NUMBER OF PARTITIONS 桌子总面积 1G 4096 4 TB 2G 4096 8 TB 4G 4096 16 TB 8G 4096 32 TB 16G 4096 64 TB 32G 4096 128 TB 64G 2048 128 TB 128G 1024 128 TB 256G 512 128 TB
注:- 对于5字节非EA存储,4 KB页面大小的最大值为DSSIZE 4 G、4096个分区和16 TB的总表空间。
- CREATE TABLESPACE的替代语法和同义词
为兼容先前 Db2 版本或功能级别,支持以下关键字:
- 您可以指定LOCKPART子句,但它不起作用。 Db2 将所有表空间视为已定义为 LOCKPART YES。 LOCKPART YES 指定使用选择性分区锁定。 当选择性分区锁定所需的所有条件都满足时, Db2 才会锁定被访问的分区。 当选择性分区锁定条件不满足时, Db2 将锁定桌面空间的每个分区。
锁定大小、表空间和锁定部分是相互排斥的。
- 创建分区表空间时,您可以将PART指定为PARTITION的同义词。
- 在指定表空间的日志记录属性时,您可以将LOG YES指定为LOGGED的同义词,将LOG NO指定为NOT LOGGED的同义词。
FL 504 若未指定 MAXPARTITIONS 或 NUMPARTS,可将 LOCKSIZE TABLE 作为 LOCKSIZE TABLESPACE 的同义词进行指定。
- DSSIZE是指定分区大小的首选子句,不过您也可以在创建分区表空间时指定
CREATE LARGE TABLESPACE。 为了与 DB2® version 5 兼容,允许使用LARGE关键字 ,但前提是不指定DSSIZE子句。 建议使用 DSSIZE 子句来指定 4 GB 或更大的最大分区大小。 更多信息,请参阅非大表格空间(已弃用 )
虽然这些关键词可以作为备选方案,但它们并不是首选语法。
- 您可以指定LOCKPART子句,但它不起作用。 Db2 将所有表空间视为已定义为 LOCKPART YES。 LOCKPART YES 指定使用选择性分区锁定。 当选择性分区锁定所需的所有条件都满足时, Db2 才会锁定被访问的分区。 当选择性分区锁定条件不满足时, Db2 将锁定桌面空间的每个分区。
非大型表空间(已弃用)

非大表空间有4字节行标识符(RID),最大容量限制为64GB。 以下类型的表格空间可以是非大表格空间:
- 分区(非UTS)表空间,如果在创建时未指定 DSSIZE 或LARGE
- 所有分段(非UTS)表格空间
- 所有简单的表格空间
所有PBG和PBR UTS,以及任何使用 DSSIZE 或LARGE 指定的非UTS表空间,都被视为大型表空间 ,因为它们使用5字节或7字节的RID,并且可以包含超过64GB的数据。
Db2 产品文档很少提及大表空间属性,因为该属性适用于所有未被弃用的表空间类型。 它最初在 DB2 version 5 中引入,但很快就被DSSIZE条款取代。 通过指定CREATE LARGE TABLESPACE命令 ,可以创建一个大型表空间。 为了与 DB2 version 5 兼容,允许使用LARGE关键字 ,但前提是不指定DSSIZE子句。 建议使用DSSIZE子句来指定4GB或更大的最大分区大小。

例子 CREATE TABLESPACE
- 示例 1:
为按增长分区表空间使用存储组
- 在数据库中创建 DSN8S12D 数据库中 DSN8D12A。 让 Db2 定义数据集,使用存储组 DSN8G120。 主空间分配为52 KB,辅助空间分配为20 KB。 数据集在删除前无需先进行擦除。空间中的桌子锁定将在页面级别进行。 将表空间与缓冲池 BP1 关联。 当没有人使用表格空间时,数据集可以关闭。
CREATE TABLESPACE DSN8S12D IN DSN8D12A USING STOGROUP DSN8G120 PRIQTY 52 SECQTY 20 ERASE NO LOCKSIZE PAGE BUFFERPOOL BP1 CLOSE YES;对于上述示例,表空间的基础数据集将立即创建,这是默认设置(DEFINE YES)。 如果您想在数据首次插入表空间之前推迟数据集的创建,则应指定DEFINE NO,而不是接受默认行为。
FL 504 由于CREATE TABLESPACE语句省略了NUMPARTS和MAXPARTITIONS子句,因此生成的表空间为按增长分区表空间。
- 示例 2:
按范围分区表空间的分区选项
- 假设一个大型查询数据库应用程序使用表空间来记录历史销售数据,用于营销统计。 在数据库中为应用程序创建大型表格空间SALESHX DSN8D12A 应用程序。 创建一个包含82个分区的文件,并指定压缩分区80-82中的数据。
让 Db2 使用存储组 DSN8G120。 对于每个数据集,主空间分配为4000千字节,辅助空间分配为130千字节。 除了分区82的数据集外,其他数据集在删除前无需擦除。
锁定将在页面级别进行。 分区表空间中只能有一个表。 将表空间与缓冲池 BP1 关联。 当没有人使用表空间时,数据集无法关闭。 若无CLOSE YES数据集可关闭, Db2 则在达到DSMAX时可能关闭CLOSE NO数据集。
CREATE TABLESPACE SALESHX IN DSN8D12A USING STOGROUP DSN8G120 PRIQTY 4000 SECQTY 130 ERASE NO NUMPARTS 82 (PARTITION 80 COMPRESS YES, PARTITION 81 COMPRESS YES, PARTITION 82 COMPRESS YES USING STOGROUP DSN8G120 ERASE YES) LOCKSIZE PAGE BUFFERPOOL BP1 CLOSE NO;
FL 504 由于 CREATE TABLESPACE 语句指定了 NUMPARTS 子句而未指定 MAXPARTITIONS 子句,因此创建了一个按范围划分的表空间。
- 示例3:分区范围表空间
- 以下示例在数据库中创建了一个按范围分区的表空间 TS1 , DSN8D12A 使用存储组 DSN8G120。 表格空间每段有16页,共55个分区。 它指定了 LOCKSIZE ANY。
CREATE TABLESPACE TS1 IN DSN8D12A USING STOGROUP DSN8G120 NUMPARTS 55 SEGSIZE 16 LOCKSIZE ANY; - 示例4:分区范围表空间
- 以下示例在数据库中创建了一个按范围分区的表空间 TS2 , DSN8D12A 使用存储组 DSN8G120。 表格空间每段有64页,有七个可自定义的分区,其中每隔一个分区会被压缩。
CREATE TABLESPACE TS2 IN DSN8D12A USING STOGROUP DSN8G120 NUMPARTS 7 ( PARTITION 1 COMPRESS YES, PARTITION 3 COMPRESS YES, PARTITION 5 COMPRESS YES, PARTITION 7 COMPRESS YES ) SEGSIZE 64 DEFINE NO; - 示例5:按增长分区表空间
- 以下示例创建了一个分区增长表空间,每个分区最大为2GB,每个段有4页,表空间最多有24个分区。
CREATE TABLESPACE TS01TS IN TS01DB USING STOGROUP SG1 DSSIZE 2G MAXPARTITIONS 24 LOCKSIZE ANY SEGSIZE 4;
