网站首页 公司资讯 产品技术 解决方案 技术知识 软件注册 联系我们 网站地图
技术知识
双机热备知识简介
Pluswell纯软资源配置手册
Pluswell双机下DELL220S阵列配置方案
Pluswell双机下IBM EXP300阵列配置手册
Pluswell双机容错软件下Oracle9i安装手册
Pluswell双机软件下mssql2000安装手册
Pluswell双机Linux网络管理与网站构架
SAN 简介
Linux操作系统知多少
DB2和Web服务的融合
给Domino系统管理员的十二项建议
如何“在线”实现 DB2 表的页大小的改变
如何使用一条SQL语句插入多行数据
如何使用一条SQL语句将一个表中符合条件的内容插入到另外一个表中
RAID术语
对U的解释
SCO UNIX入门


如何“在线”实现 DB2 表的页大小的改变?


环境
产品:DB2 UDB
平台:跨平台
版本:v8.1,v8.2
问题
  对于DB2的而言,其表的最大大小,可包含的最多字段数及其每行记录的最大长度与表的页大小有关。所有创建在表空间中的表必须具有与表空间相同的页大小,而DB2的缓冲池或表空间的页大小可有4K、8K、16K和32K四种选择,相对应的字段数、行长和表大小见下表:

 

4K 页大小

8K 页大小

16K 页大小

32K 页大小

表的最多字段数

500

1012

1012

1012

表每行最大长度

4005

8101

16293

32677

表的最大大小

64

128

256

512

  由于这一原因,用户有时会有改变现有表的页大小以满足表在大小,字段数或行长度上的新需求。因为表在创建之后页大小就无法改变了,所以必须重新创建符合页大小要求的新表。如果所使用的数据库系统不允许由于删除原表,再重建新表所造成的长时间不能访问表中数据的结果,可采用这里介绍的方法,对表实现“在线”页大小的转换操作

解答
为实现在对表的页大小进行改变的过程中,表中的数据仍然能被访问的这种“在线”页大小的转换,可按如下步骤进行操作:
1)如果没有需要使用的页大小的表空间或缓冲池存在,应首先创建所需页大小的缓冲池和表空间。
2)可使用DB2LOOK工具获取创建表的DDL语句,如:
db2look -d <数据库名> -e -tw <表名> -o <输出文件名>
修改输出文件,以便将一个表名不同于原表的新表创建在具有所需页大小的表空间中。
3)利用修改后的 DDL 脚本创建一个与原表相同的新表。
4)使用如下语句将原表中的数据插入到新表中:
db2 "insert into <新表表名> (select * from <原表表名>)"
5)删除原表:

db2 "drop table <原表表名>"
此操作后,应用对表中数据暂时无法访问。
6)将新表表名更名为原表表名:
db2 "rename table <新表表名> to <原表表名>"
7)恢复应用对表中数据的访问。

此时更名为原表名的新表的页大小已从原来的页大小转换为所需页大小,从而满足了用户对该表大小上的新需求。表数据仅在整个过程的步骤4)到5)的瞬间不可访问,其它时间表中的数据均处于可访问的“在线”状态。

应注意的是,上述步骤仅适用于数据库中不存在依赖于该表的对象的情况,如果数据库中存在有依赖于该表的对象,应在保存有这些对象的DDL语句后,首先除去这些依赖关系,再进行原表的删除和新表更名操作,然后重建这些依赖关系。



北京蓝科泰达科技有限公司

High Available Software Technologies Support Center