Операции Oracle не работают должным образом на некоторых клиентских компьютерах в приложении Windows .net - PullRequest
0 голосов
/ 02 сентября 2010

У меня есть приложение Windows в VB.NET (2.0) и Oracle Database, соединения обрабатываются System.Data.OracleClient. Мой клиент-оракул 10g. На стороне сервера AutoCommit выключен. Приложение использует transtactions (изоляцияLevel: ReadCommitted) для определенных операций.

Проблема в том, что на некоторых машинах (и только на некоторых из них) транзакции не работают должным образом. Проблемы, которые я обнаружил, следующие:

  1. Откат не работает (они, как обычно, используются внутри улова исключения). Все сделанные ранее изменения принимаются.

  2. Из моего приложения я вызываю хранимую процедуру, в которой используется предложение select для «обновления без ожидания». Исключительное поведение блокировало выбранные строки, но этого не происходит.

По-видимому, конфигурация на стороне клиента одинакова на всех машинах, но на некоторых из них транзакции имеют такое поведение. Очевидно, я что-то упустил ...

Любая помощь?

Заранее спасибо

Гас.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2010

Требуются дополнительные сведения о конфигурации.

«Симптомы» предполагают, что коммиты происходят, когда вы их не ожидаете (т.е. откат не работает и блокировки снимаются).

Существует ли какая-либо форма пула соединений? Я бы посмотрел на V $ SESSION. Если у каждого конечного пользователя есть свой собственный сеанс, вероятно, нет. Могут ли конечные пользователи запустить несколько версий приложения на своем ПК, и у каждой из них будет свой сеанс? Могут ли они порождать отдельные Windows в приложении, и получают ли они свой собственный сеанс?

Возможно, все клиенты настроены одинаково, но люди используют их по-разному (например, Фред запускает отчеты в фоновом режиме, а Вильма переназначает задания одновременно с созданием новых).

Я бы также искал коммиты в коде. Для этого я бы, вероятно, запустил следы операции. Следите за v $ транзакцией, чтобы увидеть, когда транзакции начнутся.

0 голосов
/ 02 сентября 2010

Не уверен, что вы ожидаете от нас здесь. Вы говорите, с одной стороны, ваше приложение работает для некоторых клиентских машин, но не для других. Но с другой стороны «конфигурация на стороне клиента одинакова на всех машинах».

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

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

...