如果需要从不同平台之间迁移DB2的数据,不能使用备份方式,而只能使用数据导出导入的方式。
1. 备份db2look -d DBALIAS -l -o dbstruct.ddl 生成数据库布局:表空间、缓冲池等
db2look -d DBALIAS -f -o dbcfg.ddl 生成配置参数和环境变量的语句
db2look -d DBALIAS -a -e -o dbobjects.ddl 生成导出表、视图、过程、函数等对象
(可以尝试加上-ct参数,否则输出的语句是乱序的,例如视图语句可能在它依赖的表之前,IBM连这种工作都不做好,BS之)
直接输入db2look命令可以查看参数说明
其它:
-ct 参数在AIX上DB2 9.5会出错
-f 参数生成的数据库配置参数也不完整,已修改过的参数 LOGARCHMETH1,LOGRETAIN 不能生成 (凸凸)
mkdir baktbs
cd baktbs
db2move DBALIAS export
db2 get dbm cfg > dbm.cfg
db2 get db cfg for DBALIAS > db.cfg
db2set -all > db2set.cfg
2. 恢复db2 create database DBALIAS using codeset gbk territory cn
打开dbstruct.ddl,修改表空间路径等,执行后创建相同名称的缓冲池、表空间
参考 dbcfg.ddl、dbm.cfg、db.cfg、db2set.cfg 文件修改实例、数据库参数、环境变量
打开dbobjects.ddl,调整个对象的创建顺序,按server,user,nickname,table,function,view,tigger,producted 顺序
注:最简单的方式是不改顺序,直接执行它5遍10遍的,这样就算是创建对象的语句在其依赖对象之前也能创建。第一次执行创建对象时不成功,在之后创建依赖对象后,第二次再执行时就创建成功了
cd baktbs
db2move DBALIAS load -lo replace
使用load的方式不需要检查数据约束,也不生成日志,比import快许多
使用load方式导入的数据表有些会有SQL0668N的错误,执行以下语句查询结果
select ' SET CONSTRAINTS FOR "' || rtrim(tabschema) ||'"."'||rtrim(tabname) || '" IMMEDIATE CHECKED ;' from syscat.tables where status='C' ;
以上步骤在不同平台主机间生成相同布局及数据的数据库。
阅读(801) | 评论(0) | 转发(0) |