db2迁移方案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

db2是个有着广泛商业应用的关系数据库软件。作为一个数据库管理员时常面临着数据库系统的迁移工作,这是一个复杂而艰巨的过程。互联网和db2的帮助文档中有许多关于db2数据库迁移的介绍,但是对于db2数据库的跨平台迁移却很少谈及。本文将基于笔者的成功实践,总结一下跨平台数据库迁移的步骤和注意事项。简介设想您是一个db2商业数据库系统的管理员。您被给予一项任务,支持业务开发和测试团队对商业系统的持续开发,为他们创建一套独立于产品环境的数据库系统,从而不影响日常的商业运作。由于种种原因,这套开发和测试数据库系统将运行在一个不同于产品环境的操作系统。我们知道db2提供了一些方便的数据库管理工具,比如数据库的整体备份和恢复功能,用户可以用它很方便的将一个db2数据库从一台物理节点迁移到另一个物理节点,但是db2的备份和恢复功能目前只支持同构操作系统平台间的迁移,比如从windows平台到windows平台,AIX平台到AIX平台。对于上述任务要求的跨平台的数据库迁移,就没有一个专门的工具可以很方便的实现。迁移步骤经过笔者的实践,总结db2数据库的跨平台迁移步骤如下:记录源数据库管理系统配置参数,以备迁移过后数据库系统性能调优;检查源数据库系统对象,明确要迁移哪些数据库系统对象;导出源数据库系统的数据集;生成源数据库系统的数据对象定义语句;在目标平台创建新的数据库,参照源系统进行设置;导入源数据集;检查数据集导入过程日志,排除可能的错误;执行数据对象定义语句;检查数据对象语句执行日志,排除可能的错误;检查更新存储过程的定义;连接应用系统,测试数据库迁移是否成功。下面给出一个遵循上述步骤的具体例子,其中将给出执行这些步骤的具体db2命令以供参考。1.记录源数据库管理系统配置参数。这些是很重要的数据环境设置,其中的一些设置关系到迁移能否成功。清单1.显示数据库管理系统配置参数的命令以下是引用片段:db2getdbmcfg清单2.显示数据库配置参数的命令以下是引用片段:db2getdbcfgforsource_db_name注意:Italicpartshouldbereplacedbyyoursettings.注意:对于比较复杂的源数据库,要注意它的应用程序组内存大小参数(appgroup_memo_sz)。如果它的大小不够,后面生成数据对象定义的时候会有问题。清单3.显示数据库注册表变量的命令以下是引用片段:db2set-all清单4.显示数据库表空间的命令以下是引用片段:db2listtablespacesshowdetail清单5.显示数据库程序包的命令以下是引用片段:db2listpackages上述显示表空间和程序包的命令都需要先建立到源数据库的连接。2.检查源数据库系统对象,明确要迁移哪些数据库系统对象如何检查源数据库系统对象?一个最直观的方法就是使用DB2控制中心(db2cc)浏览查看表,视图,触发器,用户定义的函数,存储过程等数据库对象。尤其要注意有无大的表,比如一行数据的表定义可能大于8K的表。这样的表需要在目标数据库上建立具有足够页大小的表空间。下面的步骤中将会给出列子。还需要注意的是有无外部定义的存储过程,这些存储过程所关联的外部程序包需要手工重新关联。3.导出源数据库系统的数据集db2提供了一个工具叫作db2move,用户通过它可以把所有用户定义的表中的数据导出到IXF(集成交换格式)的文件中。同时,在导入数据的时候,它还可以生成表上的所定义的索引。具体的导出执行命令如下:清单6.导出源数据集以下是引用片段:db2movedbnameexport-uusername-ppassword根据数据库大小,机器性能的不同,这个导出过程可能耗时几分钟到几个小时不等。在笔者的经历中,这个导出过程就长达2个多小时。4.生成源数据库系统的数据对象定义语句在导出了数据之后,要做的就是导出数据对象定义。DB2提供了一个工具叫db2look,用户可以通过它来生成数据库中的数据对象定义,包括别名,表,索引,视图,触发器,用户定义函数,存储过程等。具体的命令如下:清单7.生成数据对象定义语句以下是引用片段:db2look-ddbname-e-oddlfile-iusername-wpassword如果数据库非常复杂,包含很多的数据对象定义,那么在执行上述命令前,用户有可能要先调整参数appgroup_memo_sz,才能够顺利的生成数据对象定义文件。下面是笔者修改这个参数的命令示例:清单8.调整源数据库参数以下是引用片段:db2updatedbcfgfordbnameusingappgroup_mem_sz513685.在目标平台创建新的数据库,参照源系统设置参数在源平台上完成了数据导出和数据对象定义语句生成之后,下面就是要在目标平台建立目标数据库了。参考源数据库的设置为新创建的数据库配置适当的参数,通常需要调整的参数有:dbheap-数据堆大小catalogcache_sz-目录高速缓存大小logbufsz-日志缓冲区大小util_heap_sz-实用程序堆大小buffpage-缓冲池大小sortheap-排序列表堆stmtheap-sql语句堆applheapsz-缺省应用程序堆笔者使用的调整语句如下:清单9.调整语句以下是引用片段:db2updatedbcfgfordbnameusingdbheap41599db2updatedbcfgfordbnameusingcatalogcache_sz38049db2updatedbcfgfordbnameusinglogbufsz256db2updatedbcfgfordbnameusingutil_heap_sz20000db2updatedbcfgfordbnameusingbuffpage1000db2updatedbcfgfordbnameusingsortheap4096db2updatedbcfgfordbnameusingstmtheap16384db2updatedbcfgfordbnameusingapplheapsz10242对于非常复杂的数据库,目标数据库的日志参数还需要做出调整,以便在导入数据和生成数据对象时,系统不至于日志溢出。由于笔者要迁移的数据库比较复杂,所以使用了较大的日志配置,命令示例如下:清单10.命令示例db2updatedbcfgfordbnameusinglogfilsiz8192db2updatedbcfgfordbnameusingmincommit1db2updatedbcfgfordbnameusinglogprimary24db2updatedbcfgfordbnameusinglogsecond1086.导入源数据集细心的读者可能会发现,这里总结的步骤6和8看似不太符合一般的逻辑顺序。对于数据库系统,通常都是先生成数据系统对象,如表,视图,触发器等,然后再导入数据集。而上述步骤中却是先导入数据集,然后再生成数据对象定义。这能行的通吗?对于DB2来说,这完全行得通,因为db2move命令在导入数据集时,会自动生成表和索引。这样的顺序对于复杂数据对象定义的数据库迁移是唯一可行的顺序,因为复杂数据库中往往包含诸多复杂的数据约束语句,它们会造成数据集导入时的种种问题。清单11.导入源数据集的命令示例以下是引用片段:db2movetargetdbnameimport-uusername-ppassword如果数据量非常大,这个过程将会非常耗时。7.检查数据集导入过程日志,排除可能的错误。导入完成后,你需要检查导入过程日志,查看有无错误发生。如果有错误,你需要找出解决方法,然后从步骤5重新开始。8.在目标系统执行数据系统对象定义语句修改步骤4生成的ddl语句文件,去除文件前端的数据库连接语句,保存后执行如下命令:清单12.命令示例以下是引用片段:db2connecttotargetdbnameuserusernameusingpassworddb2-tvfddlfilecreateSchema.logdb2connectreset9.检查数据对象生成日志,排除可能的错误通常你会发现有很多创建表的语句执行失败的记录,不要紧张,这是正常的,因为前面的步骤中已经生成了所有的用户表。所以检查的焦点应该放在其他数据库对象(如视图和触发器等)的生成语句上。如果数据库非常复杂,可能需要非常细致的检查日志,以确保所有数据对象都正确创建。10.执行后期检查通常,用户可能碰到两种需要处理的情况。其一,如果数据库系统中有用Java编写的存储过程,那么需要注册存储过程的外部程序包。命令示例如下:清单13.命令示例以下是引用片段:db2callsqlj.install_jar('jar_url','jar_id')db2dropprocedureprocedurenamedb2createprocedureprocedurenameexternalname'jar_id:classname'languagejavaparameterstyleDB2GENERALFENCEDmodifiessqldatadb2grantexecuteonprocedureprocedurenametopublic其二,如果表定义中有数据库管理的自动增长列,比如表定义语句含有GENERATEDBYDEFAULTASIDENTITY。那么你需要更新这些列的起始计数。命令示例如下:清单14.命令示例以下是引用片段:db2altertabletabnamealtercolumncolnamerestartwithnewstartnumber这个newstartnumber的多少是要根据目前表中该列的最大值来定的,具体公式是newstartnumber=currentmaxnumber+1。11.配置应用程序,连接数据库,测试迁移是否成功。上述就是完整的db2跨平台数据库迁移步骤,笔者使用的db2版本是8.2。无论如何,数据库迁移是个复杂的问题,其中难免有些情况笔者未曾遇到,欢迎有过类似经验的高手指教和共同讨论。

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功