db2move的一点经验

db2 connect to YOURDB
连接数据库


db2look -d YOURDB -a -e -x -o creatab.sql
导出建库表的SQL

db2move YOURDB export
用db2move将数据备份出来

vi creatab.sql
如要导入的数据库名与原数据库不同,要修改creatab.sql中CONNECT 项
如相同则不用更改

db2move NEWDB load
将数据导入新库中

在导入中可能因为种种原因发生中断,会使数据库暂挂
db2 list tablespaces show detail
如:
详细说明:
装入暂挂
总页数 = 1652
可用页数 = 1652
已用页数 = 1652
空闲页数 = 不适用
高水位标记(页) = 不适用
页大小(字节) = 4096
盘区大小(页) = 32
预读取大小(页) = 32
容器数 = 1
状态更改表空间标识 = 2
状态更改对象标识 = 59

db2 select tabname,tableid from syscat.tables where tableid=59
查看是哪张表挂起

表名知道后到db2move.lst(在db2move YOURDB export的目录中)中找到相应的.ixf文件
db2 load from tab11.ixf of ixf terminate into db2admin.xxxxxxxxx
tab11.ixf对应的是xxxxxxxxx表

数据库会恢复正常,可再用db2 list tablespaces show detail查看


我于是就随便找个了表,运行下查询看看,发现查询出错。

SQL0668N Operation not allowed for reason code "1" on table USERTBL.
SQLSTATE=57016

这是怎么回事呢?我接着在DB2命令中心查询。


------------------------------------输入的命令 ------------------------------------------
? SQL0668N;
-----------------------------------------------------------------------------
SQL0668N当基础表(或从属表)处于检查暂挂状态时,不允许操作。

解释: 当表处于检查暂挂状态时,可能有一行或多行违反了对数据定义的约
束。此表不能用于操作。若从属表处于检查暂挂状态,则对不处于检查暂挂
状态的父表的操作也可能接收到此错误。

用户响应: 执行带有 IMMEDIATE CHECKED 选项的 SET INTEGRITY
语句,并确保数据符合对该表或从属于它的表定义的所有约束。
看来是处于检查暂挂状态了,我按照提示信息执行以后就可以访问了。

set integrity for usertbl immediate checked


SET INTEGRITY FOR TABLNAME ALL IMMEDIATE UNCHECKED
(这是我自己搞出来的)
这么看来,在db2move过程中会有些表因为检查约束可能会处于暂挂状态,需要执行SET INTEGRITY命令来恢复它的暂挂状态。

可以从系统表中检索处于检查暂挂状态的表信息

Select tabname from syscat.tables where status='C'

如果有百张表的话,要先导出暂挂的列表,然后再在excel里进行编程:主要是去空格,字符合并:"SET INTEGRITY FOR "&A1&" ALL IMMEDIATE UNCHECKED"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值