|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
Добрый день, коллеги. Есть pipelined функция которая возвращает anydataset Структура anydataset описывается в ODCITableDescribe , а выдача данных идет соответсвенно в ODCITableFetch . Так вот, структура результирующего набора время от времени меняется. И если не вызывать ODCITableDescribe , то ODCITableFetch начинает формировать некорректный anydataset . Насколько я понимаю когда оракл первый раз видит запрос наподобие: Код: plaintext
Во все остальные разы он пользуется закэшированным результатом. О метод ODCITableFetch работает некорректно. Для того чтобы оракл еще раз вызвал ODCITableDescribe помогает ALTER SYSTEM FLUSH Shared_Pool , но этот вариант не совсем подходит, ибо он сбрасывает весь кэш, а это может пагубно отразиться на производительности базы в целом. Так вот, внимание вопрос: КАК ЗАСТАВИТЬ ORACLE (возможно хинтом) НЕ СОХРАНЯТЬ ЗАПРОС В КЭШ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2007, 15:20 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
Так же еще помогает перекомпилировать TYPE, но на него есть завязки в пакетах, и они соответсвенно валятся в INVALID.... Вообщем полная труба. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2007, 16:07 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
1. Есть статья И.И. Мельникова "Oracle10g - мощь табличных функций для приложений хранилищ данных". Может это ваш случай? Статью можно прочесть здесь 2. Хорошо иметь тестовый пример, а то не до конца ясно, где возникают проблемы. 3. Указывайте в будущем версию Оракла. С уважением, bw. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2007, 00:53 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
Да это как раз то самый случай (из статьи), а версию пожалуйста: Код: plaintext 1. 2. 3. 4.
Но все-таки вопрос поставлен достаточно четко: можно ли указать какой-нить хинт к запросу чтобы оракл в независимости ни от чего выполнил hard parsung(ну или как это называется) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2007, 10:48 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
вставить отличный (от других) комментарий в запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2007, 11:27 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
Это понятно, только тогда через пару недель pool только этими запросами и забьется, а это не совсем хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2007, 11:55 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
Lav можно ли указать какой-нить хинт к запросу чтобы оракл в независимости ни от чего выполнил hard parsung(ну или как это называется) если найдете отпишитесь здесь пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2007, 12:08 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
LavДа это как раз то самый случай (из статьи) Что за нежелание подробно описать проблему?! Странно это..... Случаем не пытаетесь сделать универсальный конвертор из DBMS_SQL курсора в sysrefcursor? Lav Но все-таки вопрос поставлен достаточно четко: можно ли указать какой-нить хинт к запросу чтобы оракл в независимости ни от чего выполнил hard parsung(ну или как это называется) hard parsing От добавления комментария до пересбора статистики. С уважением bw. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2007, 12:12 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
BWЧто за нежелание подробно описать проблему?! Странно это..... Случаем не пытаетесь сделать универсальный конвертор из DBMS_SQL курсора в sysrefcursor? Ну почему же нежелание. Расказываю по порядку: Есть некая метамодель, которая описывает где и какие данные хранятся. Так как данные хранятся в разных таблицах, которые динамически изменяют структуру, и разбросаны по всей схеме, с клиентского места достаточно тяжело собрать запрос(особенно если это отчет). Реализовав класс наподобии того, что описан в статье которую вы приводили выше, проблемы с разработкой отчетов и сложные запросы формируемые на клиентском месте исчезли. Но не обошлось и без подвоха. Дело в том что метод describe отрабатывает один раз когда запрос кэшируется, а именно этот метод задает структуру датасета который возвращает класс, а если за это время метамодель изменилась, то структура датасета который заполняется в методе fetch может значительно отличаться от структуры созданной в методе вечь во время первого запуска запроса. Собственно решил это все тем, что поместил все такие классы в пакет и при любом изменении метамодели делаю alter package xxx compile. Тем самым кэш вычищается, но хотелось просто уточнить возможно есть более цивилизованные способы решить эту проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2007, 12:49 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
опечатался й в методе DESCRIBE во время первого запуска запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2007, 12:51 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
Lav BWЧто за нежелание подробно описать проблему?! Странно это..... Случаем не пытаетесь сделать универсальный конвертор из DBMS_SQL курсора в sysrefcursor? Ну почему же нежелание. Расказываю по порядку: Есть некая метамодель, которая описывает где и какие данные хранятся. Так как данные хранятся в разных таблицах, которые динамически изменяют структуру, и разбросаны по всей схеме, с клиентского места достаточно тяжело собрать запрос(особенно если это отчет). Реализовав класс наподобии того, что описан в статье которую вы приводили выше, проблемы с разработкой отчетов и сложные запросы формируемые на клиентском месте исчезли. Но не обошлось и без подвоха. Дело в том что метод describe отрабатывает один раз когда запрос кэшируется, а именно этот метод задает структуру датасета который возвращает класс, а если за это время метамодель изменилась, то структура датасета который заполняется в методе fetch может значительно отличаться от структуры созданной в методе вечь во время первого запуска запроса. Собственно решил это все тем, что поместил все такие классы в пакет и при любом изменении метамодели делаю alter package xxx compile. Тем самым кэш вычищается, но хотелось просто уточнить возможно есть более цивилизованные способы решить эту проблему. Вы практически повторили первый пост, но дело ваше. Как вариант добавить таблицу а-ля dual и включить ее в запросы, затем при изменении модели данных пересобирать статистику, как так. Почему отчеты не сделать на view или даже materialized view? Или не создавать динамически новые типы? С уважением, bw. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2007, 13:40 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
Такой же вопрос возник. Как можно заставить oracle не использовать кэш при вызове anytype, чтобы описание построилось заново? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 19:02 |
|
ODCITableDescribe и FLUSH Shared_Pool
|
|||
---|---|---|---|
#18+
Вам нужен hardparse при каждом обращении для получения resulset с динамической структурой. Обеспечить можно: - генерируя уникальный текст запроса (к примеру, задавая параметр(ы) литералом(ами)) - инвалидируя курсор (конкретный метод зависит от версии) Но в любом случае овчинка выделки не стоит. Динамические наборы проще получать в форме XML или JSON. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2020, 14:37 |
|
|
start [/forum/topic.php?fid=52&msg=34903302&tid=1881660]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 274ms |
total: | 423ms |
0 / 0 |