软件开发

请问怎样快速导入导出DB2数据库

一个项目中要使用DB2,然后就开始了痛苦的过程,首先,我真的真的真的无意冒犯使用DB2的大家,我就是想问下DB2有什么快捷的导入导出数据库,我在oracle里完全就用imp/emp搞定了。我在DB2里创建了数据库、缓冲池、表空间后,然后,我实际环境使用的DB2数据库跟我测试环境的一样的,我怎样把产生环境的数据库导到测试环境呢?在oracle 里,我只要导出产生环境的数据,删掉测试环境的用户,重建用户,重新导就行了,但在DB2里我找来找去也没找到有什么方法。我使用了
b2look -d dbname-e -a -x -i user-w paw-o dbname.sql
db2move dbname export -u user -p paw
导出,
使用
db2 -tvf dbname.sql
db2move 数据库 load

导入,使用连接DB2工具看到那些表的时候确实欢天喜地的激动了一阵,但当我点击具体表的时候,我呆了,天呀,N个表报弹出” SQL0668N  Operation not allowed for reason code "1"错误
说要执行set integrity for 表名immediate checked 这个语句,试了一个,那个表果然不错了,问题是这么多表,我要一个个执行吗????请问有没有高手给个语句,可以把所以的表都弄好了,bat文件也行,或者告诉我不是这样弄的,有简单的方法,我也真不想要这样的方法。
对了还想了个问题,我照那个高手的话,把数据库drop掉后,再用restore,提示 restore是completed successfully,but one or more tablespace  from the backup was not restored.是不是我还得恢复表空间,请问这个又是怎么样的一个流程解决办法?
请高手多多指导!!!!!
参与7

6同行回答

xhyaiyexhyaiye信息技术经理银保
相比之下,db2look/db2move 方式导入导出和 backup/restore方式导入导出,前者适用于任何操作系统平台之间导入导出,但是backup不是兼容任何操作系统之间的导入导出。显示全部
相比之下,db2look/db2move 方式导入导出和 backup/restore方式导入导出,前者适用于任何操作系统平台之间导入导出,但是backup不是兼容任何操作系统之间的导入导出。收起
保险 · 2013-11-11
浏览726
zhuojyzhuojy软件开发工程师gdcc
感谢各位的热心帮忙,正研究中。。。研究完再答复,再次感谢sunyangnj显示全部
感谢各位的热心帮忙,正研究中。。。研究完再答复,再次感谢sunyangnj收起
软件开发 · 2013-09-26
浏览746
ppjava2009ppjava2009系统工程师用友汽车信息科技(上海)有限公司
每一种产品都有各自的优势和劣势,这些产品生产商已经尽量在改进提高了,好的东西肯定会借鉴的,但不可能都一样,都一样那还要那么多产品干吗。显示全部
每一种产品都有各自的优势和劣势,这些产品生产商已经尽量在改进提高了,好的东西肯定会借鉴的,但不可能都一样,都一样那还要那么多产品干吗。收起
互联网服务 · 2013-09-26
浏览676
ppjava2009ppjava2009系统工程师用友汽车信息科技(上海)有限公司
相比而下,DB2比较麻烦点,但ORACLE的dmp问题也不少,而且既然使用了DB2,那就即来之则安之,想办法解决,埋怨是没用的,你要这样想既然用了DB2而不用ORACLE则说明DB2较ORACLE比较适合你的项目,不然干脆换ORACLE。...显示全部
相比而下,DB2比较麻烦点,但ORACLE的dmp问题也不少,而且既然使用了DB2,那就即来之则安之,想办法解决,埋怨是没用的,你要这样想既然用了DB2而不用ORACLE则说明DB2较ORACLE比较适合你的项目,不然干脆换ORACLE。收起
互联网服务 · 2013-09-26
浏览669
sunyangnjsunyangnj技术经理苏宁金融研究院
2 如果你采取导入导出数据export+load的话在导入数据,且668报错后,执行以下脚本,解除完整性暂挂状态with gen(tabname,seql) as (select rtrim(tabschema)||'.'||rtrim(tabname) as tabname,row_number() over (partition by status) as seq from syscat.tables where st...显示全部
2 如果你采取导入导出数据export+load的话
在导入数据,且668报错后,执行以下脚本,解除完整性暂挂状态
with gen(tabname,seql) as (select rtrim(tabschema)||'.'||rtrim(tabname) as tabname,row_number() over (partition by status) as seq from syscat.tables where status='C'),r(a,seq1) as (select cast(tabname as varchar(3900)),seq from gen where seq=1 union all select r.a||'.'||rtrim(gen.tabname),gen.seq from gen, r where (r.seq1+1)=gen.seq),r1 as (select a,seq1 from r) select 'set integrity for'||a||'immediate checked' from r1 where seq1=(select max(seq1) from r1)收起
金融其它 · 2013-09-26
浏览689
sunyangnjsunyangnj技术经理苏宁金融研究院
1 最佳的方法就是备份+重定向恢复 backup then restore redirect   restore之后,由于目标服务器目录肯定和源服务器不同,所以表空间需要重定向恢复  重定向恢复  db2 restore db xxxx redirect generate script redirect.ddl  ...显示全部
1 最佳的方法就是备份+重定向恢复 backup then restore redirect
   restore之后,由于目标服务器目录肯定和源服务器不同,所以表空间需要重定向恢复
  重定向恢复
  db2 restore db xxxx redirect generate script redirect.ddl
  然后修改redirect.ddl中表空间容器的定义
比如
  set tablespace containers for 3 using (file '/db2/cont1'  100000);
然后修改其他表空间容器定义
修改完之后,保存redirect.ddl
执行该ddl, db2 -tvf redirect.ddl
如果是可恢复数据库,还要rollforward收起
金融其它 · 2013-09-26
浏览667

提问者

zhuojy
软件开发工程师gdcc

问题状态

  • 发布时间:2013-09-26
  • 关注会员:1 人
  • 问题浏览:5603
  • 最近回答:2013-11-11
  • X社区推广