2011-12-30 59 views
6

我有第三方Windows服务,它控制/监视设备并更新Oracle数据库。他们的服务偶尔会报告有关数据库中的行/列的错误,但是不会给出底层的数据库错误,并且他们的服务需要重新启动并且一切正常。目前的怀疑是来自我们的应用程序/服务的读/写这些相同的表/行的东西会干扰 - 即某种阻塞/锁定。我怀疑他们的系统中存在某种泄漏,因为它每周发生一次,但我们的系统从不需要像这样重新启动。使用ODBC Trace或Oracle Trace查找错误原因?

我试图让DBA在Oracle(10g)中运行一个跟踪运行,但是这使得我们的应用程序无法访问Oracle数据库。我们的系统使用Oracle ODP客户端或Microsoft客户端(较旧的程序)以及同一服务器(Web应用程序或服务)或其他控制工作站访问Oracle中的Oracle。第三方服务通过此服务器上的ODBC连接到Oracle。我也尝试运行一个ODBC跟踪(因为那只会是来自第三方服务的活动),但根本没有得到任何跟踪文件。

所以我试图找到一种方法来获取ODBC跟踪工作或我需要注意的东西,以便Oracle跟踪不会杀死我的服务器。

我正在寻找甲骨文正在返回到第三方服务的一个无法理解的错误,所以我可以告诉我们是否干涉他们以某种方式访问​​数据。

+0

哎唷!如果Oracle跟踪阻止您使用数据库,那么这不是您要开始的地方吗?你可以证明你的问题是你的结局,而你并不知道第三方的错误是他们的错还是“你的”。 – Ben 2011-12-30 17:03:26

+0

什么第三方不会给出底层的ORA错误?这似乎是非常可疑的(要么写得不好,要么写在某个地方) – tbone 2011-12-30 17:26:48

+0

也许这些答案中的一个将有所帮助:http://stackoverflow.com/questions/492705/is-there-any-way-to-log-all- failed-sql-statements-in-oracle-10g – 2011-12-30 17:36:48

回答

0

如果数据库中的某个块损坏“错误”,则应该在警报日志中显示为ORA-01578错误。我会在归档日志中搜索ORA-错误,然后将其与所报告的客户端错误上的时间戳进行比较。这是对“坏”定义的假设。发布确切的错误消息会更好。

数据库中的毛毯跟踪是一件棘手的事情,因为它往往会影响整个应用程序的性能。将它搁置一整个星期可能是不可行的。我还发现在一种情况下(不能记住确切的情况),开启跟踪修复了错误。

我以前用过的一种方法是添加sql语句来改变会话并打开sqltrace。这取决于以某种方式修改代码的能力。取决于应用程序,这可能或不可能。

另一种方法是使用DBA来识别会话并打开该会话的sql跟踪。此外,如果您可以识别有问题的SQL语句和参数值,则可以在服务外复制问题。

我发现大多数ORM都避免传递ORA-错误。但是,它通常会在相关的ORM错误中登录到应用程序服务器层。

我已经使用这些方法和这些方法的变体来解决应用程序中的错误。我希望这是有用的。