数据库引发的错误通常都比较严重,而且是大规模的
有次客户反映Windchill中对模型的检入、检出、撤消检出等操作都频繁第失败,需要多次尝试才能成功
查看MethodServer日志后发现如下错误:
java.sql.SQLException: ORA-08102: 未找到索引关键字
ORA-08102的错误其实能Google出一大堆,其实就是索引损坏了,重建下索引就OK了
其实在java.sql.SQLException: ORA-08102报错信息中会指明具体是哪个SQL语句所引起的,例如撤消检出时的报错为:
Nested exception is: wt.pom.DatastoreException: A SQL error has occurred for the statement "DELETE FROM EPMReferenceLink WHERE (idA2A2 IN (SELECT /*+ CARDINALITY(wtot 1300) */ * FROM TABLE(cast(? as TABLE_OF_NUMBER)) wtot WHERE (ROWNUM > 0) AND (column_value IS NOT NULL)))".
而从SQL语句中就可以找到具体出问题的表名,例如这里是EPMReferenceLink
接下来就是去数据库查看该表的有哪些索引,然后重建这些索引,在本例中,重建语句为:
alter index EPMREFERENCELINK$COMPOSITE4 rebuild;
alter index EPMREFERENCELINK$COMPOSITE1 rebuild;
alter index EPMREFERENCELINK$COMPOSITE0 rebuild;
alter index PK_EPMREFERENCELINK rebuild;