奇妙なSQL2005の問題。 “ SqlConnectionは並列トランザクションをサポートしていません”

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

  •  03-07-2019
  •  | 
  •  

質問

デッドロック状態の結果と思われる問題があります。 現在、彼女は問題の根本を探していますが、その間、サーバーを再起動して顧客を獲得したかったのです。

そして、プログラムを起動するたびに、「SqlConnectionはパラレルトランザクションをサポートしません」とだけ表示されます。プログラム、コンパイル済み、および顧客サーバーでは何も変更していませんが、「デッドロックの可能性」状況が発生した後、再びオンラインにしたいです。

プログラムを実行している7つのクライアント(コンピューター)があり、各クライアントはローカルサーバー上のWebサービスと通信し、WebサービスはSQLサーバー(Webサーバーと同じマシン)と通信しています。

sql-serverとiis-serverの両方を再起動しましたが、サーバーで実行されている他の重要なサービスのためにサーバーを再起動しませんでした。 [管理]タブではロックなどは一切設定できません。

だから私の質問は、「SqlConnectionはなぜ並列トランザクションをサポートしないのですか?」プログラム内で何も変更せずに1つの時刻から別の時刻に来るエラー。それでもsql-restartの間に存在します。

プログラムの起動時に最初に行われるdb-requestで発生するようです。

さらに情報が必要な場合は、お問い合わせください。困惑しています...

詳細情報: 「長い」とは思わない実行中のトランザクション。多くの場合、20〜100行(ContractRows)のデータセットがあり、tableAdapterで.Updateを実行します。私もそれらの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は「ダウン」しました。 1日に4〜5回、それはそれを行うデッドロックだと思いますが、それを見つけるための適切な知識がなく、現時点でこれを監視できるsqlエキスパートに不足しています。 sql-serverを再起動するだけで、すべてが再び機能します。 10回のうち1回、コンピューターを再起動する必要があります。本当に私(そしてもちろん私の顧客)を悩ませています。

スウェーデンのデッドロックまたはその他のsql問題のトラブルを分析する良い知識を持つ人を知っている人は誰でも私に連絡してください。私はこれが連絡先サイトではないことを知っていますが、オプションを使い果たしてしまったので、質問をするようにしています。接続を閉じて、あまりにも愚かなことをしないようにクライアントを最適化するために3日と夜を費やしました。運がなければ。

役に立ちましたか?

解決

接続を共有し、同じオープン接続で新しいトランザクションを作成しているようです(これは、表示されている例外の並行部分です)。

接続をどのように取得するかについての言及がないため、あなたの例はこれをサポートしているようです。

コードを確認し、接続を開いて、完了したら破棄することを確認する必要があります(必ず、usingステートメントを使用して接続を閉じます)。どこかで開いたままにしているようです。

他のヒント

あなたは異常な問題ではないようです。エラー文字列をクエリボックスに貼り付けたときに、Googleは多くのヒットを見つけました。

過去の回答を読んで、トランザクションの不適切なインターリーブまたは分離レベルと関係があるように思われます。

接続が開いている時間はどれくらいですか?長時間実行されるトランザクションがありますか?

暗黙的なトランザクションがどこかでオンになっているため、予期しないトランザクションがいくつかありますか?アクティビティモニターを開いて、予期しないトランザクションがあるかどうかを確認しましたか?

トランザクションログのバックアップを試みましたか?以前の似たような経験を正しく覚えていれば、それはそれを明らかにするかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top