Странная проблема SQL2005. «SqlConnection не поддерживает параллельные транзакции» - PullRequest
3 голосов
/ 02 января 2009

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

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

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

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

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

Кажется, что это происходит при первом db-запросе, который программа делает при запуске.

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

Дополнительная информация: Я не думаю, что у меня есть «длинные» транзакции. Сценарий часто состоит в том, что у меня есть набор данных с 20-100 строками (ContractRows), в котором я сделаю .Uddate для tableAdapter. Я также зацикливаю эти 20-100 строк, и для некоторых из них я создам ad-hook-sql-querys (например, если арендованный продукт помечен как возвращаемый, я создаю 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 дня и ночи на оптимизацию клиентов, чтобы быть уверенным, что мы закрываем соединения и не делаем слишком много глупостей , Без удачи.

Ответы [ 4 ]

7 голосов
/ 11 января 2009

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

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

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

2 голосов
/ 02 января 2009

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

2 голосов
/ 02 января 2009

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

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

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

0 голосов
/ 06 января 2009

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

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