查看其它 5 个回答chengzuqiao的回答

chengzuqiaochengzuqiao系统架构师江西省农村信用社

由于架构不同,所以使用DB2 命令BACKUP/RESTORE不可行,有人可能说使用db2move命令进行表级别迁移,其实也是不可行的,因为db2move命令不能迁移索引、外键约束、触发器,更不能迁移含自增字段数据的表。那么有什么方法可以解决呢? 一般来说有两种方案:
第一种:通过db2look,export,load等DB2命令,编辑脚本,进行数据库迁移。
1.在X86平台使用CREATE DATABASE命令创建数据库,创建必要的表空间及配置必要的数据库参数。
2.使用DB2look命令获取DDL语句:db2look -d SAMPLE -z DB2INST1 -e -o DBNAME.ddl -i db2inst1 -w db2inst1,对生产的脚本分成创建表、索引、外键约束的等三个脚本语句,并在第一步创建的数据库进行表批量创建。
3.查询系统表,生成export语句:
db2 "select 'export to ' || rtrim(tabname) || '.ixf of ixf select * from ' || rtrim(tabname) || ';' from syscat.tables where tabschema = 'DB2INST1'" > export.sql 并将数据从源库导出
4.查询系统表,生成load语句:
db2 "select 'load from ' || rtrim(tabname) || '.ixf of ixf insert into ' || rtrim(tabname) || ';' from syscat.tables where tabschema = 'DB2INST1'" > load.sql 注意:搜索表脚本语句文件中哪些表含有自增字段(含有GENERATED ALWAYS AS IDENTITY定义的字段的表),并对这些表的load语句加入modified by identityoverride。(例如: load from MYTABLE.ixf of ixf modified by identityoverride insert into MYTABLE;)因为load命令中的modified by identityoverride可以保证导入数据时那些自增字段的值和原数据库中的数据一致。
5.进入到放置.ixf数据文件的目录,使用db2 -tvf load.sql在目标端导入数据
6.使用之前生成的脚本文件创建外键约束和触发器.
7.运行runstats,收集下统计信息。
第二种方案:在x86平台创建表、外键约束、触发器和库的过程是一样的,主要是数据导入和导出不同,此种方案数据导入导出是借助第三方平台,例如IBM 的CDC跨平台数据复制技术,这个原则是贵公司有这个产品,如果有可以这样做。

银行 · 2017-09-29

回答者

chengzuqiao
系统架构师江西省农村信用社
擅长领域: 存储备份软件定义存储

chengzuqiao 最近回答过的问题

回答状态

  • 发布时间:2017-09-29
  • 关注会员:7 人
  • 回答浏览:2793
  • X社区推广