У меня есть модульный тест, который содержит следующую строку кода
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 записей, все идентификаторы сеансов которых соответствуют имени пользователя, используемому нашим кодом приложения.
Поскольку это необходимо решить, я просто перезапущу веб-сервер, но я все равно буду благодарен за любые предложения о том, что делать, если эта проблема повторится. Я настоящий новичок, когда дело доходит до администрирования Oracle, и в прошлом я в основном использовал MySQL, так что я определенно не в себе.
РЕДАКТИРОВАТЬ # 2: Оказывается, несмотря на то, что я думал, другой программист действительно обращался к базе данных в то же время, что и я. Так какой же лучший способ обнаружить это в будущем? Возможно, мне следовало закрыть свою программу, а затем запросить таблицы DBA_WAITERS
и DBA_BLOCKERS
, чтобы убедиться, что они пусты.