db2move的一点经验
db2 connect toYOURDB连接数据库
db2look -dYOURDB-a -e -x -o creatab.sql
导出建库表的SQL
db2move YOURDBexport
用db2move将数据备份出来
vi creatab.sql
如要导入的数据库名与原数据库不同,要修改creatab.sql中CONNECT 项
如相同则不用更改
db2moveNEWDBload
将数据导入新库中
在导入中可能因为种种原因发生中断,会使数据库暂挂
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(在db2moveYOURDBexport的目录中)中找到相应的.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 FORTABLNAME ALL IMMEDIATE UNCHECKED
(这是我自己搞出来的)
这么看来,在db2move过程中会有些表因为检查约束可能会处于暂挂状态,需要执行SET INTEGRITY命令来恢复它的暂挂状态。
可以从系统表中检索处于检查暂挂状态的表信息
Select tabname from syscat.tables where status='C'
如果有百张表的话,要先导出暂挂的列表,然后再在excel里进行编程:主要是去空格,字符合并:"SET INTEGRITY FOR "&A1&"ALL IMMEDIATE UNCHECKED"
页:
[1]