清单 11. 导入源数据集的命令示例
以下是引用片段: db2move targetdbname import -u username -p password |
如果数据量非常大,这个过程将会非常耗时。
7. 检查数据集导入过程日志,排除可能的错误。
导入完成后,你需要检查导入过程日志,查看有无错误发生。如果有错误,你需要找出解决方法,然后从步骤 5 重新开始。
8. 在目标系统执行数据系统对象定义语句
修改步骤 4 生成的 ddl 语句文件,去除文件前端的数据库连接语句,保存后执行如下命令:
清单 12. 命令示例
以下是引用片段: db2 connect to targetdbname user username using password db2 -tvf ddlfile > createSchema.log db2 connect reset |
9. 检查数据对象生成日志,排除可能的错误
通常你会发现有很多创建表的语句执行失败的记录,不要紧张,这是正常的,因为前面的步骤中已经生成了所有的用户表。所以检查的焦点应该放在其他数据库对象(如视图和触发器等)的生成语句上。 如果数据库非常复杂,可能需要非常细致的检查日志,以确保所有数据对象都正确创建。
10. 执行后期检查
通常,用户可能碰到两种需要处理的情况。其一,如果数据库系统中有用 Java 编写的存储过程,那么需要注册存储过程的外部程序包。命令示例如下:
清单 13. 命令示例
以下是引用片段: db2 call sqlj.install_jar (''jar_url'',''jar_id'') db2 drop procedure procedurename db2 create procedure procedurename external name '' jar_id: classname'' language java parameter style DB2GENERAL FENCED modifies sql data db2 grant execute on procedure procedurename to public |
其二,如果表定义中有数据库管理的自动增长列,比如表定义语句含有 "GENERATED BY DEFAULT AS IDENTITY"。那么你需要更新这些列的起始计数。命令示例如下:
清单 14. 命令示例
以下是引用片段: db2 alter table tabname alter column colname restart with newstartnumber |
这个 newstartnumber 的多少是要根据目前表中该列的最大值来定的,具体公式是 newstartnumber = currentmaxnumber + 1。
11. 配置应用程序,连接数据库,测试迁移是否成功。
上述就是完整的 DB2 跨平台数据库迁移步骤,笔者使用的 DB2 版本是 8.2。无论如何,数据库迁移是个复杂的问题,其中难免有些情况笔者未曾遇到,欢迎有过类似经验的高手指教和共同讨论。