分类: 服务器与存储
2008-07-28 20:49:24
DB2 是个有着广泛商业应用的关系数据库软件。作为一个数据库管理员时常面临着数据库系统的迁移工作,这是一个复杂而艰巨的过程。互联网和 DB2 的帮助文档中有许多关于 DB2 数据库迁移的介绍,但是对于 DB2 数据库的跨平台迁移却很少谈及。本文将基于笔者的成功实践,总结一下跨平台数据库迁移的步骤和注意事项。
简介
迁移步骤
经过笔者的实践,总结 DB2 数据库的跨平台迁移步骤如下:
记录源数据库管理系统配置参数,以备迁移过后数据库系统性能调优;
检查源数据库系统对象,明确要迁移哪些数据库系统对象;
导出源数据库系统的数据集;
生成源数据库系统的数据对象定义语句;
在目标平台创建新的数据库,参照源系统进行设置;
导入源数据集;
检查数据集导入过程日志,排除可能的错误;
执行数据对象定义语句;
检查数据对象语句执行日志,排除可能的错误;
检查更新存储过程的定义;
连接应用系统,测试数据库迁移是否成功。
下面给出一个遵循上述步骤的具体例子,其中将给出执行这些步骤的具体 DB2 命令以供参考。
1. 记录源数据库管理系统配置参数。这些是很重要的数据环境设置,其中的一些设置关系到迁移能否成功。
清单 1. 显示数据库管理系统配置参数的命令
db2 get dbm cfg
清单 2. 显示数据库配置参数的命令
db2 get db cfg for source_db_name
注意:Italic part should be replaced by your settings.
注意:对于比较复杂的源数据库,要注意它的应用程序组内存大小参数(appgroup_memo_sz)。如果它的大小不够,后面生成数据对象定义的时候会有问题。
清单 3. 显示数据库注册表变量的命令
db2set -all
清单 4. 显示数据库表空间的命令
db2 list tablespaces show detail
清单 5. 显示数据库程序包的命令
db2 list packages
上述显示表空间和程序包的命令都需要先建立到源数据库的连接。
2. 检查源数据库系统对象,明确要迁移哪些数据库系统对象
如何检查源数据库系统对象?一个最直观的方法就是使用DB2控制中心(db2cc)浏览查看表,视图,触发器,用户定义的函数,存储过程等数据库对象。尤其要注意有无大的表,比如一行数据的表定义可能大于8K的表。 这样的表需要在目标数据库上建立具有足够页大小的表空间。下面的步骤中将会给出列子。还需要注意的是有无外部定义的存储过程,这些存储过程所关联的外部程序包需要手工重新关联。
3. 导出源数据库系统的数据集
DB2 提供了一个工具叫作 db2move,用户通过它可以把所有用户定义的表中的数据导出到 IXF(集成交换格式)的文件中。同时,在导入数据的时候,它还可以生成表上的所定义的索引。具体的导出执行命令如下:
清单 6. 导出源数据集
db2move dbname
export -u
username
-p
password
根据数据库大小,机器性能的不同,这个导出过程可能耗时几分钟到几个小时不等。在笔者的经历中,这个导出过程就长达 2 个多小时。
4. 生成源数据库系统的数据对象定义语句
在导出了数据之后,要做的就是导出数据对象定义。DB2提供了一个工具叫db2look,用户可以通过它来生成数据库中的数据对象定义,包括别名,表,索引,视图,触发器,用户定义函数,存储过程等。具体的命令如下:
清单 7. 生成数据对象定义语句
db2look -d dbname
-e -o
ddlfile
-i
username
-w
password
如果数据库非常复杂,包含很多的数据对象定义,那么在执行上述命令前,用户有可能要先调整参数appgroup_memo_sz,才能够顺利的生成数据对象定义文件。下面是笔者修改这个参数的命令示例:
清单 8. 调整源数据库参数
db2 update db cfg for dbname using appgroup_mem_sz 51368
5. 在目标平台创建新的数据库,参照源系统设置参数
在源平台上完成了数据导出和数据对象定义语句生成之后,下面就是要在目标平台建立目标数据库了。参考源数据库的设置为新创建的数据库配置适当的参数,通常需要调整的参数有:
dbheap - 数据堆大小
catalogcache_sz - 目录高速缓存大小
logbufsz - 日志缓冲区大小
util_heap_sz - 实用程序堆大小
buffpage - 缓冲池大小
sortheap - 排序列表堆
stmtheap - SQL 语句堆
applheapsz - 缺省应用程序堆
笔者使用的调整语句如下:
清单 9. 调整语句