Что может вызвать (периодические) плохие ответы от базы данных Oracle на Biztalk? - PullRequest
0 голосов
/ 16 сентября 2011

У моей оркестровки есть порт отправки-получения, и пока точка, где форма отправки не будет найдена, все обрабатываемые сообщения будут абсолютно одинаковыми. То есть сообщение, которое я заканчиваю тем, что отправляю базу данных Oracle через порт send-receive, идентично.

По сути, я отправляю в БД запрос, в котором указано, от какой таблицы я хотел бы получить последние изменения и кто является владельцем таблицы. Как я уже упоминал, при сравнении обновления, которое работало, и того, которое не работало: до этого момента оба сообщения запроса были одинаковыми.

Проблема : Ответ от базы данных может быть пустым и никогда не должен быть. Я ожидаю, что полная строка из таблицы изменилась, и иногда я ничего не получаю.

Подробности : я изменяю только самые простые поля для запуска этих тестов и всегда один и тот же - целочисленное поле, которое я уменьшаю или увеличиваю с 99 до 98 до 97 до 98 ... и т. Д. Один номер может сработать в первый раз, но не второй, а иногда наоборот.

Любое другое поле может вызвать эту ошибку.

Подробнее ... : Похоже, что функционирование Oracle может быть ошибочным. То есть то, как он обрабатывает метки времени, может привести к тому, что Oracle вернет пустую запись, поскольку предполагается, что Biztalk уже был уведомлен об изменении. Изучив внутреннюю часть БД, мы увидели, что все мои последние попытки изменения были помечены с точностью до одной и той же точной секунды (физически невозможно, учтите).

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

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

Почему я думаю, что это происходит: я прошу дать мне клиента, который (БД сказал мне) изменился, и он (каким-то образом - это загадка) запускает свой поиск дважды. Раз это работает, это первый запрос, который возвращает сообщение в Biztalk и, таким образом, содержит актуальную информацию. Когда этого не происходит, это происходит потому, что второй поиск запрашивает последние изменения, а их нет, потому что первый поиск уже получил их и возвращает пустую запись.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2011

Проблема заключалась в следующем:

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

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

0 голосов
/ 17 сентября 2011

Хотя у меня нет конкретного решения вашей проблемы, возможно, решение состоит в том, чтобы подумать о том, как обрабатывать случаи, когда вы получаете нулевой ответ. Если это происходит, это вызывает проблему ниже по потоку, поэтому, если вы не можете ее решить, вам, вероятно, следует написать код, чтобы принять нулевой ответ как действительный ответ.

Тогда может случиться так, что фактические данные, которые вы ожидали в ответе, должны быть переданы другому процессу нисходящего потока для извлечения.

Однако, хотя в некоторых ситуациях вам нужно сделать более одного отдельного вызова, это все равно можно рассматривать как единый логический интерфейс.

Чтобы обработать нулевой ответ, вы можете изменить входящий порт, чтобы ожидать нетипизированное сообщение, передавая входящий ответ в XmlDocument.

Надеюсь, это поможет.

...