Странная проблема SQL2005.«SqlConnection не поддерживает параллельные транзакции»

StackOverflow https://stackoverflow.com/questions/407320

  •  03-07-2019
  •  | 
  •  

Вопрос

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

И теперь каждый раз, когда мы запускаем программу, она просто говорит: «SqlConnection не поддерживает параллельные транзакции».Мы ничего не меняли в программе, ее компиляции и на сервере клиента, но после ситуации «возможного тупика» она снова хочет выйти в интернет.

У нас есть 7 клиентов (компьютеров), на которых запущена программа, каждый клиент общается с веб-сервисом на локальном сервере, а веб-сервис общается с sql-сервером (тот же компьютер, что и веб-сервер).

Мы перезапустили и sql-сервер, и iis-сервер, но не перезагрузили сервер из-за того, что на сервере работают другие важные службы, поэтому это последнее, что мы делаем.На вкладке управления мы не видим никаких блокировок или чего-то еще.

Итак, мой вопрос: почему ошибка «SqlConnection не поддерживает параллельные транзакции» появляется от одного раза к другому, ничего не меняя в программе, и она все еще существует между sql-restart.

Похоже, это происходит при первом запросе к базе данных, который программа делает при запуске.

Если вам нужна дополнительная информация, просто спросите.Я озадачен...

Больше информации:Я не думаю, что у меня есть «долгоиграющие» транзакции.Часто сценарий таков: у меня есть набор данных с 20–100 строками (ContractRows), и я делаю .Update для tableAdapter.Я также просматриваю эти 20-100 строк и для некоторых из них создаю рекламные sql-запросы (например, если арендованный продукт помечен как возвращенный, я создаю sql-запрос, чтобы пометить продукт как возвращенный в базе данных)

Итак, я делаю это очень упрощенно:

Create objTransactionObject
Create objtableadapter (objTransactionObject)
for each row in contractDS.contractrows
  if row.isreturned then
    strSQL &= "update product set instock=1 where prodid=" & row.productid & vbcrlf
 End if
next
objtableadapter.update(contractDS)
objData.ExecuteQuery(strSQL, objTransactionObject)    
if succsesfull 
  objtransactionobject.commit
else
  objtransactionobject.rollback
end if
objTran.Dispose()

А затем я делаю фиксацию или откат в зависимости от того, прошло ли все хорошо или нет.

Редактировать:Ни один из ответов не решил проблему, но я буду благодарен вам за полезные советы по устранению неполадок.

Сообщение «SqlConnection не поддерживает параллельные транзакции» внезапно исчезло, и теперь sql-сервер просто «выходит из строя» 4-5 раз в день, я думаю, это тупик, из-за которого это происходит, но у меня нет необходимых знаний, чтобы это выяснить, и мне не хватает знаний на экспертов по sql, которые могут следить за этим для меня в данный момент.Я просто перезапускаю sql-сервер и все снова работает.1 из 10 раз мне также приходится перезагружать компьютер.Меня это очень беспокоит (и моих клиентов, конечно).

Любой, кто знает человека с хороший Если у вас есть знания по анализу проблем с взаимоблокировками или другими проблемами sql в Швеции (или во всем мире, говоря по-английски), свяжитесь со мной бесплатно.Я знаю, что это не контактный сайт, но я рискнул задать вопрос, потому что у меня закончились варианты. Я потратил 3 дня и ночи на оптимизацию клиентов, чтобы быть уверенным, что мы закрываем соединения и не делаем там слишком много глупостей. .Без удачи.

Это было полезно?

Решение

Похоже, что вы разделяете соединения и создаете новые транзакции в одном и том же открытом соединении (это параллельная часть исключения, которое вы видите).

Ваш пример, кажется, подтверждает это, поскольку вы не упоминаете, как вы получаете в нем соединение.

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

Другие советы

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

Читая прошлые ответы, кажется, что это как-то связано с неправильным чередованием транзакций или уровнем изоляции.

Как долго соединения остаются открытыми?У вас есть длительные транзакции?

У вас есть неявные транзакции где-то включено, чтобы происходили какие-то транзакции там, где вы их не ожидали?Открывали ли вы Монитор активности, чтобы узнать, есть ли какие-либо неожиданные транзакции?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top