【问题标题】:Sometimes can't delete an Oracle database row using Django有时无法使用 Django 删除 Oracle 数据库行
【发布时间】:2010-09-17 08:03:21
【问题描述】:

我有一个包含以下代码行的单元测试

Site.objects.get(name="UnitTest").delete()

到目前为止,这一切都很好。但是,该声明目前悬而未决。它将永远坐在那里尝试执行删除。如果我只是说

print Site.objects.get(name="UnitTest")

然后它可以工作,所以我知道它可以检索该站点。没有其他程序连接到 Oracle,因此不会有两个开发人员以某种方式相互踩踏。我假设某种表锁尚未释放。

没有关闭 Oracle 数据库并重新启动它,我该如何释放那个锁或任何阻碍我的东西?我不想求助于关闭数据库,因为将来这可能会对其他一些开发人员造成破坏。

编辑:贾斯汀建议我查看DBA_BLOCKERSDBA_WAITERS 表。不幸的是,我根本不懂这些表,而且我不确定我在寻找什么。以下是与我相关的信息:

DBA_WAITERS 表有 182 个锁定类型为“DML”的条目。 DBA_BLOCKERS 表有 14 个条目,它们的会话 id 都对应于我们的应用程序代码使用的用户名。

由于需要解决此问题,我将重新启动网络服务器,但如果此问题再次出现,我仍然希望能提供任何建议。在 Oracle 管理方面,我是一个真正的新手,而且过去大多只使用 MySQL,所以我肯定不适合我。

编辑#2:事实证明,不管我怎么想,另一个程序员确实和我同时访问数据库。那么将来检测到这一点的最佳方法是什么?也许我应该关闭我的程序,然后查询DBA_WAITERSDBA_BLOCKERS 表以确保它们是空的。

【问题讨论】:

  • 我们没有。我们有一个 webapp,它有自己的专用 Oracle 服务器在同一台机器上运行。我们团队中没有人真正了解 Oracle,但我们需要使用它。

标签: python django oracle


【解决方案1】:

您可以从单独的会话中查询 DBA_BLOCKERS 和 DBA_WAITERS 数据字典表并发布结果吗?这将告诉您您的会话是否被其他会话持有的锁阻塞,以及其他会话持有该锁。

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多