DB2数据库Operation not allowed for reason code "1" on table "DB2INST1.SH_JOB"
SQL0668N Operation not allowed for reason code "1" on table "DB2INST1.SH_JOB". SQLSTATE=57016
意味着:你试图对表 SH_JOB 执行某个操作(如查询、插入、更新等),但 DB2 阻止了该操作,因为该表被标记为“不可用”状态,原因码 "1" 表示 表处于“挂起完整性检查”状态。
这种状态通常在以下几种情况出现后:
-
LOAD 操作使用 NONRECOVERABLE 或 COPY NO 选项
DB2 跳过了一些完整性(如约束、外键)检查。 -
使用 IMPORT 插入了不符合约束规则的数据
比如插入了违反外键或唯一性约束的数据。 -
ALTER TABLE 改变了表结构后,某些检查还未进行。
-
触发器或视图定义中断,影响表的完整性状态。
此时,DB2 会将表置为“挂起检查(Check Pending)”状态,禁止访问表数据,以防止错误传播。
二、解决方法的原理
执行了以下命令:
这是 清除“挂起检查”状态的标准做法,含义如下:
-
SET INTEGRITY
:恢复表的数据完整性检查状态。 -
IMMEDIATE
:立即执行。 -
CHECKED
:执行完整性约束检查,如主键、唯一键、外键等。
✅ 执行后效果:
-
DB2 会重新扫描表中数据;
-
校验所有约束是否合法;
-
校验通过后,移除“挂起检查”状态;
-
表变为可用状态,恢复读写访问。