問題タブ [msdtc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 分散トランザクションがタイムアウトしている理由を特定する方法
LINQtoSQLと分散トランザクションをサポートするサードパーティのSDKを使用しています。保留中の更新によってSQLレコードとサードパーティSDKのレコードの両方が更新されることに気付いたとき、タイムアウトが0(おそらく無限)のTransactionScopeを作成しています(ただし、タイムスパンパラメーターとして12時間を試しました)。次に、(transactionscopeによって作成された)アンビエントトランザクションでGetDtcTransactionを使用して、サードパーティのSDKにリンクするDTCトランザクションを取得します。約10分間は問題なく動作しますが、10分後にトランザクションが消え、エラーが発生します。トランザクションが消える理由を特定するにはどうすればよいですか。その時点でわずかにさまざまな程度の作業が行われているにもかかわらず、10分後に定期的に発生するため、タイムアウトであると思われます。しかし、私'
SQLプロファイラーを使用して次のイベントをトレースしてみました。
- すべてのエラーおよび警告イベント
- 「AuditSchemaObject」イベントを除くすべてのセキュリティイベント
- SQLTransactionおよびTransactionLogイベントを除くすべてのトランザクションイベント
エラーが発生したときに発生するのは、次のイベントだけです。
DTCTransactionイベントのEventSubClass16は、「トランザクションが中止されています」を示します。
c# - MS States のリモート プロシージャ トランス オプションは、次のバージョンの SQL SERVER で削除されます
ここで聞いていいのかわからない… ネットで答えを探したけどだめだった… だからここで運を試してみたかった。
Microsoft Web サイトhttp://msdn.microsoft.com/en-us/library/ms189322(SQL.90).aspxからの抜粋を次に示します。
remote proc trans オプション
リモート プロシージャ トランス オプションを使用して、Microsoft 分散トランザクション コーディネーター (MS DTC) トランザクションを介してサーバー間プロシージャのアクションを保護します。remote proc trans を 1 に設定して、トランザクションの ACID (アトミック、一貫性、分離、耐久性) プロパティを保護する MS DTC 調整分散トランザクションを提供します。このオプションを 1 に設定した後に開始されたセッションは、構成設定をデフォルトとして継承します。
この機能は、Microsoft SQL Server の次のバージョンでは削除される予定です。新しい開発作業でこの機能を使用することは避け、現在この機能を使用しているアプリケーションを変更することを計画してください。
このオプションは、リモート ストアド プロシージャを使用するアプリケーション用の以前のバージョンの Microsoft SQL Server との互換性のために提供されています。リモート ストアド プロシージャ コールを発行する代わりに、sp_addlinkedserver を使用して定義されたリンク サーバーを参照する分散クエリを使用します。
これは、トランザクション スコープ オブジェクトが MSDTC に昇格するシナリオでの使用を避ける必要があるということですか?
注 : これは SQL Server 2005 のメッセージですが、SQL Server 2008 でも同じメッセージが表示されます。
.net - TransactionScopeとMSDTCを使用する場合の一般的な落とし穴
TransactionScopeを使用して作業を始めたばかりですが、デバッグに永遠にかかる予期しないことが常に発生していることがわかりました。
これらのリストを統合することは、これらの「奇妙なエラー」の状況に加えて、プラットフォームの奇妙さに関する知識を広げるのに最適だと思います。
トランザクションスコープをどのように使用するかについてのコンテキスト:
- ウェブアプリケーション
- 複数のWebサーバー、アプリケーションサーバー、SQLサーバー
- トランザクションは主にデータベーストランザクションになりますが、MSMQに書き込むために昇格されるものもあります。
c# - Windows での MSDTC について
Subsonic でトランザクション コンストラクト (次のように) を使用するには、MSDTC が Windows マシンで実行されている必要があります。右?
- MS-DTC は Windows システム (XP、Vista、Windows 7、サーバーなど) の既定のサービスですか?
- 有効になっていない場合、アプリケーションのインストール プロセス中に有効になるようにするにはどうすればよいですか?
oracle - 「非同期」コミットを処理するための良い方法は何ですか?
ODP.NETを使用してOracleデータベースからデータを読み取るWCFサービスがあります。このサービスはデータベースにも書き込みますが、間接的に、すべての更新と挿入は、 TransactionScopeでラップするCOM+を介してアクセスするビジネスロジックの古いレイヤーを介して実行されるためです。古い層は、ODP.NETではなくODBCを介してOracleに接続します。
私が抱えている問題は、Oracleが2フェーズコミットを使用し、古いビジネスレイヤーがODP.NETではなくODBCを使用しているため、データが実際にサービスレイヤーからの読み取りに使用できるようになる前にトランザクションが返されることがあることです。TransactionScope.Commit()
StackOverflowでもこのような問題を抱えているJavaユーザーに関する同様の投稿があります。
Oracleの担当者は、この問題について私ができることはあまりないと投稿しました。
これは、OLETx ITransaction :: Commit()メソッドの動作が原因である可能性があります。2PCのフェーズ1(つまり、準備フェーズ)の後、すべてが成功 すると、リソースマネージャーが実際にコミットしていなくても、コミットを返すことができます。。結局のところ、成功した「準備」は、リソースマネージャーがこの時点以降に任意に中止できないことを保証するものです。したがって、リソースマネージャーがMSDTCから「コミット」通知を受信しなかったためにコミットできなかった場合でも(通信障害などが原因で)、コンポーネントのコミット要求は正常に返されます。テーブルから行をすぐに選択すると、選択を実行した後、データベースで実際のコミットが発生する場合があります。したがって、読み取りセマンティクスが一貫しているため、selectには新しい行が表示されません。「フェーズ1の成功後に成功をコミットする」最適化はMSDTCの実装の一部であるため、Oracleではこれについて何もできません。
だから、私の質問はこれです:
2PCの2番目の部分が実際にいつ発生するかを把握する際に発生する可能性のある遅延(タイトルの「asyc」)の問題に対処するにはどうすればよいですか。したがって、(間接的に)挿入したデータが実際に選択可能であると確信できます。Commit()
呼び出しが戻った後?
大規模なシステムは、データをすぐに読み取る準備ができていない可能性があるという事実にどのように対処しますか?
c# - Entity Framework を使用して TransactionScope が問題を引き起こすのはなぜですか?
おそらくMSDTCに関連する、ローカルなものであることがわかっている問題があります(私はそれについてあまり知りません)。
他のプロジェクト開発者 (同じコードベース、コミットされたすべて) がソリューション全体を実行しますが、データベースからデータを取得しようとすると (常にではありません)、次のエラーが発生します。
using transaction スコープ、complete() などすべてをコメントすると、期待どおりに動作します。
以前にこの問題が発生したことがありますか?
編集:
このエラーをスローするクエリは、次のような非常に単純なものです。
編集、解決済み:
サーバーの lmhosts が古くなっています。
.net - この MS DTC エラーが .NET で散発的に発生する原因は何ですか?
このエラーは、1 日を通して散発的に発生します。スタックによると、入隊中にスローされます。毎回このエラーが発生する場合は、トラブルシューティングして修正できます (通常はファイアウォールまたは LMHOSTS の問題)。それはランダムに起こっているので、私は一生、これがどうなるかを考えることはできません.
何か案は?
sql-server-2008 - TransactionScope の質問 - DTC がこれに関与しないようにするにはどうすればよいですか?
(DTC を取り巻く状況と取引の促進は、知らない人にとっては少し不可思議なことかもしれませんが、私の会社がどのように物事を行っているかをお見せしましょう。また、DTC が関与している理由を教えていただければ幸いです。 、可能であれば、それを回避するために何ができるか、感謝します.)
ASP.Net Web サーバーでコードを実行しています。データベースは 1 つ、SQL 2008 です。
データ アクセス コードは次のようになります。SQLConnections と SQLCommands のラッパー オブジェクトを使用するデータ アクセス層があります。典型的な使用法は次のようになります。
実際、SqlClient、SqlConnection などの非常に薄いラッパーです。トランザクションでいくつかのストアド プロシージャを実行したいのですが、ラッパー クラスでは SqlTransaction にアクセスできないため、あるコンポーネントから次のコンポーネントに渡すことができません。 . これにより、TransactionScope を使用するようになりました。
これを行うと、DTC が関与します。残念ながら、私たちの Web サーバーでは、MSDTC 設定で「リモート クライアントを許可する」が有効になっていません。
DTC の関与を避けたいのですが、できますか? Methods1-3() のトランザクション呼び出しを省略して、TransactionScope にすべてを理解させることはできますか?
c# - ADO Entity Frameworkは非DTCトランザクションをサポートしていますか?1つのEntityContextと1つのTransactionScope内の複数のクエリがDTCプロモーションを引き起こしています
EntityFrameworkを使用するWebアプリケーションがあります。TransactionScopeクラスを使用してアンビエントトランザクションを提供します。
DTCトランザクションよりも標準のT-SQLトランザクションを使用するようにEFに指示する方法はありますか?1つのEntityContextと1つのTransactionScopeインスタンス内のさまざまなテーブルに対して多くのクエリを実行することがよくありますが、これは常にトランザクションをDTCにプロモートするようです。
簡単な例をまとめました。以下を参照してください。個々のテーブルへのクエリはT-SQLトランザクションを正しく開始し、接続SPID 54にありました次にContactUsテーブルへのクエリが行われ、EFはトランザクションを促進する効果がある別の接続(SPID 53)でこれを行いますDTCトランザクションに。**
.net - 分散トランザクションの場合に MSDTC をインストールする必要がある場所
アプリケーションで分散トランザクションを維持する必要がある
Service1 が Server1 にインストールされているとします。
Service2 は Server2 にインストールされます
そしてクライアントは2つのサービスを消費しています
MSDTC を正確にどこにインストールする必要がありますか、Server1、Server2、およびクライアントにインストールする必要がありますか?
この場合、追加の構成が必要ですか?