今天负责把多个系统的db2数据库迁移到另外一台机器上。同时要修改WebSphere的数据源,让它指向新的数据库。以前没做过,对于数据库操作,我向来是要用的时候再去翻资料的。开始考虑使用备份、还原的方式,但版本不一样,原来是7现在是8,操作系统也不一样,原来是AIX,现在是Windows,这样备份还原是行不通的,于是采用db2move。
看看db2move的命令说明,大致就明白怎么做了,于是我就开始实战了。我采用最简单的方式,原机器上使用db2move &dbname export生成文件,在目标机上ftp拿到生成的文件,然后使用db2move &dbname import。目标机上只要创建一个新库,无需使用DDL生成表。信息显示所有表都ok,很快就搞定一个数据库,connect上去查看,表自动生成,数据也完全一致。然后在WebSphere所在机器上重新catalog新的数据库,语法也是现查的,现记录如下:catalog tcpip node &nodename remote &ip server &port, terminate, catalog db &remotedbname as &dbaliesname at node &nodename,terminate。加&表示根据实际设置的值。Db2 connect试试,新的连接正常。进入Administartor Console修改数据源配置,然后保存。重启server,测试完全正常。一个数据库搞定。
下面一个是我帮别人迁移的数据库,我对其表结构,表空间等都不知道。不管三七二十一,我先照着刚才办法做。Export一切正常,import前面的表都正常,快结束发现报错了,报创建表失败。到相应表的msg文件发现错误描述如下:
SQL3319N 创建表时发生 SQL 错误 "-286"。
SQL0286N 找不到页大小至少为 "8192"、许可使用授权标识 "DB2ADMIN"
的缺省表空间。 SQLSTATE=42727
原来需要8k页大小的表空间。这简单,使用控制中心新建一个8k的表空间。然后需要让出错的表使用这个表空间,也就是说要要使用DDL语句先创建这个表了。连上原来的数据库,生成这个表的DDL语句,修改tablespace名,改为新建的表空间,然后到新的数据库上执行。我不想重新再import所有表了,怎么做到呢,先看看生成的那些文件,有个db2move.lst,然后是每个表的ixf和msg文件,lst文件居然可以用文本打开,发现里面一行就是一个表,估计这就是需要导入表的列表了。删除那些已经正常导入的表信息,只留没导入的表,然后重新运行db2move &dbname import,这下一切正常了。然后就是剩下的同样工作了。
值得注意的是,db2move只导入表的信息,其它如view,trigger等均需通过DDL语句或控制中心添加。忙了一天,是为此记。