Ⅰ 如何分析DB2的错误信息
com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: TBSPACEID=2, TABLEID=640, COLNO=0
分析DB2报出的错误信息,主要从六个方面进行分析:
SQLCODE, SQLSTATE, SQLERRMC, TBSPACEID, TABLEID, COLNO
1、先从SQLCODE和SQLSTATE两方面的数字确认是什么原因
2、在根据TBSPACEID和TABLEID两方面确认是哪个表
SQL语句:select * from syscat.tables where tbspaceid="" and tableid=""
3、根据COLNO确认是哪个列出问题
SELECT * FROM SYSCAT.COLUMNS WHERE TABNAME= '*******' AND COLNO = “”
三步就可以精确确认错误的原因了
原理分析:在DB2 数据库中隐藏着一个内部表,专存储数据库的各个表。可以通过select * from syscat.tables进行查看。TBSPACEID, TABLEID, COLNO 都是表tables 中的字段。
=====================================================================
but,
我的DB2数据库错误信息:
com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -532, SQLSTATE: 23504, SQLERRMC: DE_ANOM_DETN.FK_TT_ANOM_TT_DETN_EVNT
根据SQLCODE和SQLERRMC可知:
-532 23504 删除操作违反了已指定的参照约束
可以判断出,应该是在删除级联表格时,发现参考的外键为空了,应该是提前删除了。
但是我的错误信息里面并没有上面提示的那么详细,上面的是SQLERRMC: TBSPACEID=2, TABLEID=640, COLNO=0 ,而我的是SQLERRMC: DE_ANOM_DETN.FK_TT_ANOM_TT_DETN_EVNT,由此可以推断出,SQLERRMC里面的信息就是定位错误的核心!!可是这个是什么呢??估计这个应该找数据库设计文档了。
最后没管这个问题,直接把DB2恢复(restore)一个镜像点了,然后mq(Qmanager)启动,was启动(前提是mq启动)。问题可能是执行顺序或者因为某个服务器节点未启动caused的,当这些服务器节点都正常启动之后,把数据库restore正常状态,然后就可以正常执行了。
Ⅱ SQL Server 内部错误 问题
第一:你那个第一句当然会内部错误了,因为select要对应(必须有)from来制定到底从那个表里查,你没有写from 他到哪个表查啊??
第二:你这句的查询属性的前面的“bbb.”是指定表的简写吧?那为什么没有地方注明这个简写对应的是哪个表!!
举例:如果你要查看order表里的name属性,select o.name from order o (这里的o就是order表的简写,o.name指的就是order表里的name)