이상한 SQL2005 문제. "SQLConnection은 병렬 거래를 지원하지 않습니다"

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

  •  03-07-2019
  •  | 
  •  

문제

나는 교착 상태에 대한 결과처럼 보이는 문제가 있습니다. 이제 문제의 근본을 찾고 있지만 그 동안 서버를 다시 시작하고 고객을 확보하고 싶었습니다.

이제 프로그램을 시작할 때마다 "SQLConnection은 병렬 트랜잭션을 지원하지 않습니다"라고 말합니다. 우리는 프로그램, 컴파일 및 고객 서버에서 아무것도 변경하지 않았지만 "가능한 교착 상태"라는 후에는 다시 온라인으로 가고 싶습니다.

우리는 프로그램을 실행하는 7 개의 클라이언트 (컴퓨터)가 있으며 각 클라이언트는 로컬 서버의 웹 서비스와 대화하고 있으며 웹 서비스는 SQL-Server (웹 서버와 동일한 기계)와 대화하고 있습니다.

우리는 SQL-Server와 IIS-Server를 모두 다시 시작했지만 서버에서 실행되는 다른 중요한 서비스로 인해 서버를 재부팅하지 않았으므로 마지막 일입니다. 관리 탭에서 자물쇠 나 아무것도 할 수 없습니다.

따라서 내 질문은 왜 "SQLConnection이 병렬 트랜잭션을 지원하지 않는"오류가 프로그램에서 아무것도 변경하지 않고 한 번에서 다른 시간으로 다른 것으로 커밋되는 오류가 발생하지만 여전히 SQL-Restart 사이에 있습니다.

프로그램이 시작될 때 수행하는 첫 번째 DB 요청에서 발생하는 것 같습니다.

더 많은 정보가 필요하면 물어보십시오. 나는 당황했다 ...

추가 정보:나는 "긴"트랜잭션을 실행한다고 생각하지 않습니다. 이 시나리오는 종종 타블레이터에서 .update를 수행하는 데 20-100 행 (피임)의 데이터 세트가 있다는 것입니다. 나는 또한 20-100 행을 루프하고 그중 일부는 ad-hook-sql-querys를 만듭니다 (예 : 임대 된 제품이 반환 된 것으로 표시된 경우 데이터베이스에서 반환 된대로 제품을 표시하기 위해 SQL-Query를 만듭니다).

그래서 나는 이것을 매우 단순화합니다.

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-Server는 하루에 4-5 번 "내려갑니다"는 그 일을하는 데 교착 상태를 생각하지만, 알 수있는 올바른 지식은없고 짧습니다. 현재 나를 위해 이것을 모니터링 할 수있는 SQL-Experts에서. 방금 SQL-Server를 다시 시작하면 모든 것이 다시 작동합니다. 10 중 1 회 컴퓨터를 다시 시작해야합니다. 그것은 정말로 나를 괴롭 히고 있습니다 (그리고 내 고객은 물론).

사람을 아는 사람 좋은 스웨덴의 교착 상태 또는 기타 SQL 문제로 문제를 분석하는 데 대한 지식 (또는 전 세계 어디에서나 영어 말하기)는 저에게 연락 할 수 있습니다. 나는 이것이 연락처 사이트가 아니라는 것을 알고 있지만 chanse가 옵션이 부족하기 때문에 질문을하기 위해 질문을합니다. 3 일 밤낮으로 고객을 최적화하여 연결을 닫고 거기에서 너무 어리석은 일을하지 않도록했습니다. . 행운없이.

도움이 되었습니까?

해결책

동일한 개방형 연결에서 연결을 공유하고 새로운 트랜잭션을 작성하는 것 같습니다 (이것은보고있는 예외의 평행 부분입니다).

연결을 얻는 방법에 대한 언급이 없으므로 예제는이를 뒷받침하는 것 같습니다.

코드를 검토하고 연결을 열고 연결을 시작한 다음 완료되었을 때 (그리고 반드시 사용 명령문을 사용하여 연결을 닫는지 확인하십시오)를 사용해야합니다. 당신이 어딘가에 열린 것을 떠나는 것처럼.

다른 팁

당신은 특이한 문제가 아닌 것 같습니다. Google은 오류 문자열을 쿼리 상자에 붙여 넣었을 때 많은 타격을 발견했습니다.

과거의 답변을 읽으면 인터리브 트랜잭션과 관련하여 부적절하거나 격리 수준과 관련이있는 것처럼 들립니다.

연결이 열려 있습니까? 장기 거래가 있습니까?

당신은 가지고 있습니까? 암시 적 거래 어딘가에 켜져 예상하지 못했던 거래가 있습니까? 예기치 않은 트랜잭션이 있는지 확인하기 위해 활동 모니터를 열었습니까?

트랜잭션 로그 백업을 시도해 보셨습니까? 이전의 비슷한 경험을 올바르게 기억한다면이를 해결할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top