Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ODCITableDescribe и FLUSH Shared_Pool / 13 сообщений из 13, страница 1 из 1
29.10.2007, 15:20
    #34901885
Lav
Lav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
Добрый день, коллеги.

Есть pipelined функция которая возвращает anydataset
Структура anydataset описывается в ODCITableDescribe , а выдача данных идет соответсвенно в ODCITableFetch .

Так вот, структура результирующего набора время от времени меняется. И если не вызывать ODCITableDescribe , то ODCITableFetch начинает формировать некорректный anydataset .

Насколько я понимаю когда оракл первый раз видит запрос наподобие:
Код: plaintext
select t.col1 from table(t_my.f) t
Он вызывает метод t_my.ODCITableDescribe
Во все остальные разы он пользуется закэшированным результатом.

О метод ODCITableFetch работает некорректно. Для того чтобы оракл еще раз вызвал ODCITableDescribe помогает ALTER SYSTEM FLUSH Shared_Pool , но этот вариант не совсем подходит, ибо он сбрасывает весь кэш, а это может пагубно отразиться на производительности базы в целом.

Так вот, внимание вопрос:

КАК ЗАСТАВИТЬ ORACLE (возможно хинтом) НЕ СОХРАНЯТЬ ЗАПРОС В КЭШ?
...
Рейтинг: 0 / 0
29.10.2007, 16:07
    #34902102
Lav
Lav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
Так же еще помогает перекомпилировать TYPE, но на него есть завязки в пакетах, и они соответсвенно валятся в INVALID....
Вообщем полная труба.
...
Рейтинг: 0 / 0
30.10.2007, 00:53
    #34903302
BW
BW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
1. Есть статья И.И. Мельникова "Oracle10g - мощь табличных функций для приложений хранилищ данных". Может это ваш случай? Статью можно прочесть здесь

2. Хорошо иметь тестовый пример, а то не до конца ясно, где возникают проблемы.

3. Указывайте в будущем версию Оракла.

С уважением,
bw.
...
Рейтинг: 0 / 0
30.10.2007, 10:48
    #34903805
Lav
Lav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
Да это как раз то самый случай (из статьи), а версию пожалуйста:
Код: plaintext
1.
2.
3.
4.
Oracle Database 10g Enterprise Edition Release  10 . 2 . 0 . 3 . 0  - Prod
PL/SQL Release  10 . 2 . 0 . 3 . 0  - Production
"CORE	10.2.0.3.0	Production"
TNS for Linux: Version  10 . 2 . 0 . 3 . 0  - Production
NLSRTL Version  10 . 2 . 0 . 3 . 0  - Production

Но все-таки вопрос поставлен достаточно четко:
можно ли указать какой-нить хинт к запросу чтобы оракл в независимости ни от чего выполнил hard parsung(ну или как это называется)
...
Рейтинг: 0 / 0
30.10.2007, 11:27
    #34903967
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
вставить отличный (от других) комментарий в запрос?
...
Рейтинг: 0 / 0
30.10.2007, 11:55
    #34904102
Lav
Lav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
Это понятно, только тогда через пару недель pool только этими запросами и забьется, а это не совсем хорошо.
...
Рейтинг: 0 / 0
30.10.2007, 12:08
    #34904142
Dimka08
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
Lav
можно ли указать какой-нить хинт к запросу чтобы оракл в независимости ни от чего выполнил hard parsung(ну или как это называется)
если найдете отпишитесь здесь пожалуйста
...
Рейтинг: 0 / 0
30.10.2007, 12:12
    #34904156
BW
BW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
LavДа это как раз то самый случай (из статьи)
Что за нежелание подробно описать проблему?! Странно это.....
Случаем не пытаетесь сделать универсальный конвертор из DBMS_SQL курсора в sysrefcursor?

Lav
Но все-таки вопрос поставлен достаточно четко:
можно ли указать какой-нить хинт к запросу чтобы оракл в независимости ни от чего выполнил hard parsung(ну или как это называется)

hard parsing

От добавления комментария до пересбора статистики.

С уважением
bw.
...
Рейтинг: 0 / 0
30.10.2007, 12:49
    #34904340
Lav
Lav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
BWЧто за нежелание подробно описать проблему?! Странно это.....
Случаем не пытаетесь сделать универсальный конвертор из DBMS_SQL курсора в sysrefcursor?

Ну почему же нежелание.

Расказываю по порядку:
Есть некая метамодель, которая описывает где и какие данные хранятся. Так как данные хранятся в разных таблицах, которые динамически изменяют структуру, и разбросаны по всей схеме, с клиентского места достаточно тяжело собрать запрос(особенно если это отчет). Реализовав класс наподобии того, что описан в статье которую вы приводили выше, проблемы с разработкой отчетов и сложные запросы формируемые на клиентском месте исчезли.
Но не обошлось и без подвоха. Дело в том что метод describe отрабатывает один раз когда запрос кэшируется, а именно этот метод задает структуру датасета который возвращает класс, а если за это время метамодель изменилась, то структура датасета который заполняется в методе fetch может значительно отличаться от структуры созданной в методе вечь во время первого запуска запроса.

Собственно решил это все тем, что поместил все такие классы в пакет и при любом изменении метамодели делаю alter package xxx compile. Тем самым кэш вычищается, но хотелось просто уточнить возможно есть более цивилизованные способы решить эту проблему.
...
Рейтинг: 0 / 0
30.10.2007, 12:51
    #34904348
Lav
Lav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
опечатался

й в методе DESCRIBE во время первого запуска запроса.
...
Рейтинг: 0 / 0
30.10.2007, 13:40
    #34904569
BW
BW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
Lav BWЧто за нежелание подробно описать проблему?! Странно это.....
Случаем не пытаетесь сделать универсальный конвертор из DBMS_SQL курсора в sysrefcursor?

Ну почему же нежелание.

Расказываю по порядку:
Есть некая метамодель, которая описывает где и какие данные хранятся. Так как данные хранятся в разных таблицах, которые динамически изменяют структуру, и разбросаны по всей схеме, с клиентского места достаточно тяжело собрать запрос(особенно если это отчет). Реализовав класс наподобии того, что описан в статье которую вы приводили выше, проблемы с разработкой отчетов и сложные запросы формируемые на клиентском месте исчезли.
Но не обошлось и без подвоха. Дело в том что метод describe отрабатывает один раз когда запрос кэшируется, а именно этот метод задает структуру датасета который возвращает класс, а если за это время метамодель изменилась, то структура датасета который заполняется в методе fetch может значительно отличаться от структуры созданной в методе вечь во время первого запуска запроса.

Собственно решил это все тем, что поместил все такие классы в пакет и при любом изменении метамодели делаю alter package xxx compile. Тем самым кэш вычищается, но хотелось просто уточнить возможно есть более цивилизованные способы решить эту проблему.

Вы практически повторили первый пост, но дело ваше.
Как вариант добавить таблицу а-ля dual и включить ее в запросы, затем при изменении модели данных пересобирать статистику, как так.

Почему отчеты не сделать на view или даже materialized view? Или не создавать динамически новые типы?

С уважением,
bw.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.01.2020, 19:02
    #39914526
askkas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
Такой же вопрос возник. Как можно заставить oracle не использовать кэш при вызове anytype, чтобы описание построилось заново?
...
Рейтинг: 0 / 0
16.01.2020, 14:37
    #39914824
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODCITableDescribe и FLUSH Shared_Pool
Вам нужен hardparse при каждом обращении для получения resulset с динамической структурой.
Обеспечить можно:
- генерируя уникальный текст запроса (к примеру, задавая параметр(ы) литералом(ами))
- инвалидируя курсор (конкретный метод зависит от версии)

Но в любом случае овчинка выделки не стоит.
Динамические наборы проще получать в форме XML или JSON.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ODCITableDescribe и FLUSH Shared_Pool / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]