Operation not allowed for reason code "7" on table报错解决

上图是我在Datagrip直接操作DB2的报错,也是同样的原因,导致不能操作实体类,登录javeweb的时候会报错

导致这种情况的原因是:

我执行sql脚本的时候,执行了一些不规范的操作,我想把字段onling_flag由int改为varchar,并修改原有表里的数据,把0或1改为‘000’,结果,修改了表数据,同时又修改的字段类型,并设为非空带默认值,直接导致表暂挂了,不建议这种写法,最好是删除字段然后重建,如果数据和原先的表数据想关联的话,比如0改为000,1改为001,可以先建一个列,叫temp,然后set temp=‘00’||online_flag,然后删除online_flag,再建一个online_flag=temp;最后删除temp,就达到效果了。

解决办法:

执行这两句

CALLSYSPROC.ADMIN_CMD('reorgtableOP_TABLE');

CALLSYSPROC.ADMIN_CMD('runstatsontableOP_TABLE');


原理:

DB2中SQLSTATE=57016SQLCODE=-668,原因码 "7"的解决

对表进行任何操作都不被允许,提示SQLSTATE=57016 SQLCODE=-668 ,原因码"7"的错误:SQL0668N Operation not allowed for reason code "7" on table XXX. 解决方法为:执行命令:reorg table XXX;即可。

参考原文为:

Operation notallowed for reason code reason-code on table table-name.

Explanation: Accessto table table-name is restricted. The cause is based on the following reasoncodes reason-code: 7

    The table is in the reorg pending state.This can occur after an ALTER TABLE statement containing a REORG-recommendedoperation.7

    Reorganize the table using the REORG TABLEcommand (note that INPLACE REORG TABLE is not allowed for a table that is inthe reorg pending state).

其中:

   reorg  table   <tablename>   通过重构行来消除“碎片”数据并压缩信息,对表进行重组。

   runstats  on   table   <tbschema>.<tbname>   收集表  <tbname>   的统计信息。

   reorgchk  on   table   all   确定是否需要对表进行重组,对于对所有表自动执行  runstats   很有用。

  >>> reorg   和runstats   都是单个表优化,初始化的命令:

           runstats on tableadministrator.test;

           reorg table administrator.test;

 

什么时候需要runstats:

1、在给表创建一个index后,我们最好做一次runstat,否则可能index没有生效。不过有说法称在8.2版本以后的DB2中,会在INDEX之后自动进行runstats;

2、在对table做了一次reorg后,记得要做一次runstats。因为对表做reorg,会修改表的很多信息,比如高水位等,所以做一次runstats,可以更新统计信息。 

3、当表里数据发生了比较大的变化,一般来说,大约表里面的数据量的10%-20%发生了变化,就应该作一次runstats。这些变化包括删除,修改,插入。对于一些非常大的表,比方在数据仓库的项目里面,某些事实表非常巨大。这个时候,完整的对一个大表作runstats可能花费时间相当大,DB2 8.1里面支持我们对这些大表作抽样,比方说只对20%的数据作runstats,这样的话,一般来说也能保证得到正确的执行计划。当然首先要确保这个表里面的数据最好分布比较均匀。 

4、当你在分区(DPF)数据库里面使用了REDISTRIBUTE DATABASE PARTITION GROUP这个命令,那么就需要用runstats来收集新的统计信息


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值