powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибки ORA-00604, ORA-08177 при использовании Serializable.
9 сообщений из 9, страница 1 из 1
Ошибки ORA-00604, ORA-08177 при использовании Serializable.
    #39768641
Андрей_7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, доброе время суток!

Прошу помочь в решении вот какой проблемы.

Проект:
СУБД: Oracle 12.
Толстый клиент: DELPHI XE8, работа с БД осуществляется через компоненты DOA.

В БД раз в несколько минут джобом грузятся данные, которые затрагивают около 10 таблиц.
Т.е. происходит insert/update данных в несколько таблиц, потом выполняется коммит, который фиксирует изменения сразу для всех таблиц. И так раз в несколько минут.

В толстом клиенте есть форма, которая отображает информацию из этих таблиц.
Чтение информации для этой формы осуществляется вызовами нескольких пакетных процедур, которые выполняются длительное время. Проблема в том, что между вызовами процедур может выполнится коммит загрузки, описанной выше, тогда часть процедур возвратят данные до коммита, другая часть - после. Такого быть не должно, все процедуры должны возвратить согласованные данные на один момент времени.

Для решения данной проблемы перед вызовом этих процедур я устанавливаю уровень изолированности сессии в serializable, после вызова всех процедур возвращаю его обратно в read commited.

Но почему-то периодически (ошибка плавающая) при вызове пакетных процедур, которые только читают данные и возвращают курсоры с ними, возникают следующие ошибки:
ORA-00604: error occurred at recursive SQL level 1
ORA-08177: can't serialize access for this transaction. Индекс 0
Данные ошибки всегда одни и те же, но возникают при вызове разных пакетных процедур.

Ошибка ORA-08177 говорит о том, что моя транзакция пытается изменить строку (или строку в том же блоке), которую изменила другая транзакция, но ошибка возникает на процедурах, которые не производят никаких изменений, а только возвращают курсоры с данными.
Еще удивляет, что не указан номер строки в пакете, на которой произошла ошибка.

Подскажите, пожалуйста, в чем м.б. причина этого?
...
Рейтинг: 0 / 0
Ошибки ORA-00604, ORA-08177 при использовании Serializable.
    #39768653
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей_7777Ошибка ORA-08177 говорит о том, что моя транзакция пытается изменить строку "at recursive" означает наличие неявного sql. Может быть из-за создания сегмента после старта транзакции.
Андрей_7777не производят никаких измененийread only
Андрей_7777не указан номер строки в пакете, на которой произошла ошибка.Если процедура перехватывает и пробрасывает исключение дальше, стек может не сохраняться.
...
Рейтинг: 0 / 0
Ошибки ORA-00604, ORA-08177 при использовании Serializable.
    #39768669
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поведение возможно при сплите индексного блока.
Попробуйте rowdependencies
...
Рейтинг: 0 / 0
Ошибки ORA-00604, ORA-08177 при использовании Serializable.
    #39768694
Андрей_7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous, спасибо

Установить rowdependencies нужно для всех таблиц, из которых у меня читаются данные?
Но почему все-таки при попытке вызова пакетной процедуры, только читающей данные, возникает ошибка?
...
Рейтинг: 0 / 0
Ошибки ORA-00604, ORA-08177 при использовании Serializable.
    #39768704
Андрей_7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-, спасибо

-2-Андрей_7777Ошибка ORA-08177 говорит о том, что моя транзакция пытается изменить строку
"at recursive" означает наличие неявного sql. Может быть из-за создания сегмента после старта транзакции.

Какой сегмент Вы имеете ввиду?
Я устанавливаю уровень изолированности в serializable, далее сразу же вызываю пакетный метод, возвращающий курсоры с данными, и в этот момент иногда возникает данная ошибка.
-2-Андрей_7777не производят никаких изменений
read only

К сожалению не получится, т.к. у меня есть пакетный метод, который в качестве промежуточный вычислений использует временную таблицу, а также есть пакетный метод, который инсертит данные в обычную таблицу.
Они вызываются после процедур, которые только читают данные, но на них тоже иногда возникает данная ошибка.
-2-Андрей_7777не указан номер строки в пакете, на которой произошла ошибка.
Если процедура перехватывает и пробрасывает исключение дальше, стек может не сохраняться.

Все данные процедуры не перехватывают исключения
...
Рейтинг: 0 / 0
Ошибки ORA-00604, ORA-08177 при использовании Serializable.
    #39768822
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей_7777-2-read only

К сожалению не получится, т.к. у меня есть пакетный метод, который в качестве промежуточный вычислений использует временную таблицу, а также есть пакетный метод, который инсертит данные в обычную таблицу.
Они вызываются после процедур, которые только читают данные, но на них тоже иногда возникает данная ошибка.Говно-дизайн?
...
Рейтинг: 0 / 0
Ошибки ORA-00604, ORA-08177 при использовании Serializable.
    #39768839
Андрей_7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicАндрей_7777пропущено...

К сожалению не получится, т.к. у меня есть пакетный метод, который в качестве промежуточный вычислений использует временную таблицу, а также есть пакетный метод, который инсертит данные в обычную таблицу.
Они вызываются после процедур, которые только читают данные, но на них тоже иногда возникает данная ошибка.Говно-дизайн?
Изначально система была спроектирована под оффлайн-режим (данные за весь прошлый день полностью грузились ночью), соответственно тогда таких проблем не было.
Сейчас требуется, чтобы эта система также работала и в онлайн-режиме (данные поступают раз в несколько минут). Пока пошел по самому простому пути - использовал SERIALIZABLE.
Если не получится понять причины данной ошибки и избавиться от нее, то видимо перепишу код под READ ONLY, но у меня нет уверенности, что ошибка пропадет.

Как пояснил -2-:
-2-"at recursive" означает наличие неявного sql. Может быть из-за создания сегмента после старта транзакции.

Хотелось бы понять, как выявить этот неявный sql, и не вызовет ли он ошибку в READ ONLY?
...
Рейтинг: 0 / 0
Ошибки ORA-00604, ORA-08177 при использовании Serializable.
    #39769195
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей_7777Хотелось бы понять, как выявить этот неявный sql
трасса 10046 поможет, если умеете ее правильно читать.
По факту основная масса рекурсивных SQL связана с переключением контекста (вызов SQL из PL/SQL блока и наоборот - вызов pl/sql функций из SQL).
Вылезут также триггеры, каскадные удаления по FK и т.п.
Также можно увидеть "space management" - автомагические запросы к словарю, связанные, к примеру, с выделением новых экстентов при insert.
...
Рейтинг: 0 / 0
Ошибки ORA-00604, ORA-08177 при использовании Serializable.
    #39769224
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Андрей_7777,

не проще на Using Oracle Flashback Query (SELECT AS OF) перейти?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибки ORA-00604, ORA-08177 при использовании Serializable.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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