問題タブ [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.

0 投票する
1 に答える
643 参照

database - 分散トランザクションのイディオムまたはアルゴリズム?

異なるシステムに2つのエンティティがあり、一方または両方に関連付けられた情報に基づいて一方または両方を変更する何らかのトランザクションを実行する必要があり、両方のエンティティへの変更が完了するか、どちらも完了しないことを要求するとします。 。

簡単な例です。基本的に、2つの別々のハードウェアで2つの行を実行する必要があります。

おそらく、この種の状況のた​​めに特別に存在するアルゴリズムまたはイディオムがあり、同じ値への他の試みられたアクセスの存在下で正しく機能します(正しいのいくつかの予測可能な定義のために)。2フェーズコミットプロトコルは、そのようなアプローチの1つと思われます。おそらくより多くの制限がある、より単純な代替案はありますか?(たとえば、システムが完全にシャットダウンしたり、応答に失敗したりしないようにする必要があるかもしれません。)または、何らかの方法でより優れた、より複雑なシステムがあるのでしょうか。そして、その問題に関する標準的なまたは評判の良いテキストはありますか?

0 投票する
1 に答える
11658 参照

.net - enlist=false を使用した接続が、分散トランザクションに手動で登録された後、閉じられない

を使用した分散トランザクション コンテキストがありますServiceDomain。その中で、接続文字列を指定して SQL 接続を開き、トランザクションに自動的Enlist=falseに登録されないようにします。次に、 を使用して手動で分散トランザクションに接続を登録すると、接続が閉じられず、with で終わる可能性があります。EnlistDistributedTransactionInvalidOperationException

タイムアウトになりました。プールから接続を取得する前に、タイムアウト期間が経過しました。これは、プールされたすべての接続が使用中で、最大プール サイズに達したために発生した可能性があります。

次のことを試してください。

これは 200 接続でスタックします (タイムアウト後に終了します)。これは、登録されている 100 の接続がすべて閉じられないことが明らかであるためです (デフォルトの接続プール サイズは 100 です)。(テーブルを作成せずにテストしたい場合は、コマンドを完全に削除できることに注意してください。)

私は何が欠けているか、間違っていますか?

0 投票する
1 に答える
305 参照

ruby - Rubyで多くのプロセス間でタスクを分散するにはどうすればよいですか?

データベースから100個のレコードを選択してタスクを実行するRubyデーモンがあります。

高速化するために、通常は同じデーモンの 3 つのインスタンスを作成します。そして、それぞれが mysqlLIMITとを使用して異なるデータを選択しOFFSETます。

問題は、同じデータ レコードに対してタスクが 2 回または 3 回実行される場合があることです。

LIMITしたがって、データベースのみを信頼するだけでは十分ではないと思いますOFFSET... 2つ以上のデーモンが実際に同時に同じデータを収集できる場合があるためです。

どうすれば安全に行うことができますか?2 つのインスタンスを回避して同じデータを選択する

  • デーモン 1 => 1 から 100 までのレコードを選択
  • Daemon 2 => 101 から 200 までのレコードを選択
  • Daemon 3 => 201 から 300 までのレコードを選択
0 投票する
2 に答える
537 参照

sql-server - SQL Server ストアド プロシージャの結果から選択

あるサーバーから別のサーバーに数百のストアド プロシージャを移行しているので、各サーバーで SP を実行し、出力の違いを比較するストアド プロシージャを作成したいと考えました。

これを行うには、通常、次の構文を使用して結果をテーブルに取得します。

次に、それらを結合してカウントを行い、結果が異なる行数を取得します。

ただし、この場合、ストアド プロシージャには が含まれているOpenQueryため、 を に入れようとするexecOpenQuery、クエリは次のエラーで失敗します。

これに対する良い回避策はありますか?または、このプロセスをより迅速に進めるために私ができることについて、何か賢いアイデアを持っている人はいますか? 現時点では、各サーバーで SP を実行し、結果を tmp テーブルにスクリプト化し、比較する必要があるようです。それは悪い解決策のようです!

これを読んでいただきありがとうございます。どんな助けでも大歓迎です!

0 投票する
1 に答える
5949 参照

hibernate - Hibernate でのマネージド セッション スコープと jta セッション スコープ

「Java Persistence with Hibernate」の本を読んでいて、Page#494 で行き詰まりました。設定によって会話を拡張しますが、これはメソッド内でhibernate.current_session_context_class to managed;' ' を使用できないということですか?jta (or javax.jta.UserTransaction)

この仮定は、Page#494 のインターセプター コードを見たときに、ますます強くなっています。インターセプターでは、' session.beginTransaction' を呼び出しています。これは、Hibernate Transaction API を使用してトランザクションを制御していることを意味します。

これは、エンティティが UserTransaction.begin()/commit() を使用してトランザクションを制御できないということですか?

この本のどこかで、UserTransaction を使用してトランザクション境界を制御する場合、Hibernate Transaction API を使用することは想定されていないことを読んだので、私はこれを言っています。

ここで助けが必要です。

0 投票する
1 に答える
4175 参照

sql-server - Sql-Server 2000/5 でテーブル値関数をリモートで実行するにはどうすればよいですか?

リモート サーバー (sql2000) でテーブル値関数を呼び出す必要があるストアド プロシージャ (sql2005) があります。

私のクエリは次のとおりです。

「キャスト」の近くで間違った構文エラーが発生します。この表記でtvfを実行することは可能ですか?どういうわけかopenrowsetを使用する必要がありますか? どんな助けでも大歓迎です。

0 投票する
2 に答える
3457 参照

mysql - 複数の同時接続または同じトランザクション内の異なる接続文字列を使用した接続は現在サポートされていません

私はトランザクションスコープを使用しています。そのトランザクション スコープ内に、mysql データベース接続があります。ただし、以前のトランザクション スコープで新しい [さらに別の] MySQL 接続を開く必要があります。

そうすると、次のエラーが表示されますMultiple simultaneous connections or connections with different connection strings inside the same transaction are not currently supported.

これは、MySQL サーバーが複数の分散トランザクションをサポートしていないためですか? コードで変更する必要があるもの、またはサーバーで変更する必要があるものはありますか?

上記のシナリオを使用し、mysql サーバーではなく SQL Server に対して両方の接続が行われている場合、サポートはありますか?

0 投票する
1 に答える
285 参照

sql-server-2008 - OleDbTransaction を使用して 2 つの異なるデータベースにデータを保存することはできますか?

C# を使用して、 Microsoft SQL ServerOracleOleDbTransactionなどの 2 つの異なるデータベース ベンダーで挿入を実行できますか?

0 投票する
1 に答える
1833 参照

transactions - 2 つの EJB サーバーにわたる分散トランザクション

EJB サーバーでの 2 PC と分散トランザクションに関する記事を読んでいました。それは言います:

2-PC を使用すると、さまざまなサーバーとリソース (データベースや JMS プロバイダーなど) 間でトランザクションを管理できます。2-PC の詳細は、この本の範囲を超えていますが、それをサポートするシステムでは、EJB またはアプリケーション開発者による特別な操作は必要ありません。

独自の環境でトランザクションを管理するだけでなく、EJB サーバーは他のトランザクション システムと連携できます。たとえば、EJB が BankEJB とは異なるアプリケーション サーバーから実際に送信された場合、2 つのアプリケーション サーバーは協力してトランザクションを 1 つの作業単位として管理します。

2 つの異なるマシンでホストされている 2 つのアプリ サーバーで実行されている 2 つの異なるエンタープライズ アプリ (A と B) があるとします。私が使用しているアプリケーション サーバーは、WebLogic と Oracle AS です。2 台の PC/分散トランザクションが 2 台のサーバー間でトランザクションを調整することは可能ですか (ベンダーが異なる場合でも)? 私の質問が明確でない場合は、お知らせください。

0 投票する
2 に答える
9691 参照

jakarta-ee - コンテナ管理対象Beanのトランザクションステータスへのアクセス

コンテナ管理のトランザクションを使用する@Stateless EJBがあります。の「ステータス」にアクセスする方法はありjavax.transaction.UserTransactionますか?つまりUserTransaction.getStatus()、Beanメソッド内を呼び出すのですか?

コンテナ管理のBeanでアクセスUserTransactionが禁止されていることは知っていますが、メソッドにアクセスする他の方法はありますgetStatus()か?