2015-07-23 3 views
0

Использование Oracle 11gR2:Явная блокировка таблицы для отключения DELETES?

У нас уже есть процесс, который очищает отдельные таблицы путем удаления записей из них, которые в прошлом определенной даты удержания (на основе сравнения между отметкой временем от момента, когда запись закончена обработка и дата хранения). В настоящее время я пишу код, который будет предупреждать мою команду, если этот процесс завершится неудачно. Единственный способ, которым я вижу, что этот процесс, возможно, не работает, - это если DELETEs отключены в той конкретной таблице, которую он пытается очистить.

Я хочу проверить оповещения, чтобы убедиться, что они работают и выглядят корректно, если процесс завершился неудачно. Если я временно заблокирую таблицу, отключит ли это DELETE и вызовет процедуру, при которой удаляются записи? Или это только отключает DDL-операции? Есть лучший способ сделать это?

ответ

1

Предполагая, что «сбой» означает «выкинуть ошибку», а не, скажем, превысить некоторую производительность, блокировка таблицы не позволит выполнить то, что вы хотите. Если вы заблокировали каждую строку через SELECT FOR UPDATE за один сеанс, ваше задание delete заблокировало бы навсегда ожидание выхода первого сеанса. Это не вызовет ошибки и не приведет к сбою процесса для большинства определений. Тем не менее, если ваш мониторинг включает предупреждения для заданий, которые работают дольше, чем ожидалось, это будет работать хорошо.

Если ваш процесс мониторинга выглядит только в том случае, если процесс запущен и обнаружил ошибку, самым простым вариантом было бы поставить триггер в таблицу, которая выдает ошибку при удалении. Вы также можете создать дочернюю таблицу с ограничением внешнего ключа, которая приведет к возникновению ошибки, если удаление попытается удалить родительскую строку, пока существует дочерняя строка. В зависимости от того, как реализован процесс delete, вы, вероятно, могли бы разработать второй процесс, который создавал бы тупик ORA-00060 для процесса, который вы контролируете, но это, вероятно, сложнее реализовать, чем триггер или дочерняя таблица.

Смежные вопросы