Search
Write a publication
Pull to refresh

Comments 8

Хотя я сам использовал result_cache для похожего(выставление и снятие флага), но не в серьезных промышленных задачах, поэтому лучше сразу откажитесь от такого решения, т.к. оно ненадежно:
1. все проблемы джобов остаются;
2. механизм result_cache надостаточно надежен(я в блоге у себя писал про проблему инвалидаций);
3. аварийное падение/незапуск процедуры может оставить функцию неинвалидированной;
4. У вас все неконсистенто: пользовательские блокировки(причем забыли dbms_lock.request), запрос из dba_jobs и создание джоба
5. в многопользовательской большой системе это все может убить производительность. триггеры надо максимально облегчать, а не утяжелять опасными вещами.

Посмотрите лучше в сторону object change notifications(хотя имхо вполне нормально использовать AQ или scheduler). А для флагов используйте глобальные контексты
Ээээмммм… Я как бы специально вставил пункт P.P.P.S. Тема не про то как решать конкретную задачу, а то, что есть побочный эффект от oracle result cache благодаря которому можно организовать переключение состояния и использовать тяжелую функцию в ограниченном количестве вызовов.

2. Если попытаться из пакета сбросить result cache функции этого же пакета, то кэш не сбрасывается. В остальных моментах всё зависит от правильности настройки параметров result-cache.

3.?..

4. Ещё раз повторюсь — это не законченное решение, а пример использования

5. Мне как-то один человек говорил, что то-то и то-то мы писать не будем — а вдруг программист ошибётся :)…
то, что есть побочный эффект от oracle result cache
какой еще побочный эффект? о чем речь?

2. Если попытаться из пакета сбросить result cache функции этого же пакета, то кэш не сбрасывается.
с чего взяли такое? С этим там как раз все ок, нюанс с пакетами только в том, что сбрасывается только для всех функций пакета.

В остальных моментах всё зависит от правильности настройки параметров result-cache.
«остальные» моменты я привел в ссылке ниже

зы… так ошибки и не исправили… без dbms_lock.request смысла вообще нет в ваших пользовательских блокировках. нечего там «релизить»
Я не понял, а что в 3-м пункте вам непонятно?
А вопрос не в тему: если, скажем, функция возвращает выборку из таблицы. Например, в нее передается id объекта, а назад она пуляет его свойства, выбранные из этой и\или другой таблицы. Что будет, если результат закэшируется, а в таблицах данные поменяются?
Любой dml c коммитом над таблицами-dependency инвалидирует кэш, а их можно увидеть в v$result_cache_objects. Кроме того, есть еще случаи.
Sign up to leave a comment.

Articles