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"

你可能感兴趣的:(sql,编程,db2,Excel)