隐式定义的表格空间
Db2 当您发出未指定现有表空间名称的CREATE TABLE语句时,将隐式创建一个按增长分区或按范围分区的表空间。
当 Db2 隐式定义表空间时,它将为该表生成一个隐式创建的表空间。
如果满足以下条件,表空间名称与表名称相同:
- 数据库中还没有其他表空间或索引空间使用这个名字。
- 表格名称不得超过八个字符。
- 字符均为字母数字,且第一个字符不是数字。
但是,如果数据库中的另一个表空间已经与该表同名, Db2 会分配一个格式为 xxxxnyyy的名称,其中 xxxx 是表名的前四个字符, nyyy 是一个数字和三个字母,以确保唯一性。
如果未指定 IN 数据库子句 ,则 Db2 会为您生成一个名为 DSNxxxxx 的数据库,其中 xxxxx 为一个五位数字。
Db2 使用指定数据库的缓冲池。 然而,如果满足以下任何条件,则 Db2 会从子系统参数值TBSBPOOL、 TBSBP8K、 TBSBP16K 和 TBSBP32K 中选择一个合适的缓冲池作为表空间, 该参数位于面板DSNTIP2上:
- IN 数据库名称子句未指定。
- IN 数据库名称子句已指定,但表记录长度不符合数据库缓冲池页面大小。
如果CREATE TABLE语句省略了PARTITION BY子句或指定了PARTITION BY SIZE,则 Db2 将使用CREATE TABLESPACE语句的分区增长规范的默认值。 如果CREATE TABLE语句指定了PARTITION BY(带或不带RANGE关键字)和一组列值作为分区限制键,则 Db2 将使用分区范围规范的默认值。
对于隐式创建的表空间的其他属性,如果未在CREATE TABLE语句中指定(仅部分属性可以指定),则结果与显式CREATE TABLESPACE语句相同,但以下属性除外:
| 表格空间属性 | 如何确定 |
|---|---|
| COMPRESS | 如果CREATE TABLE语句中未指定,则该值由IMPTSCMP子系统参数确定。 |
| DEFINE | 始终由IMPDSDEF子系统参数的值决定。 |
| DSSIZE | 如果CREATE TABLE语句中没有指定,则该值由 IMPDSSIZE子系统参数确定。 |
| LOCKMAX | 始终使用LOCKMAX系统。 |
| LOCKSIZE | LOCKSIZE ROW 总是被使用。 |
| 页码 | 如果CREATE TABLE语句中没有指定,则该值由 PAGESET_PAGENUM子系统参数的值决定。 |
| 段大小 | 对于按范围划分的表空间,始终使用 SEGSIZE 32。 |
| trackmod | 如果CREATE TABLE语句中没有指定,则该值由 IMPTKMOD子系统参数确定。 |
在某些情况下, Db2 还可以为LOB列隐式创建LOB表空间、辅助表和辅助索引,以及为XML列创建基础XML对象。 更多信息,请参阅 LOB表空间隐式创建和 XML表空间隐式创建。 在这种情况下, Db2 使用默认存储组SYSDEFLT。
Db2 还会创建以下对象:
- UNIQUE约束的专用索引。
- 主要关键指标。
- 如果ROWID列定义为默认生成,则ROWID索引。
Db2 存储 目录表中所有表空间的名称和属性,无论您是显式定义表空间还是 隐式创建表空间。 SYSIBM.SYSTABLESPACE Db2