记一次数据迁移的经历

二〇一六年八月二十八日

前段时间公司要求我们项目版本做一次回收,因需要回公司做演示还需要将服务器数据考回到本地–这步比较棘手因为客户方开发环境U盘无法使用=。=,最后好不容易找了个借口 向别人搞了个内部U盘。

我们开发环境为AIX+DB2,因为只需做演示使用数据导出觉定不采用 db2move 命令,只选取全部基础表+少量业务表做数据导出(使用 export 命令)

总的来说按照以下步骤进行:

  • 源数据源数据导出(export)
  • 源数据库表结构等导出(db2look)
  • 本地Win环境安装DB2,重建数据库(缓冲区,表空间,索引空间等)
  • 本地数据结构恢复(db2 -tf db2look.sql)
  • 本地数据恢复(import)

具体详细步骤:

源数据源数据导出

db2 connect to dbname
db2 -tf exportDate.sql

exportData.sql中类似 export to XX.del OF DEL SELECT * FROM XX 语句

源数据库表结构等导出

db2look -d DBname -a -e -p -i userID -w password -o db2look.sql

重建数据库

CREATE DATABASE DBNAME AUTOMATIC STORAGE NO  ON 'G:\' USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM PAGESIZE 32768

CREATE BUFFERPOOL CSBP1 IMMEDIATE  SIZE 4000 PAGESIZE 32 K

CREATE REGULAR TABLESPACE CS_DATA PAGESIZE 32 K MANAGED BY DATABASE USING ( FILE 'G:\TBS\tablespace' 65536 ) EXTENTSIZE 32 OVERHEAD 10.5 PREFETCHSIZE 32 TRANSFERRATE 0.14 BUFFERPOOL  CSBP1

CREATE REGULAR TABLESPACE CS_IDX PAGESIZE 32 K MANAGED BY DATABASE USING ( FILE 'G:\TBS\indexspace' 1310720 ) EXTENTSIZE 32 OVERHEAD 10.5 PREFETCHSIZE 32 TRANSFERRATE 0.14 BUFFERPOOL  CSBP1

GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER userID

GRANT USE OF TABLESPACE CS_DATA TO USER ccmsdb WITH GRANT OPTION

本地数据结构恢复

db2 -tvf db2look.sql

本地数据恢复

db2 -tf importDate.sql

importDate.sql中类似 import from  XX.del OF DEL replace into XX 语句

Note

对于主键自增长型 GENERATED ALWAYS AS IDENTIFY 和 GENERATED BY DEFAULT AS IDENTIFY 数据重新导入时为了不影响原来的自增主键需使用 load from XX.del of del modified by identityoverride replace into basi_role nonrecoverable

碰到的问题

现象:数据库安装好后,需安装应用服务器WEBLOGIC,在应用部署到WEBLOGIC上后出现 org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken 异常

原因:Hibernate3 采用新的基于 antlr 的 HQL/SQL 查询翻译器,在 hibernate3 中需要用到 antlr,然而这个包在 weblogic 中已经包含了 antrl 类库,所以会产生一些类加载的错误,无法找到在 war 或 ear 中的 hibernate3.jar

解决方案:修改 %DOMAIN_HOME%/bin/setDomainEnv.cmd(Linux 为 setDomainEnv.sh),如:D:Programweblogic-10.3.6mydomainbinsetDomainEnv.cmd,在 set JAVA_HOME 的后面加上set PRE_CLASSPATH=path_of_antlr_jar


现象:不知什么原因在配置DB2数据源选择IBM DB2 TYPE4驱动时填写IP和端口时页面没有此两项输入地方,后台又提示必须输入主机和端口。

原因:未知,删除缓存重启WEBLOGIC也不行

解决方案:采用一个投机取巧的办法:先将安装DB2时安装的DB2驱动放到WEBLOGIC域下lib下面,然后在WEBLOGIC建数据源时选取ORACLE DB2驱动(选择这个无法连接数据库可能还需要原厂商的好使), 然后手动修改IBM DB2的url和驱动类(com.ibm.db2.jcc.DB2Driver)


现象:应用在本地出现未知错误

原因:查看日志发现存在很多java.lang.OutOfMemoryError: PermGen space,内存溢出。使用jvisualvm发现持久代MaxPermSize值只有128MB

解决方案:%DOMAIN_HOME%/bin/setDomainEnv.cmd(Linux 为 setDomainEnv.sh)-Xms1024m -Xmx1024m -XX:PermSize=48m -XX:MaxPermSize=256m

讨论

comments powered by Disqus