DB2新增表空间和缓冲池
在DB2中新建一个记录长度超过4K表时,如果系统报如下的错误,
“找不到页大小至少为 "16384" 且许可其使用授权标识 "DCARD" 的缺省表空间。”
则说明当前数据库的数据表空间的页面大小定义小于16k,需要修改表空间的页面大小,或者为数据库增加新的数据表空间,新的表空间页面大小必须大于16K。
关于DB2的表空间和缓冲池的基础知识,可以参考文章:http://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html
从上文中,我们知道了DB2有两种类型的表空间, SMS 和 DMS, 即系统管理和数据库管理的表空间,我们现在要增加的是DMS表空间。
一般来说,在创建DB2数据库的时候,每个数据库包括4个缺省的表空间,用命令可以查看,
DB2 LIST TABLESPACES SHOW DETAIL
当前数据库的表空间
表空间标识 = 0
名称 = SYSCATSPACE
类型 = 数据库管理空间
内容 = 所有持久数据。常规表空间。
状态 = 0x0000
详细解释:
正常
总计页数 = 24576
可用页数 = 24572
已用页数 = 19780
可用页数 = 4792
高水位标记(页) = 19780
页大小(以字节计) = 4096
扩展数据块大小(页) = 4
预取大小(页) = 4
容器数 = 1
表空间标识 = 1
名称 = TEMPSPACE1
类型 = 系统管理空间
内容 = 系统临时数据
状态 = 0x0000
详细解释:
正常
总计页数 = 1
可用页数 = 1
已用页数 = 1
可用页数 = 不适用
高水位标记(页) = 不适用
页大小(以字节计) = 4096
扩展数据块大小(页) = 32
预取大小(页) = 32
容器数 = 1
表空间标识 = 2
名称 = USERSPACE1
类型 = 数据库管理空间
内容 = 所有持久数据。大型表空间。
状态 = 0x0000
详细解释:
正常
总计页数 = 16384
可用页数 = 16352
已用页数 = 8512
可用页数 = 7840
高水位标记(页) = 8512
页大小(以字节计) = 4096
扩展数据块大小(页) = 32
预取大小(页) = 32
容器数 = 1
表空间标识 = 3
名称 = SYSTOOLSPACE
类型 = 数据库管理空间
内容 = 所有持久数据。大型表空间。
状态 = 0x0000
详细解释:
正常
总计页数 = 8192
可用页数 = 8188
已用页数 = 152
可用页数 = 8036
高水位标记(页) = 152
页大小(以字节计) = 4096
扩展数据块大小(页) = 4
预取大小(页) = 4
容器数 = 1
可以看出,现有的表空间页面的小确实为4K,
页大小(以字节计) = 4096
这是因为DB2系统在创建表空间的时候,必须有一个相应的缓冲池,而DB2在创建数据库的时候,会自动创建一个缺省的缓冲池 IBMDEFAULTBP, 这个BUFFERPOOL的大小为 4K. 显示缓冲池的命令如下:
SELECT * FROM SYSCAT.BUFFERPOOLS
为了新建记录长达大于4K的表,有两个方法可以选择,
1. 更新表空间的 BUFFERPOOL类型为页面更大的BUFFERPOOL类型
ALTER TABLESPACE USERSPACE1 BUFFERPOOL NEWBP1
2. 新建一个表空间,直接用大的BUFFERPOOL类型
在这里我们要创建一个新的表空间,首先必须要新建一个BUFFERPOOL类型,大小为16K,
CREATE BUFFERPOOL NEWBP1
SIZE 2000
PAGESIZE 16K
创建成功之后,我们可以用新的BUFFERPOOL定义新的表空间了,
CREATE LARGE TABLESPACE USERSPACE2
PAGESIZE 16 K
MANAGED BY DATABASE
USING (FILE '/home/db2data/NODE0000/WB/T0000004/C0000000.LRG' 500M)
EXTENTSIZE 16
PREFETCHSIZE 16
BUFFERPOOL NEWBP1
OVERHEAD 12.67
TRANSFERRATE 0.18
上面的SQL命令中,FILE 必须是一个新的文件,表空间创建成功后,数据库会多一个容器指向该文件,BUFFERPOOL 类型为新建的 NEWBP1,创建成功后,用命令查看结果,
DB2 LIST DATASPACES SHOW DETAIL
新建的表空间如下:
表空间标识 = 4
名称 = USERSPACE2
类型 = 数据库管理空间
内容 = 所有持久数据。大型表空间。
状态 = 0x0000
详细解释:
正常
总计页数 = 32000
可用页数 = 31984
已用页数 = 368
可用页数 = 31616
高水位标记(页) = 368
页大小(以字节计) = 16384
扩展数据块大小(页) = 16
预取大小(页) = 16
容器数 = 1
上面的表空间页面大小为16K。
OK, 我们现在可以创建一个记录长度大于4K的新表了。