【发布时间】:2010-09-17 08:03:21
【问题描述】:
我有一个包含以下代码行的单元测试
Site.objects.get(name="UnitTest").delete()
到目前为止,这一切都很好。但是,该声明目前悬而未决。它将永远坐在那里尝试执行删除。如果我只是说
print Site.objects.get(name="UnitTest")
然后它可以工作,所以我知道它可以检索该站点。没有其他程序连接到 Oracle,因此不会有两个开发人员以某种方式相互踩踏。我假设某种表锁尚未释放。
没有关闭 Oracle 数据库并重新启动它,我该如何释放那个锁或任何阻碍我的东西?我不想求助于关闭数据库,因为将来这可能会对其他一些开发人员造成破坏。
编辑:贾斯汀建议我查看DBA_BLOCKERS 和DBA_WAITERS 表。不幸的是,我根本不懂这些表,而且我不确定我在寻找什么。以下是与我相关的信息:
DBA_WAITERS 表有 182 个锁定类型为“DML”的条目。 DBA_BLOCKERS 表有 14 个条目,它们的会话 id 都对应于我们的应用程序代码使用的用户名。
由于需要解决此问题,我将重新启动网络服务器,但如果此问题再次出现,我仍然希望能提供任何建议。在 Oracle 管理方面,我是一个真正的新手,而且过去大多只使用 MySQL,所以我肯定不适合我。
编辑#2:事实证明,不管我怎么想,另一个程序员确实和我同时访问数据库。那么将来检测到这一点的最佳方法是什么?也许我应该关闭我的程序,然后查询DBA_WAITERS 和DBA_BLOCKERS 表以确保它们是空的。
【问题讨论】:
-
我们没有。我们有一个 webapp,它有自己的专用 Oracle 服务器在同一台机器上运行。我们团队中没有人真正了解 Oracle,但我们需要使用它。