1) Мой вопрос о предоставлении доступа на чтение к таблице: почему вы предоставляете чтение непосредственно к таблице, а не создаете роль, предоставляете чтение на эту роль таблице, а затем предоставляете (или удаляете) роль пользователям ? Это устранит проблему с таблицей блокировок на грантах.
2) Oracle заблокирует таблицу при создании триггера, потому что триггер может изменить таблицу при установке. Все DDL заблокируют таблицу, создав транзакцию, чтобы точно знать, когда она может задействовать триггер (или другие изменения). Я подозреваю, что это также верно для грантов.
Если вы постоянно добавляете / удаляете триггеры из таблицы, я бы удалил код, который вы меняете, из триггера и поместил его в отдельную процедуру PL / SQL. Затем обновите процедуру по мере необходимости. Это приведет к тому, что триггер станет недействительным (и потребует перекомпиляции), что делается автоматически.
Я уверен, что есть способ выяснить, какие курсоры открываются для данной таблицы, используя представления v $ в словаре данных Oracle.