23

他の誰かがこの特定のエラーを抱えていて、それを解決する方法を知っているかどうかだけ知りたいですか?

シナリオは次のとおりです...

SQL Server 2008 クラスター バックエンドに接続する Windows Server 2008 IIS ファームで実行されている Enterprise Library を使用する ASP.NET Web アプリケーションがあります。MSDTC がオンになっています。DB 接続はプールされます。

私の疑惑は、どこかで MSDTC トランザクションが失敗し、接続がプールに返され、別のページの次のクエリが不正な接続を取得して、この特定のエラーが発生したことです。おもしろいのは、分散トランザクションをまったく必要としないクエリでこのエラーが発生したことです (2 つのデータベースへのコミットなど)。エラーが発生したとき、選択クエリ (トランザクションなし) のみを実行していました。

SQL プロファイリングを実行し、クエリは SQL Server で実行されましたが、返されませんでした (接続で MSDTC トランザクションが既に中止されたため)。

これに伴うその他の関連エラーは次のとおりです。

  • 有効なトランザクション記述子が必要なため、新しいリクエストを開始することはできません。
  • 内部 .Net Framework データ プロバイダー エラー 60。
4

4 に答える 4

6

MSDTC には既定の 90 秒のタイムアウトがあります。1 つのクエリの実行がこの制限時間を超えると、トランザクションがコミットしようとしているときにこのエラーが発生します。

于 2010-08-20T05:14:57.717 に答える
3

賞金はあなたが求める答えを得るのに役立つかもしれませんが、いくつかのコードサンプルを与え、エラーがいつ発生するかについてより良い説明を与えると、おそらくより良い答えを得るでしょう。

エラーは断続的にのみ発生しますか?あなたの説明からそれのように聞こえます。

Microsoftが推奨するように、トランザクションとして実行したいクローズをusing TransactionScopeブロックに囲んでいますか?これは、奇妙なトランザクション動作を回避するのに役立つはずです。usingブロックは、スローされた例外に関係なく、オブジェクトが常に破棄されることを確認することを思い出してください。ここを参照してください:http://msdn.microsoft.com/en-us/library/ms172152.aspx

使用している場合は、このコードブロックに対して常に新しいトランザクションを作成するようにフレームワークに指示TransactionScopeする引数があります。System.TransactionScopeOption.RequiresNew

    Using ts As New Transactions.TransactionScope(Transactions.TransactionScopeOption.RequiresNew)
        ' Do Stuff
    End Using

また、接続に障害が発生してから接続プールに戻された疑いがある場合、考えられる解決策は、接続に障害が発生する可能性のあるコードをTry-CatchブロックにDispose、接続をcatchブロックに含めることです。

于 2010-07-22T20:54:02.817 に答える
1

古い質問...しかし、過去数日でこの問題に遭遇しました。

今まで良い答えを見つけることができませんでした。私が見つけたものを共有したかっただけです。

私のシナリオには、複数のセッション ファクトリによって開かれている複数のセッションが含まれています。正しくロールバックして待機し、他のトランザクションがアクティブでなくなったことを確認する必要がありました。それらの1つをロールバックするだけですべてがロールバックされるようです。

しかし、ロールバックの間に Thread.Sleep() を追加した後、それは他のことを行わず、ロールバックを正常に続行します。メソッドをトリガーする後続のヒットは、「有効なトランザクション記述子が必要なため、新しい要求を開始できません」という結果にはなりません。エラー。

https://gist.github.com/josephvano/5766488

于 2013-06-12T19:35:39.643 に答える
0

私は以前にこれを見たことがあり、原因はまさにあなたが思っていたものでした。Riceが提案したように、この問題を回避するために、db関連オブジェクトを正しく破棄していることを確認してください。

于 2010-07-23T18:09:23.713 に答える