2009-10-22 165 views
1

在昨晚自动化测试过程中,我的二十个工作线程中有一个线程被炸掉;该应用程序正在尝试INSERT。 Springframework报告ORA-00942:表或视图不存在。故障排除ORA-00942

通过企业管理器连接到数据库(11.1.0.6.0),我拉起一个SQL工作表并查询表,发现(a)该表现在存在(b)应该插入的行(c)先前由该线程插入的行存在(d)该表具有时间前后的行。

对于很少经验的Oracle用户,我如何验证起源于该数据库服务器的错误,并从那里我怎么走错误回到根本原因是什么?

+0

你能提供此附加信息:1.由表所有者或另一个模式是有特权的INSERT进行插入? 2.如果另一个模式被插入到表中,表的引用是否被所有者限定,通过私有同义词访问,还是通过公共同义词访问? 3.此数据库是否有包含同名表的其他模式?当满足某些条件时,甲骨文遇到了问题 - 不知道该错误是否仍然存在于11g中。 – dpbradley 2009-10-22 20:27:24

回答

1

我将开始接近到数据库成为可能,以确认哪些SQL执行,提交,回滚等数据库本身。我会设置TKPROF(查看文档,或访问Tom Kyte's site以获取更多信息),并查看您的应用程序实际执行的内容。这至少可以帮助你看到你期望执行的是否实际上“到达”,因为它应该。

一种ORA-00942将发生如果表是“不可见的”调用程序即,如果权限是不够的。

1

戴维K说,该表可能已经存在,但成为“看不见”的过程。

因为那句“昨夜”的,我的思想会导致可能存在夜间处理过程,如备份或清理过程中,这引起了表脱机。

+0

一个有趣的想法,但我相信被点(d)消除。失败周围的窗口很短(大约几秒钟)。实际上,我得到了一个具有相同时间戳的行,以便不合格的插入应该由另一个线程提交。 这就是说,如果问题是表变得不可见,我将如何追查根本原因? – VoiceOfUnreason 2009-10-23 13:58:30

+0

很难说不知道你的环境。在我的办公室里,我会与DBA或系统管理员通话,看看当时是否有任何流程正常运行。同时询问是否有任何数据库日志。 – Prof 2009-10-26 14:17:08