aixinnature 发表于 2013-1-13 18:33:49

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]
查看完整版本: db2move的一点经验