Иногда не удается удалить строку базы данных Oracle с помощью Django - PullRequest
1 голос
/ 15 октября 2008

У меня есть модульный тест, который содержит следующую строку кода

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, чтобы убедиться, что они пусты.

1 Ответ

1 голос
/ 15 октября 2008

Можно ли из отдельного сеанса запрашивать таблицы словаря данных DBA_BLOCKERS и DBA_WAITERS и публиковать результаты? Это скажет вам, блокируется ли ваш сеанс блокировкой, удерживаемой каким-либо другим сеансом, а также какой другой сеанс удерживает блокировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...