Ошибка недопустимых привилегий?

#oracle #function #clob #ora-01031 #ora-06512

#Oracle #функция #сбой #ora-01031 #ora-06512

Вопрос:

Два связанных приложения используют функцию в пакете в нескольких запросах для возврата некоторых данных в формате CSV. Выделяемый и объединяемый столбец является закрытым полем и может содержать HTML, специальные символы и т.д. У приложений мало пользователей, и поэтому они используются не часто. Одно из них — это приложение Flex, которое использует HTTP-сервисы Oracle, а другое — ASP.NET приложение, использующее ODP.NET . Приложения на самом деле представляют собой одно интегрированное приложение с гиперссылками друг на друга.

Вчера я получил несколько уведомлений о странной ошибке:

ORA-01031: недостаточно привилегий ORA-06512

Номер строки в пакете в сведениях об ошибке указывает, что ошибка была вызвана функцией, используемой в предложении select. Это происходило бы при вызове любым приложением примерно в 75% случаев.

Правильно ли я, что ORA-06512 произошло в функции, которая затем вызвала ORA-01031 insufficient privilege error ? К сожалению, ORA-06512 это очень общая ошибка и она мне ни о чем не говорит. И почему это может вызвать ошибку недопустимых привилегий? Учетные записи пользователей Oracle, используемые обоими приложениями, имеют привилегию выполнения в пакете, содержащем функцию.

Что касается функции… он использовался около 2 лет в рабочей среде без каких-либо проблем. Кроме того, когда я вчера импортировал данные в QA и протестировал их, никакой ошибки не возникло, независимо от того, сколько раз я забивал сервер запросами. Но в рабочей среде ошибка будет возникать примерно в 75% случаев с точно такими же параметрами.

Администратор базы данных пытался помочь мне с трассировкой, но мы не смогли найти сообщение об ошибке в файлах трассировки.

Сегодня в рабочей среде все возвращается в нормальное русло. Даже если я забью сервер запросами, ошибка будет упорно отказываться возникать.

Что вызвало это очень странное поведение вчера? Есть ли у кого-нибудь из присутствующих здесь гуру какие-нибудь идеи?

РЕДАКТИРОВАТЬ: я только что осознал одну важную деталь. Столбец в таблице, который выбирается и объединяется в CSV с помощью функции, является CLOB.

Ответ №1:

Если клиентские приложения запускали «SELECT clob_to_csv (clob_col) FROM …» и иногда возвращали недопустимые привилегии, то, вероятно, это что-то, что пытается сделать функция, а не оператор select, не имеющий достаточных привилегий для выполнения функции.

Не совсем ясно, что это может сделать, для чего может потребоваться привилегия. Использует ли он файл (UTL_FILE) или сетевое подключение / веб-службу?

Могут быть какие-то нечетные данные (возможно, очень большой блок).

Комментарии:

1. @[Гэри Майерс] Спасибо за ответ. Я только что проверил с одной конкретной записью, которая вызвала проблему. Длина текста составляла 3402 символа.

2. @[Гэри Майерс] Функция просто перебирает значения CLOB при их объединении, усекает объединенное значение, если оно превышает 4000 байт (большинство значений небольшие) и возвращает его как varchar2. Он не использует файловое или сетевое подключение или веб-сервис.