Comments 8
Хотя я сам использовал result_cache для похожего(выставление и снятие флага), но не в серьезных промышленных задачах, поэтому лучше сразу откажитесь от такого решения, т.к. оно ненадежно:
1. все проблемы джобов остаются;
2. механизм result_cache надостаточно надежен(я в блоге у себя писал про проблему инвалидаций);
3. аварийное падение/незапуск процедуры может оставить функцию неинвалидированной;
4. У вас все неконсистенто: пользовательские блокировки(причем забыли dbms_lock.request), запрос из dba_jobs и создание джоба
5. в многопользовательской большой системе это все может убить производительность. триггеры надо максимально облегчать, а не утяжелять опасными вещами.
Посмотрите лучше в сторону object change notifications(хотя имхо вполне нормально использовать AQ или scheduler). А для флагов используйте глобальные контексты
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. Мне как-то один человек говорил, что то-то и то-то мы писать не будем — а вдруг программист ошибётся :)…
2. Если попытаться из пакета сбросить result cache функции этого же пакета, то кэш не сбрасывается. В остальных моментах всё зависит от правильности настройки параметров result-cache.
3.?..
4. Ещё раз повторюсь — это не законченное решение, а пример использования
5. Мне как-то один человек говорил, что то-то и то-то мы писать не будем — а вдруг программист ошибётся :)…
то, что есть побочный эффект от oracle result cacheкакой еще побочный эффект? о чем речь?
2. Если попытаться из пакета сбросить result cache функции этого же пакета, то кэш не сбрасывается.с чего взяли такое? С этим там как раз все ок, нюанс с пакетами только в том, что сбрасывается только для всех функций пакета.
В остальных моментах всё зависит от правильности настройки параметров result-cache.«остальные» моменты я привел в ссылке ниже
зы… так ошибки и не исправили… без dbms_lock.request смысла вообще нет в ваших пользовательских блокировках. нечего там «релизить»
Пример про «нюанс»: orasql.org/scripts/rc.sql
Я не понял, а что в 3-м пункте вам непонятно?
А вопрос не в тему: если, скажем, функция возвращает выборку из таблицы. Например, в нее передается id объекта, а назад она пуляет его свойства, выбранные из этой и\или другой таблицы. Что будет, если результат закэшируется, а в таблицах данные поменяются?
Sign up to leave a comment.
Использование Oracle RESULT_CACHE «не по прямому назначению»