IT咨询服务

关于LOAD后执行set intdetity问题

本人DB2菜鸟,做实验,将linux下的sample  db迁移到windows下,load过程正常,但是在最后set inedetity过程有点问题。我使用的是反复执行
db2 -x "select 'set INTEGRITY for db2inst1.' || substr(tabname,1,30) || 'IMMEDIATE CHECKED;' from syscat.tables where status='C'" ,但是最后还是有8个表无法完成完整性检查,各位大虾有啥建议没?两个表外键关系引起的?不懂啊  
C:db2soft>db2 -x "select 'set INTEGRITY for db2inst1.'||substr(tabname,1,30)||'
IMMEDIATE CHECKED;' from syscat.tables where status='C'"
set INTEGRITY for db2inst1.DEPARTMENT                     IMMEDIATE CHECKED;
set INTEGRITY for db2inst1.EMPLOYEE                       IMMEDIATE CHECKED;
set INTEGRITY for db2inst1.EMP_PHOTO                      IMMEDIATE CHECKED;
set INTEGRITY for db2inst1.EMP_RESUME                     IMMEDIATE CHECKED;
set INTEGRITY for db2inst1.PROJECT                        IMMEDIATE CHECKED;
set INTEGRITY for db2inst1.PROJACT                        IMMEDIATE CHECKED;
set INTEGRITY for db2inst1.EMPPROJACT                     IMMEDIATE CHECKED;
set INTEGRITY for db2inst1.ADEFUSR                        IMMEDIATE CHECKED;


db2 => set INTEGRITY for db2inst1.DEPARTMENT                     IMMEDIATE CHECK
ED
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL3608N  当父表或基础表 "DB2INST1.EMPLOYEE" 处于设置完整性暂挂状态或将使用 SET
INTEGRITY 语句将其置于设置完整性暂挂状态时,不能使用 SET INTEGRITY
语句检查从属表 "DB2INST1.DEPARTMENT"。  SQLSTATE=428A8
db2 => set INTEGRITY for db2inst1.EMPLOYEE                       IMMEDIATE CHECK
ED
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL3608N  当父表或基础表 "DB2INST1.DEPARTMENT" 处于设置完整性暂挂状态或将使用
SET INTEGRITY 语句将其置于设置完整性暂挂状态时,不能使用 SET INTEGRITY
语句检查从属表 "DB2INST1.EMPLOYEE"。  SQLSTATE=428A8
db2 =>



C:db2soft>db2 "select tabname, tabschema, status, access_mode, substr(const_che
cked, 1, 1) as fk_checked, substr(const_checked, 2, 1) as cc_checked from syscat
.tables where status='C'"


TABNAME
                                                 TABSCHEMA


                  STATUS ACCESS_MODE FK_CHECKED CC_CHECKED
--------------------------------------------------------------------------------
------------------------------------------------ -------------------------------
--------------------------------------------------------------------------------
----------------- ------ ----------- ---------- ----------
DEPARTMENT
                                                 DB2INST1


                  C      N           N          Y
EMPLOYEE
                                                 DB2INST1


                  C      N           N          N
EMP_PHOTO
                                                 DB2INST1


                  C      N           N          Y
EMP_RESUME
                                                 DB2INST1


                  C      N           N          Y
PROJECT
                                                 DB2INST1


                  C      N           N          Y
PROJACT
                                                 DB2INST1


                  C      N           N          Y
EMPPROJACT
                                                 DB2INST1


                  C      N           N          Y
ADEFUSR
                                                 DB2INST1


                  C      N           Y          Y


  8 条记录已选择。




C:db2soft>
参与5

4同行回答

空系统工程师other
徐明伟老师推荐的这个脚本db2 connect to testydb2 -tx +w "with gen(tabname, seq) 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...显示全部
徐明伟老师推荐的这个脚本
db2 connect to testy
db2 -tx +w "with gen(tabname, seq) 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)" > db2FixCheckPending.sql
db2 -tvf db2FixCheckPending.sql
省去了多次执行的麻烦。收起
IT咨询服务 · 2012-08-30
浏览1343
空系统工程师other
回复 3# weiruan85    是的,取消一个,执行set intdetity,最后再加上外键就行了。显示全部
回复 3# weiruan85


   是的,取消一个,执行set intdetity,最后再加上外键就行了。收起
IT咨询服务 · 2012-08-29
浏览1404
weiruan85weiruan85数据库管理员ibm
你是不是employee 有指向department 的外键,department 有指向employee  的外键显示全部
你是不是employee 有指向department 的外键,department 有指向employee  的外键收起
政府机关 · 2012-08-29
浏览1392
空系统工程师other
C:\db2soft>db2 "select constname, tabname, refkeyname, reftabname, colcount, deleterule, updaterule from syscat.references where tabname='DEPARTMENT'"CONSTNAME                     ...显示全部
C:\db2soft>db2 "select constname, tabname, refkeyname, reftabname, colcount, del
eterule, updaterule from syscat.references where tabname='DEPARTMENT'"

CONSTNAME
                                                 TABNAME

                  REFKEYNAME
                                                                   REFTABNAME

                                    COLCOUNT DELETERULE UPDATERULE
--------------------------------------------------------------------------------
------------------------------------------------ -------------------------------
--------------------------------------------------------------------------------
----------------- --------------------------------------------------------------
------------------------------------------------------------------ -------------
--------------------------------------------------------------------------------
----------------------------------- -------- ---------- ----------
RDE
                                                 DEPARTMENT

                  PK_EMPLOYEE
                                                                   EMPLOYEE

                                           1 N          A
ROD
                                                 DEPARTMENT

                  PK_DEPARTMENT
                                                                   DEPARTMENT

                                           1 C          A

  2 条记录已选择。


C:\db2soft> db2 "select constname, tabname, refkeyname, reftabname, colcount, de
leterule, updaterule from syscat.references where tabname='EMPLOYEE'"

CONSTNAME
                                                 TABNAME

                  REFKEYNAME
                                                                   REFTABNAME

                                    COLCOUNT DELETERULE UPDATERULE
--------------------------------------------------------------------------------
------------------------------------------------ -------------------------------
--------------------------------------------------------------------------------
----------------- --------------------------------------------------------------
------------------------------------------------------------------ -------------
--------------------------------------------------------------------------------
----------------------------------- -------- ---------- ----------
RED
                                                 EMPLOYEE

                  PK_DEPARTMENT
                                                                   DEPARTMENT

                                           1 N          A

  1 条记录已选择。


C:\db2soft>
搞明白了,去掉employee表那个指向department的外键,再set intdetity,最后再加上外键。搞了半天啊。收起
IT咨询服务 · 2012-08-29
浏览1370

提问者

空
019
系统工程师other
擅长领域: 数据库服务器存储

问题状态

  • 发布时间:2012-08-29
  • 关注会员:1 人
  • 问题浏览:5958
  • 最近回答:2012-08-30
  • X社区推广