特に奇妙な問題があります。シーンを設定しましょう。 アルファ、ベータとガンマ:ソリューションと呼ばれる引数のために、我々は3つのSQL Server 2005件のデータベースを持っているどのような状況では、SQLレプリケーションはC#アプリケーションのMSDTCトランザクションから部分的に(そしてサイレントに)失敗するでしょう
下記参照ました。
次のようにこれらのデータベース間で定義されたレプリケーションの関係があります:
すべての3つのデータベースが同じスキーマを持つ「AnExample」という名前のテーブルを持っています。 アルファがプロバイダであり、他の2つのデータベースがサブスクライバであるようにレプリケーションが設定されています。
- MSDTCトランザクション(TransactionScopeによって処理される)を使用するC#.Net 3.5アプリケーションは、AlphaとBetaの両方のデータベースに対する読み書きです。
- このトランザクション内のテーブル「AnExample」は、Alpha上でのみ更新されています。
- MSDTCトランザクションが正常にコミットされます。
- 「AnExample」テーブルは、おそらくアルファに更新され、変更はすぐに変更なしベータ、また任意のエラーです(プロファイラは何の活動がデータベースに起こらないことを確認)に発生していないガンマ
- に複製されます別のテーブルにMSDTCトランザクションの書き込みを実行するSQLログやイベントログ(ベータ版が発生し、レプリケーションに)
- 再実行しているのと同じ資格情報を使用してManagement Studioで「AnExample」を更新同じクエリが成功した
- に引き上げベータに、メインアプリケーションのDAL、接続文字列、およびコンフィギュレーションを使用してテストアプリケーションとアルファの「AnExample」テーブルに、その後まったく同じ書き込みも完全にこれは持っている
(複製ベータ版にが発生した)成功します孤立して起こっていない主なアプリケーションに何らかの変化が起こっていると私たちに信じさせました。
可能な手がかり/赤ニシン
我々は成功したテストとメインアプリケーションが使用している実際のクエリの間で見ることができる唯一の違いは、分離レベルが何らかの形で変更されたことです。成功したクエリでは、(トランザクションベースの分離レベルをコードベースまたはストアドプロシージャに変更するための明示的な呼び出しがないにもかかわらず)失敗したシナリオでは、シリアライズ可能に設定されています。
Management Studioでこの分離レベルでクエリを実行すると、問題なく問題なく成功するため、これは多少の赤みを帯びていると感じます。しかし、これは、これがまだ発見していない別の問題の症状かもしれないという点が異なるという事実。
ここでは、ベータ版への複製に失敗したクエリの設定について説明します(ただし、ガンマに適用されます)。
-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level *serializable*
これはちょっとしたヘッドスケーターです。
これは無関係かもしれませんが、これを見てみてください:http://stackoverflow.com/questions/195420/transactionscope-bug-in-net-more-information –
提案に感謝しますそれは違いをもたらさなかった最後 – Lex