Что может быть причиной сбоя триггера Oracle? - PullRequest
1 голос
/ 28 июня 2011

Во-первых, позвольте мне коротко объяснить, как работает мое приложение:

Приложение обрабатывает сделки, которые хранятся в виде XML-документа в нашей базе данных (Oracle 11g). Таблица, которая содержит эту информацию, определяется следующим образом:

table T_MYDEALS (
    DEAL_ID number(9, 0) not null,
    DEAL_XML xmltype
)

Когда мы обновляем или вставляем новые элементы в эту таблицу, у нас есть триггер, который читает (используя XPath) этот XML и заполняет некоторые другие таблицы метаданных.

Все отлично работает, кроме как на моей машине.

Теперь проблема

Когда я запускаю приложение на своем компьютере (т. Е. Tomcat запускается в моем Eclipse, но подключен к базе данных Homologation), триггер завершается ошибкой со следующей ошибкой:

WARN  [org.hibernate.util.JDBCExceptionReporter] SQL Error: 1722, SQLState: 42000
ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01722: invalid number
ORA-06512: at "MY_SCHEMA.AFTER_R_INSERT_MYDEAL", line 628
ORA-04088: error during execution of trigger 'MY_SCHEMA.AFTER_R_INSERT_MYDEAL'

Извините, я не могу поставить свой триггер здесь по соображениям безопасности. Просто отметьте, что строка 628 находится в конце кода триггера.

Мои тесты

Поэтому я попытался понять, почему эта ошибка произошла на моей машине (так как это происходит только на моей машине, никто из моих коллег не сталкивался с этой проблемой). Я не могу сказать, когда он перестает работать, может быть, когда я недавно сменил компьютер?

Сначала я проверяю исходный код, затем соединение с БД, но все кажется правильным. Я также переключился в режим отладки, чтобы просмотреть XML, отправленный в БД, или, по крайней мере, в нашем HibernateXMLType (который является расширением org.hibernate.usertype.UserType, используемым для преобразования нашего XML в данные, читаемые Oracle). Но ничего плохого здесь тоже не найдено.

Я сэкономил вам много тестов, выполненных на моей стороне, но один из моих последних тестов состоял в том, чтобы получить новый сервер Tomcat и развернуть WAR, который развернут в среде (например, Homologation). Затем я выполнил те же тесты, но триггер все еще не работает.

Пока я исключил следующих подозреваемых:

  • Исходный код , так как я также тестировал приложение из WAR-файла, который развернут в среде и который работает правильно;
  • Сама DB , так как я подключен к той же БД, что и рабочая среда. Я тоже пробовал с другой БД, результат тот же.
  • Данные используются для моих тестов, так как они работают, если я пытаюсь сохранить ту же сделку, но с использованием среды омологации.
  • JDK , так как я также изменил JDK на новый;
  • Eclipse , так как мои последние тесты проводились вне Eclipse;
  • Сервер Tomcat , как я также попробовал на новом Tomcat.

Что меня интересует, так это то, что в моей среде Windows XP есть какая-то конкретная конфигурация кодирования, которая «преобразует» некоторые данные в XML и делает их

Мои вопросы

  • Какие возможные элементы я мог забыть в своих тестах?
  • Есть ли способ точно узнать XML, обработанный триггером Oracle (если это возможно, без установки чего-либо на экземпляр Oracle, так как я не имею никакого контроля над ним)?

Я знаю, что я не предоставляю много информации, но если вы можете дать мне несколько советов или идей, я был бы очень благодарен!

Привет.

<Ч />

Техническая информация: Java 1.6, Oracle 11g, Tomcat 5.5.23, JSF 1.2, Hibernate 3.3

1 Ответ

5 голосов
/ 28 июня 2011

Может ли это быть локализация? В вашей системе вы наполняете xml, например, «1,5» вместо «1,5». Ошибка, о которой сообщает Hibernate, ясно указывает в этом направлении. Вы можете отключить триггер и посмотреть, какой результирующий тип xml находится в этой таблице. И если вы или один из ваших коллег можете получить доступ к базе данных через клиент SQL Developer, например, вы можете попробовать запустить код в триггере «вручную».

См. здесь для получения информации и возможных действий при обнаружении ORA-01722.

...