DB2新增表空间和缓冲池

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的新表了。

 

 

 

你可能感兴趣的:(DBA)