問題タブ [distributed-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.
database - 分散トランザクションにおける完全性と機密性
分散トランザクションについて質問があります。私が3つのトランザクションプログラムを持っていると仮定しましょう:
トランザクションA
- 始める
- a = read(A)
- b = read(B)
- c = a + b
- write(C、c)
- 専念
トランザクションB
- 始める
- a = read(A)
- a = a + 1
- write(A、a)
- 専念
トランザクションC
- 始める
- c = read(C)
- c = c * 2
- write(A、c)
- 専念
したがって、重要な操作には、C2-A5、A2-B4、B4-C4、B2-C4、A2-C4の5つのペアがあります。
私は完全性と機密性を確保する必要があります、あなたはそれを達成する方法について何か考えがありますか?
前もって感謝します!
sql-server - DBAはSQLServerDTCにノーと言っていますか?
私はDBAにSQLServer2005のクラスターでDTCを有効にしようとしています。残念ながら、彼らは拒否し続けています。いくつかのボックスにチェックマークを付けるだけでは問題がないため、DTC専用のホストを設定する必要があるという彼らの主張(数か月かかる可能性があります!!)。これは本当ですか?SQLファームなどの共有環境でのDTCの煩わしさ。これに反対する議論はありますか?
ありがとう
sql-server - 1 つの SP からのクロスデータベース トランザクション
いくつかの単純な SQL ステートメントで複数のデータベースを更新する必要があります。データベースは「リンク サーバー」を使用して SQL で構成され、SQL のバージョンは混在しています (SQL 2008、SQL 2005、および SQL 2000)。データベースの 1 つでストアド プロシージャを作成するつもりですが、トランザクションを使用して、各データベースが一貫して更新されるようにしたいと考えています。
次のうち、最も正確なものはどれですか。
- 単一の BEGIN/COMMIT TRANSACTION で、すべてのデータベースのすべてのステートメントが成功することが保証されますか?
- データベース上の個々のコマンド セットごとに複数の BEGIN TRANSACTIONS が必要ですか?
- リモート データベースの更新時にもトランザクションはサポートされますか? トランザクション サポートが組み込まれたリモート SP を実行する必要があります。
データベース間の参照整合性については気にしないことに注意してください。可能であれば、単一のストアド プロシージャから複数のデータベースを同時に更新しようとしています。
他の提案も大歓迎です。ありがとう!
c# - MSDTC がクライアント マシンを分散トランザクションに参加させようとする
MSDTC によって記録された次の断続的な警告が表示されます。
呼び出し元がトランザクションをリモート システムに伝達しようとしましたが、マシン 'X' で MSDTC ネットワーク DTC アクセスが現在無効になっています。MS DTC 構成設定を確認してください。
ただし、マシン X では MSDTC が設計上無効になっています。これはクライアント マシンであり、トランザクションに参加するビジネスはありません。
- TCP 経由で WCF サービスをホストする複数の Windows サービス エンドポイント
- 下にある単一の SQL Server 2005 インスタンス
- Linq から SQL へ
- リモート クライアントが WCF/TCP 経由でイベント コールバックを受信する
この問題は再現が難しく、通常はサービスの再起動後に発生します。クライアント マシンへのコールバックがトランザクションのコンテキスト内で発生していると思われます。
誰かが同様の問題を見たのだろうか??
ケン
sql - レプリケーション SQL サーバー
私の運用サーバーには、正常に機能するレプリケーションがあります。2 つのサブスクライバー db として分散データベースがあります。私のデータは本番環境からレプリケートされています (正常に動作しています) が、データがサブスクライバーの分散データベースにレプリケートされる間、エラーがスローされます
Err msg =
Replication-Replication Distribution Subsystem: PRD01-XYZ-VREPL1\REPL01-25 が失敗しました。PRIMARY KEY 制約 'PK_vendors' に違反しています。オブジェクト 'dbo.tabname' に重複するキーを挿入できません。
php - 同じトランザクション内の異なるサーバーに複数のSQLを配置する方法はありますか?
私のシステムではアクションを実行し、レポートのためにそのアクションを別のサーバー(必要に応じてスタースキーマ)に記録します。明らかに、アクションの更新/挿入をロギングと同じトランザクションに含める必要があります。
それで、同じトランザクションで2つの異なるサーバーに2つの異なるsqlを含める方法はありますか?
今、私はそれをコードレベル(php)で管理しています
java - RMI呼び出しを含むSpring分散トランザクションは可能ですか?
バックグラウンド
RMIを使用して2台のサーバーにサービスをプロビジョニングするSpringClientアプリケーションがあります。クライアントで、エンティティをデータベースに保存し(簡単)、エンティティの詳細を使用して2つのサーバーにrmi呼び出しを行います。サーバーでSpring3.0.2を使用していますが、クライアントは単純なSpring-mvcサイトです。
要件
私の要件は、トランザクション全体がロールバックするサーバーに対してrmi呼び出しのいずれかが失敗した場合、つまりエンティティがクライアントに保存されず、いずれかのrmi呼び出しが成功した場合、これもロールバックすることです。
私は分散トランザクションに比較的慣れていませんが、RMI呼び出しを使用したXAのようなトランザクションが必要だと思います。
私はここでこのテーマに関する素晴らしいリンクを見つけましたが、異なるサーバーへの2つのリモートメソッド呼び出しを呼び出すときのパターンについては言及していません。推奨読書の観点から、また春を使用してこれを達成する方法についての指針について、この主題についてもっと知りたいと思います。これにトランザクションマネージャーを使用することは可能ですか?
ありがとうございました。
c# - TransactionScope:分散トランザクションの回避
とりわけ、List<t>子オブジェクトのコレクション()を含む親オブジェクト(DALの一部)があります。
オブジェクトをDBに保存し直すときは、親を入力/更新してから、各子をループします。保守性のために、子のすべてのコードを別のプライベートメソッドに入れました。
標準のADOトランザクションを使用するつもりでしたが、旅行中にTransactionScopeオブジェクトに遭遇しました。これにより、親メソッドのすべてのDBインタラクション(および子メソッドのすべてのインタラクション)を1つのトランザクションにラップできると思います。
ここまでは順調ですね..?
したがって、次の質問は、このTransactionScope内で接続を作成して使用する方法です。複数の接続を使用すると、それらが同じDBに対して行われている場合でも、TransactionScopeが分散トランザクションであると見なす可能性があると聞いています(高価なDTC作業が含まれます)。
本当ですか?それとも、他の場所で読んでいるように、同じ接続文字列(接続プールに役立つ)を使用しても問題ない場合はありますか?
もっと実際的に言えば、私は...
- 親と子に別々の接続を作成します(同じ接続文字列を使用しますが)
- 親に接続を作成し、それをパラメーターとして渡します(私には不器用なようです)
- 他に何かしますか...?
アップデート:
通常の.NET3.5+とSQLServer2008+を使用しても問題ないように見えますが、このプロジェクトの別の部分ではOracle(10g)を使用するため、プロジェクト間で一貫して使用できる手法を練習することもできます。
したがって、接続を子メソッドに渡すだけです。
オプション1コードサンプル:
stored-procedures - ストアド プロシージャでの 2 フェーズ コミット動作をテストする方法は?
この特定のストアド プロシージャは、アーカイブ パージを実行します
。1) トランザクション データベースからトークンを選択します
。2) トークンを一時テーブルに配置します
。3) トークンをループします。3.1
) 一時テーブルのトークンを使用して、トランザクション テーブルからデータを取得し、別のアーカイブ内のテーブルに挿入します。 db (フェデレーション経由)
3.2) COMMIT 挿入。
3.3) 次に、同じトークンを使用して、トランザクションからデータを削除します
。3.4) COMMIT は削除します。
2 フェーズ コミットにより、ループの最後にコミットを 1 つだけ持つことができます。
私の質問は、挿入フェーズまたは削除フェーズで proc を失敗させるシナリオをシミュレートする方法です。これは、実行が失敗した場合でも、データが完全性を保持することを保証するためです - 半分処理されたトークンなどはありません。
unit-testing - 統合テスト、トランザクションでデータベースを変更する REST 呼び出しをラップするにはどうすればよいですか?
次のようなコードがあります。
これを TransactionScope で囲おうとしましたが、うまくいきません。データベース全体を復元せずにテストの変更をロールバックする方法はありますか?