我有一个单元测试,其中包含以下代码行
Site.objects.get(name="UnitTest").delete()
到目前为止,这一切都运行良好。然而,该声明目前悬而未决。它会永远坐在那里尝试执行删除。如果我只是说
print Site.objects.get(name="UnitTest")
然后它就可以工作了,所以我知道它可以检索该站点。没有其他程序连接到 Oracle,因此不会有两个开发人员以某种方式互相干扰。我假设某种表锁尚未释放。
如果无法关闭 Oracle 数据库并将其恢复,我该如何释放该锁或任何阻止我的东西?我不想诉诸数据库关闭,因为将来这可能会对其他一些开发人员造成干扰。
编辑:Justin 建议我查看 DBA_BLOCKERS
和 DBA_WAITERS
表。不幸的是,我根本不理解这些表格,而且我不确定我在寻找什么。以下是与我相关的信息:
DBA_WAITERS
表有 182 个锁类型为“DML”的条目。 DBA_BLOCKERS
表有 14 个条目,其 session ID 均对应于我们的应用程序代码使用的用户名。
由于这个问题需要得到解决,我将重新启动网络服务器,但如果这个问题再次出现,我仍然希望收到有关如何处理的任何建议。在 Oracle 管理方面,我确实是个新手,而且过去大多只使用过 MySQL,所以我绝对不习惯。
编辑#2:事实证明,不管我怎么想,另一个程序员确实在与我同时访问数据库。那么将来检测到这一点的最佳方法是什么?也许我应该关闭程序,然后查询 DBA_WAITERS
和 DBA_BLOCKERS
表以确保它们为空。
最佳答案
您可以在单独的 session 中查询 DBA_BLOCKERS 和 DBA_WAITERS 数据字典表并发布结果吗?这将告诉您您的 session 是否被其他 session 持有的锁阻塞,以及其他 session 持有该锁。
关于python - 有时无法使用 Django 删除 Oracle 数据库行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/205136/