問題タブ [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 投票する
2 に答える
3361 参照

sql-server - カスケード削除を実行するネストされた SQL Server トランザクション

DepartmentID 列を持つ Companies というテーブルがあるとします。EmployeeID 列を持つ Departaments テーブルもあります。もちろん、Employee テーブルもあります。問題は、会社を削除したいので、最初にすべての部門のすべての従業員を削除し、次に会社内のすべての部門を削除する必要があることです。カスケード削除はオプションではないため、ネストされたトランザクションを使用したいと考えています。私はSQLが初めてなので、助けていただければ幸いです。

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

oracle - Oracleスキーマの更新をトランザクションでラップします

データベーススキーマを定期的に更新するプログラムがあります。場合によっては、DDLステートメントの1つが失敗することがあります。失敗した場合は、すべての変更をロールバックしたいと思います。次のようなトランザクションで更新をラップします。

実行中に、ステートメントの1つが失敗した場合、COMMITの代わりにROLLBACKを実行します。これはSQLServerではうまく機能しますが、Oracleでは望ましい効果がありません。Oracleは、各DDLステートメントの後に暗黙のCOMMITを実行するようです。

この暗黙のコミットをオフにする方法はありますか?

0 投票する
4 に答える
2593 参照

sql - データベースでトランザクションを使用する際の問題は何ですか?

この投稿から。明らかな問題の 1 つは、スケーラビリティ/パフォーマンスです。トランザクションの使用が引き起こす他の問題は何ですか?

問題には、長時間実行されるトランザクションと短時間実行されるトランザクションの 2 つのセットがあると言えますか? はいの場合、それらをどのように定義しますか?

編集: デッドロックは別の問題ですが、アプリケーション ドメインによっては、データの不整合がさらに悪化する可能性があります。トランザクションに値するドメイン (標準的な例を使用する銀行業) を想定すると、デッドロックの可能性は、トランザクションの使用に関する問題ではなく、データの一貫性を確保するために支払うコストのようなものですか? それとも同意しませんか? もしそうなら、デッドロックのないデータの一貫性を確保するために、他にどのようなソリューションを使用しますか?

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

java - JPA マルチトランザクションマネージャー

1 つの applicationContext.xml ファイルがあり、Spring ミドルウェア カスタム アプリケーションで構成された 2 つの org.springframework.orm.jpa.JpaTransactionManager (それぞれが独自の永続ユニット、異なるデータベースを持つ) があります。

TransactionStatus のコミット、保存、およびロールバックをいじらないように、アノテーション ベースのトランザクション (@Transactional) を使用したいと考えています。

同僚は、複数のトランザクション マネージャーがあると、コンテキスト ファイルが正しく構成されていても、これを行うと何かが混乱すると言っていました (参照は正しい永続化ユニットに移動します)。誰か問題を見たことがありますか?


あなたの構成では、2 つのトランザクション マネージャーがありますか? txManager1 と txManager2 はありますか?

それが、トランザクション マネージャーである 2 つの異なる Spring Bean である JPA で私が持っているものです。

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

sql - 挿入クエリが分散トランザクションに登録されないようにするにはどうすればよいですか?

リンク サーバーテーブルに行を挿入するために、ストアド プロシージャ内に SQL 挿入クエリがあります。

ストアド プロシージャは親トランザクション内で呼び出されるため、この Insert ステートメントは DTC を使用してリンク サーバーに行を挿入しようとします。

DTCの関与は避けたい。

Insert SQLステートメントがトランザクションスコープを無視するために(ヒントのように)それを行う方法はありますか?

0 投票する
5 に答える
334 参照

sql - トランザクションがメリットよりも負担になるのはいつですか?

トランザクション プログラミングは、今日の現代の開発では欠かせないものです。同時実行性とフォールト トレランスは、アプリケーションの寿命にとって重要であり、当然のことながら、トランザクション ロジックは実装が容易になりました。ただし、アプリケーションが成長するにつれて、トランザクション コードはアプリケーションのスケーラビリティに対してますます負担になる傾向があるようです。また、分散トランザクションとミラーリングされたデータ セットにブリッジすると、問題が非常に複雑になり始めます。データ サイズやアプリケーションの複雑さの点で、トランザクションが頻繁に問題の原因になり始めている点 (タイムアウト、デッドロック、ミッション クリティカルなコードでのパフォーマンスの問題など) は、修正やトラブルシューティングがより面倒であることに興味があります。または、それ自体がよりフォールト トレラントなデータ モデルを設計するよりも回避策を講じる必要があります。または他の手段を使用してデータの整合性を確保します。また、これらの影響を最小限に抑えたり、標準的なトランザクション ロジックを時代遅れにしたり、問題にならないようにしたりするのに役立つ設計パターンは何ですか?

--

編集:これまでのところ、妥当な品質の回答がいくつかありますが、追加の創造性を刺激しようとするために聞いたことのいくつかを取り上げるために、自分で回答を投稿すると思います。私が得ている回答のほとんどは、問題に対する悲観的な見方です。

もう 1 つの重要な注意点は、すべてのデッドロックが不十分なコード化された手順の結果であるとは限らないということです。場合によっては、異なる順序で類似のリソースに依存するミッション クリティカルな操作や、互いにステップする異なるクエリの複雑な結合があります。これは避けられない問題のように思えることもありますが、私はワークフローの再構築に参加して、この問題が発生する可能性が低い実行順序を容易にしています。

0 投票する
6 に答える
42548 参照

sql-server - SQL Server sys.databases log_reuse_wait の質問

SQL Server 2005 トランザクション ログの急速な増大を調査していたときに、sys.databases の "log_reuse_wait" 列が 0 に設定されている場合、トランザクション ログが正しく切り捨てられるだけであることがわかりました。これは、トランザクション ログが既存の領域を再利用することを妨げているものがないことを意味します。 .

ある日、ログ ファイルをバックアップまたは切り捨てようとしたときに、この列に 4、つまり ACTIVE_TRANSACTION が tempdb で実行されていることがわかりました。次に、DBCC OPENTRAN('tempdb') と sysprocesses の open_tran 列を使用して、開いているトランザクションをチェックしました。その結果、システムのどこにもアクティブなトランザクションが見つかりませんでした。

log_reuse_wait 列の設定は正確ですか? 上記の方法を使用しても検出できないトランザクションが進行中ですか? 明らかな何かが欠けているだけですか?

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

sql-server - ストアドプロシージャで適切にスコープされたトランザクション

独自のトランザクションを管理するストアドプロシージャがあるとします。

このprocを既存のトランザクションから呼び出すと、procは外部トランザクションをロールバックできます。

ストアドプロシージャが外部トランザクションをロールバックしないように、ストアドプロシージャ内でトランザクションを適切にスコープするにはどうすればよいですか?

0 投票する
8 に答える
18390 参照

transactions - EJB3 トランザクションの伝播

次のようなステートレス Bean があります。

通常、クライアントは processObjects(...) を呼び出しますが、これは実際にはエンティティ マネージャーと対話しません。必要なことを実行し、処理するオブジェクトごとに個別に process(...) を呼び出します。process(...) の期間は比較的短いですが、processObjects(...) はすべてを実行するのに非常に長い時間がかかる可能性があります。したがって、オープントランザクションを維持したくありません。独自のトランザクション内で動作するには、個々のプロセス (...) 操作が必要ですこれは、呼び出しごとに新しいトランザクションである必要があります。最後に、クライアントが process(...) を直接呼び出すためのオプションを開いたままにしておきたいと思います。

私はさまざまな種類のトランザクションを試しました: 決して、サポートされていない、サポートされている (processObjects 上で)、必須、新しい (プロセス上で) が必要ですが、merge() が呼び出されるたびに TransactionRequiredException が発生します。

メソッドを2つの異なるBeanに分割することで、機能させることができました。

しかし、これを1つのクラスで達成できるかどうかはまだ興味があります. トランザクション マネージャーは、個々のメソッドにより具体的な注釈が与えられている場合でも、Bean レベルでのみ動作するように見えます。したがって、トランザクションが同じインスタンス内で他のメソッドの呼び出しを開始しないように 1 つのメソッドをマークすると、どのようにマークされていても、トランザクションは作成されませんか?

JBoss Application Server 4.2.1.GA を使用していますが、具体的ではない回答を歓迎/優先します。

0 投票する
3 に答える
1702 参照

c# - 重複を防ぐためのIsolationLevel.RepeatableRead

PayPal即時支払い通知を受信したときに商品(配送保険証券など)を作成することになっているアプリケーションに取り組んでいます。残念ながら、PayPalは重複した通知を送信することがあります。さらに、PayPalから更新を取得するときにWebサービスの更新を同時に実行している別のサードパーティもあります。

これは、関連するデータベーステーブルの基本的な図です。

これが私がやりたいことの基本的な図です:

これを同時に実行する2つ(またはそれ以上)のスレッド(またはプロセスまたはアプリケーション)がある場合、ポリシーが作成されてpolicyIDが割り当てられるまで、最初のスレッドがpolicyIDを持たないときに「パッケージ」行をロックする必要がありますパッケージテーブルに。次に、policyIDがパッケージテーブルに割り当てられた後、ロックが解除されます。この同じコードを呼び出している他のスレッドがパッケージ行を読み取るときに一時停止して、最初にpolicyIDがないことを確認することを願っています。最初のトランザクションのロックが解除されたときに、2番目のトランザクションがpolicyIDが存在することを確認し、ポリシーテーブルに行を挿入せずに戻ることを期待しています。

注:CRUDデータベースの設計により、各ストアドプロシージャには、読み取り(選択)、作成(挿入)、または更新のいずれかが含まれていました。

これはRepeatableReadトランザクション分離の正しい使用法ですか?

ありがとう。