【问题标题】:JPA DB2 - Getting SQLCODE "-204", SQLSTATE "42704" and SQLCODE=-727, SQLSTATE=56098 after dropping tableJPA DB2 - 删除表后获取 SQLCODE "-204"、SQLSTATE "42704" 和 SQLCODE=-727、SQLSTATE=56098
【发布时间】:2015-11-10 18:43:46
【问题描述】:

我们的一张桌子掉落后,我遇到了一个烦人的问题。

我正在尝试持久化一个实体,但每次我在其上调用 persist(...) 时都会收到以下错误消息:

原因:com.ibm.db2.jcc.am.SqlException:在隐式操作“3”期间发生错误。 SQLCODE“-204”、SQLSTATE“42704”和消息“MYDB2SCHEMA.TB_ABCD”中的令牌.. SQLCODE=-727, SQLSTATE=56098, DRIVER=4.12.56

看起来它无法找到“MYDB2SCHEMA.TB_ABCD”,当然它不会因为 DBA 上周删除了它。但这很奇怪,因为我试图坚持的实体与“MYDB2SCHEMA.TB_ABCD”实体没有关系,我们称之为 ABCDEntity。

为了让事情变得更复杂,我删除了 ABCDEntity 以便不再有与之相关的实体,然后我在整个项目中搜索“MYDB2SCHEMA.TB_ABCD”,也没有,但我仍然得到同样的错误。

我试图在 DB2 中保留的表与死表没有关系,我不是 DBA,但我相信如果死表有任何关系,它会在删除期间被删除。

那么,如果不再有与之相关的实体/表,为什么 DB2 或 JPA 仍在尝试查找该表?

【问题讨论】:

    标签: jpa db2


    【解决方案1】:

    数据库中必须有一些其他对象,例如触发器或视图,引用了删除的表。 DB2 在引用该对象时尝试重新验证该对象。如果您跟踪持久性框架生成的确切 SQL 语句,您可能会更好地了解正在发生的事情。

    如果由于某种原因您无法让 DB2 找出有问题的对象,您可以尝试使用此查询来查找哪些其他对象仍然依赖于丢失的表:

    with t(s,n) as (values ('YOURSCHEMA','YOURTABLE'))
    select 'control'    as object_type, 
           dschema      as schema, 
           dname        as name, 
           case dtype when 'y' then 'row permission' when '2' then 'column mask' else 'unknown' end as depend_type
    from syscat.controldep join t on btype = 'T' and (bschema,bname) = (s,n)
    union all
    select 'datatype'   as object_type, 
           typeschema   as schema, 
           typename     as name, 
           case when typemodulename is not null then 'in module '|| typemodulename else '' end as depend_type
    from syscat.datatypedep join t on btype = 'T' and (bschema,bname) = (s,n)
    union all
    select 'index'      as object_type, 
           indschema    as schema, 
           indname      as name, 
           ''           as depend_type
    from syscat.indexdep join t on btype = 'T' and (bschema,bname) = (s,n)
    union all
    select 'package'    as object_type, 
           pkgschema    as schema, 
           pkgname      as name, 
           ''           as depend_type
    from syscat.packagedep join t on btype = 'T' and (bschema,bname) = (s,n)
    union all
    select 'routine'    as object_type, 
           routineschema    as schema, 
           specificname     as name, 
           case when routinemodulename is not null then 'in module '|| routinemodulename else '' end as depend_type
    from syscat.routinedep join t on btype = 'T' and (bschema,bname) = (s,n)
    union all
    select 'table-ish'  as object_type, 
           tabschema    as schema, 
           tabname      as name, 
           case dtype when 'S' then 'MQT'
                      when 'T' then 'staging table'
                      when 'V' then 'view'
                      when '7' then 'synopsis table'
                      else dtype end as depend_type
    from syscat.tabdep join t on btype = 'T' and (bschema,bname) = (s,n)
    union all
    select 'trigger'    as object_type, 
           trigschema   as schema, 
           trigname     as name, 
           ''           as depend_type
    from syscat.trigdep join t on btype = 'T' and (bschema,bname) = (s,n)
    union all
    select 'global var'     as object_type, 
           varschema        as schema, 
           varname          as name, 
           case when varmodulename is not null then 'in module '|| varmodulename else '' end as depend_type
    from syscat.variabledep join t on btype = 'T' and (bschema,bname) = (s,n)
    

    【讨论】:

      猜你喜欢
      • 2014-01-22
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多