我有一个单元测试,其中包含以下代码行
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都与我们的应用程序代码使用的用户名相对应。
由于这需要解决,我将重新启动Web服务器,但我仍然感谢任何有关如果此问题重复该怎么做的建议。对于Oracle管理而言,我是一个真正的新手,过去大部分时间都只使用过MySQL,所以我绝对不会使用MySQL。
编辑#2:事实证明,尽管我认为,另一位程序员确实在与我同时访问数据库。那么将来检测这种情况的最佳方法是什么?也许我应该关闭我的程序,然后查询DBA_WAITERS
和DBA_BLOCKERS
表以确保它们是空的。
答案 0 :(得分:1)
从单独的会话中,您可以查询DBA_BLOCKERS和DBA_WAITERS数据字典表并发布结果吗?这将告诉您会话是否被其他会话持有的锁阻塞,以及其他会话持有锁。