1. ホーム
  2. sql

[解決済み] "このSqlTransactionは完了しました。もう使用できません。"...設定エラー?

2022-01-31 22:08:06

質問内容

1日半ほど前から、Web上のブログやヘルプ記事を多数検索しています。 SOでこのエラーに関連する質問をいくつか見つけましたが、私の状況には全く当てはまらないと思いました(というか、残念ながら実装するのに十分理解できないケースもありました :P)。 私はヘルプのためにこれを十分に説明することができるかどうかわからない...しかし、ここに行く。

私たちは、リソースを追跡するための.NETアプリを持っています。 リソースを時間追跡システムと課金システムにコピーするエクスポート機能があります。これは、時間データベースと課金データベースにリンクするストアドプロシージャにアクセスします。

最近、課金システムのデータベースを新しいサーバーに移しました(元のサーバー。Server 2003 SP2、SQL 2005、新しいサーバー。新しいサーバー:Server 2008 R2、SQL 2008 R2)。 私は、2008データベースを指すリンクサーバーをセットアップしています。 ストアドプロシージャを更新して2008サーバーを指すようにしたところ、MSDTCとRPCに関するエラーが発生しました(http://www.safnet.com/writing/tech/archives/2007/06/server_myserver.html)。 Linked Serverで「rpc/rpc out」を有効にし、MSDTCをネットワークアクセスを許可するように設定しました(このようなものです。 http://www.sqlwebpedia.com/content/msdtc-troubleshooting ).

今、エクスポート機能を実行しようとすると、上記のようになります: "This SqlTransaction has completed; it is no longer usable." 私に奇妙に思えるのは、ストアドプロシージャを(SSMSから)実行すると、それは正常に完了すると言います。

このようなことを見たことがある方はいらっしゃいますか? 設定に何か見落としがあるのでしょうか? 同じページを何度も見ているのですが、唯一見つけたのは、MSDTCの変更をした後に再起動しなかったことです(ここに記載されています。 http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/7172223f-acbe-4472-8cdf-feec80fd2e64/ ).

ストアドプロシージャーの一部または全部を掲載することができますので、もしお役に立てるのであれば...お知らせください。

どのように解決するのですか?

このエラーメッセージは、quot;zombie transaction"が原因だと思われます。

トランザクションが2回コミットされている(または2回ロールバックされている、またはロールバックされてコミットされている、など)可能性のある箇所を探してください。 SP が既にコミットした後に .Net コードがトランザクションをコミットしていませんか? .Net コードは、エラーが発生するとそれをロールバックし、その後、catch (または finally) 節で再びロールバックしようとしますか?

古いサーバーでエラー条件がヒットしなかったので、欠陥のある "二重ロールバック" コードがヒットしなかった可能性があります。 おそらく、現在では 新しいサーバーで何らかの設定エラーが発生し、例外処理によって欠陥のあるコードがヒットするようになりました。

エラーコードをデバッグできますか? スタックトレースはありますか?