6

アプリケーションに .NET 2.0/3.5 フレームワークを使用しています。複数の接続でいくつかの SQL コマンドを実行する必要があり、各接続は異なるサーバー (Oracle、SQL Server) 上にあります。これらのコマンドがトランザクション対応であることを確認する必要があります。

例: Oracle データベースと SQL Server データベースの両方のテーブルで INSERT を実行し、例外がスローされなかった場合はそれらをコミットする必要があります。例外があった場合、必要に応じて両方のサーバーでロールバックしたいと考えています。

System.Transactions と TransactionScope を使用する必要があると思います。これには、データベース サーバーとアプリケーション サーバーに Microsoft Distributed Transaction Coordinator (MSDTC) をセットアップする必要があります。

高低を調べましたが、相互認証を使用して MSDTC を段階的にセットアップする方法 (ファイアウォール設定と MSDTC 設定の構成を含む) を説明している記事を見つけることができませんでした。完全に文書化されています (セットアップ方法に関する非常に優れた MSDN 記事を見つけられない限り)。

MSDTC を使用することが私の仕事を成し遂げるための唯一の方法ですか?

もしそうなら、どうすれば正しく設定できますか?

編集:

  • すべてのマシンで Windows Server 2003 を使用しています。
  • 2 つの SQL Server があります。1 つは SQL Server 2000 で、もう 1 つは 2005 です。
  • Oracle サーバーが 1 つあり、バージョン 11g です。
  • 私たちが開発しているアプリケーションは、トランザクション方式で 3 つのデータベースすべてのレコードを変更/作成する必要がある場合があります。
  • キーボードと椅子の間の問題ではありません。MSDTC に関するすべての設定方法に関する MSDN の記事を読みましたが、DTCPing やその他のテスト アプリケーションを動作させることができません。プロセスの詳細を段階的に説明する記事を探していました。特定のことを行うための手順を「省略」している MSDN ドキュメントに何度か遭遇しました。
4

7 に答える 7

1

私はこのようなすべてのタスクにリンクサーバーを使用しています。これにより、接続情報と資格情報の管理が容易になります。基本的に私たちのすべてのニーズのためのワンストップショッピング。

編集:詳細-レポートに厳密に使用されるデータベースが1つあります。企業全体のサーバーからデータを取得します。これらのサーバーにアクセスするための単一のアカウントはありません。一部のサーバーは機能IDを使用し、その他のAD資格情報を使用します。これらすべての接続を別々のリンクされたサーバーにまとめることは、私たちにとって最も効果的です。レポートサーバーには、現在16台のリンクサーバーがあります。

また、クエリをビューにまとめて、アプリケーションやCrystalレポートに簡単にアクセスできるようにします。したがって、コードで複数の接続文字列を作成する代わりに、単一のグローバル文字列を使用してレポートデータベースに接続します。

于 2009-05-20T14:57:53.173 に答える
1

私の答えは少し奇妙かもしれませんが、(技術的に可能であれば) データベースごとに 2 つの独立したトランザクションの使用を評価することをお勧めします。分散トランザクション/XA に関する私の懸念は、データベース全体のパフォーマンス/スケーラビリティ/レイテンシです。

私の見解を証明しようとする2つのリンク:

  1. Martin Fowlerは次のように述べています。
  2. eBay アーキテクチャに関するインタビュー
于 2009-09-16T17:04:06.733 に答える
0

これは古典的な分散トランザクションの問題であり、MSDTC の目的です。このクラスの問題の詳細な説明については、トランザクション モニターと XA プロトコルを参照してください。

于 2009-05-20T15:11:16.673 に答える
0

複数の接続を使用する場合は、DTC を使用する必要があります。1 つの接続で 1 つのトランザクションを管理できますが、複数の接続がある場合は、2 フェーズ コミット プロトコルを処理するトランザクション コーディネーターが必要になります。

于 2009-08-31T20:58:49.513 に答える
0

私も同じ問題を抱えていました。2 つの SQL データベース サーバーと 1 つの Oracle データベース サーバーの間で分散トランザクションを行う必要がありましたが、これらはすべて ASP.Net アプリケーションから実行されました。

その経験をブログに書いたので、次回は時間を無駄にしません。

で確認してください:

MS DTC 分散トランザクション: Oracle 10gR2、SQL Server 2005、および Windows Server 2008 R2

于 2011-12-16T22:58:57.880 に答える
-1

はい、トランザクション スコープを作成する必要があります。SQL および Oracle 用の ADO.Net プロバイダーは、MSDTC によって調整された単一の分散トランザクションに各接続を登録します。

MSDTC の設定方法に関する MSDN のドキュメントは非常に精巧で、具体的には次のような質問をカバーしています: Enable Firewall Exceptions for MS DTCConfiguring Security for Distributed Transactions

クライアントが実行している OS、SQL Server のバージョン、Oracle のバージョン、SQL Server および Oracle のバックエンド OS については言及しません。また、実際に遭遇した問題や見たエラー メッセージを伝えることも怠っています。現在、問題はキーボードと椅子の間のどこかにあるようです。

于 2009-09-18T10:39:48.373 に答える