問題タブ [system.transactions]
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.
c# - TransactionScope の使用: System.Transactions.TransactionAbortedException: トランザクションが中止されました
以下のコード、.NET 3.5、および SQL Server 2005 を使用して、間接的なネスティング トランザクションを実行しようとしています。
MSDN によると、TransactionScope を使用すると、アプリケーションがトランザクション内で (同じデータベースへの接続であっても) 2 つ目の接続を開くたびに、トランザクションがエスカレートされます。
時折、トランザクションが失敗し、DTC に昇格されず、内部スタック トレースとして次のように表示されます。
この失敗の理由を理解するのを手伝ってくれる人はいますか?
mysql - Mysqlで行をアトミックに選択する方法は?
同じmysqlテーブルから行を選択する5つ以上のプロセスが同時にあります。各プロセスは 100 行を選択し、選択した行を処理し、削除します。
しかし、同じ行が 2 回以上選択されて処理されています。
MYSQL 側または Ruby on Rails 側で発生しないようにするにはどうすればよいですか?
アプリは Ruby On Rails で構築されています...
c# - SQL Server Compact 4 での TransactionScopeOption.Suppress の使用
Sql Server CE 4 と Entity Framework およびSystem.Transactions.TransactionScope.
以下の単純化されたコードは、問題を示す単体テストからのものです。
アイデアは、ブロック (「周囲の」トランザクション)innerScopeに影響を与えることなく、ブロック (トランザクションなし) が成功または失敗できるようにすることです。outerScopeこれが の目的ですTransactionScopeOption.Suppress。
SomeTableただし、 への最初の挿入によってテーブル全体がロックされているように見えるため、コードは失敗しますouterScope。コードに示されている時点で、次のエラーがスローされます。
"SQL Server Compact がロックの待機中にタイムアウトしました。既定のロック時間は、デバイスの場合は 2000 ミリ秒、デスクトップの場合は 5000 ミリ秒です。既定のロック タイムアウトは、接続文字列で ssce: default lock timeout プロパティを使用して増やすことができます。[セッション ID = 2、スレッド ID = 2248、プロセス ID = 13516、テーブル名 = SomeTable、競合タイプ = x ロック (x ブロック)、リソース = PAG (idx): 1046 ]"
そのため、 http://msdn.microsoft.com/en-us/library/ms172001によると、「トランザクション スコープ内のトランザクションは分離レベルを Serializable に設定して実行される」ようです。
ただし、次のコード スニペットを使用して TransactionScope の分離レベルを変更しても役に立ちません。
同じ場所で同じ例外がスローされます。
これを回避する唯一の方法は、ブロックouterScope.Complete()に入る前に呼び出すことです。innerScopeしかし、これは目的に反します。
ここで何が欠けていますか?ありがとう。
sqltransaction - SqlClient.SqlTransaction と System.Transactions
MSDTCの設定には一定の問題があり、現在は に置き換えるSystemTransactionsことを検討していSqlTransactionsます。
上記の違いと、それによって発生する可能性のある問題に興味があります。
c# - プロセス間でのトランザクションの使用
System.Transactions (TransactionScope) を使用して一連のプロセスを調整しようとしています。それぞれがデータベースの作業を行います。最終的に、すべてのプロセスは、1 つの親プロセスを介してアトミックにコミットまたはロールバックする必要があります。残念ながら、これまで試したことはありません。
私の基本的な戦略は、親プロセスで TransactionScope を実行し、それをファイルに保存して、ファイルをロードし、独自の TransactionScope 内でトランザクションを使用して親に戻る子プロセスを呼び出すことです。
しかし、これは私にはうまくいきません。最初の子の呼び出しから戻ると、親トランザクションが中止としてマークされていることが時々あります。それを複製しようとすると、TransactionAbortedException がスローされます。
2 番目の子がトランザクションを逆シリアル化しようとしたときにも例外が発生しました。コード 0x8004d00e で TransactionException が発生しました。
AppDomains とプロセス全体の TransactionScopeとhttp://blogs.microsoft.co.il/blogs/sasha/archive/2010/04/30/propagating-a-transaction-across-appdomainsで説明されていることを実行しようとしています。 aspx。とにかく、運が悪い。
成功せずに試したことがいくつかあります:
- ロードされたトランザクションから子プロセスで DependentClone() を介して DependentTransaction を作成する
- トランザクションをファイルに保存する前に、親プロセスで DependentClone() を介して DependentTransaction を作成する
- トランザクションをファイルに保存する前に、親プロセスで Clone() を作成する
- シリアル化を使用してトランザクションを保存する
- TransactionInterop.GetTransactionFromTransmitterPropagationToken() を使用してトランザクションを保存する
- 親の TransactionScope の前に明示的に接続を開く
- 親内でトランザクションを明示的に参加させる
- 子内でトランザクションを明示的に参加させる
- 親のスコープを完了する/完了しない
- 子のスコープを完了する/完了しない
- 親で CommittableTransaction を明示的に作成する
1 つの例外メッセージを次に示します。
System.Transactions.TransactionException: トランザクションは既に暗黙的または明示的にコミットまたは中止されています。---> System.Runtime.InteropServices.COMException: トランザクションは既に暗黙的または明示的にコミットまたは中止されています (HRESULT からの例外: 0x8004D00E)
もう 1 つ (DependentClone() を使用する場合):
System.Transactions.TransactionAbortedException: トランザクションが中止されました。System.Transactions.TransactionStatePromotedAborted.CreateBlockingClone (InternalTransaction tx) で System.Transactions.DependentTransaction..ctor (IsolationLevel isoLevel、InternalTransaction internalTransaction、ブール値のブロック) で System.Transactions.Transaction.DependentClone (DependentCloneOption cloneOption) で
私が間違っていることはありますか?私は運なしでこれの多くの順列を試しました。
以下にいくつかのコードを示します (上記のすべてのバリアントを示すものではありません)。
system.transactions - TransactionInDoubt" System.Transactions を使用して、TransactionScope.Complete() に表示されます
私たちのシステムにはこの問題があります。私たちは を使用しSystem.Transactions、一緒に作業していますTransactionScope(ほとんどの場合、この場合は間違いなく)。EnterpriseServices最近 からに移行したSystemTransactionsばかりで、重いマルチスレッド作業中にこのエラーが数回発生しました。
System.Transactions.TransactionInDoubtException: The transaction is in doubt. ---> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() at System.Data.SqlClient.TdsParserStateObject.ReadByte() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlDelegatedTransaction.SinglePhaseCommit(SinglePhaseEnlistment enlistment)
中に投げられたようScope.Complete()です。
について少し読んだことがありますがTransactionInDoubt、これは への昇格時に発生する可能性がDTCあり、SQL または MSDTC との接続にわずかな問題がある可能性があります。SqlExceptionしかし、その後 - ??である Timeout Expired とは何ですか? タイムアウトは正確にはどこですか?コミットで???
私は過去数日間ウェブをスキャンしており、あちこちでいくつかの出来事がありましたが、良い答えはありません.
誰か助けて??
.net - プロモート メソッドは、TransactionScope および ODP.net を使用した分散トランザクションに対して無効な値を返しました
トランザクション内で 2 番目の接続を開くと (昇格が予想されるポイント)、上記のエラーが表示されます。
c# - System.Transactions アセンブリの読み込み
AppDomain で参照されているすべてのアセンブリとアセンブリのリストを作成しようとしています。毎回 25 個の ref.assemblies を取得し、その後は AppDomain に 39 個のアセンブリを取得します。しかし、もう一度呼び出すとAppDomain.CurrentDomain.GetAssemblies()、「System.Transactions」というアセンブリがもう 1 つ取得されます。したがって、すべてのアセンブリのリストを作成するために、以下のコードを使用しています。
whereGetRefAssemblies()は、参照されているすべてのアセンブリを読み込んで返します。出力のスクリーンショットは次のとおりです。[ http://i.stack.imgur.com/sknC6.png]
AppDomain でアセンブリをスキャンした後に System.Transactions が読み込まれるのはなぜですか? コードを最適化するにはどうすればよいですか?
c# - TransactionScope は Disposed 時に TransactionAbortedException をスローします
次のシナリオがあります。
- 親プロセスが TransactionScope を開始します。トランザクションを識別するトークンは、TransactionInterop.GetTransmitterPropagationToken を使用して作成され、データベースにデータを挿入します。TransactionScope が完了します。
- 上記のトークンを使用して別のプロセスが開始され、TransactionScope の作成に使用される Transaction が作成されます。このプロセスは、データをデータベースに挿入します。TransactionScope が完了し、破棄されます。
- 親プロセスはこの時点でその TransactionScope を破棄しようとし、TransactionAbortedException がスローされます。例外は、コミットできない理由を示しません。
スタックトレース:
アプリケーションのコードは次のとおりです。
質問:
- コミットできないのはなぜですか?
- このシナリオで TransactionScope を使用することは可能ですか? どのように?