問題タブ [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.
sql - Oracle 分散データベースで LOB を処理する最良の方法
Oracle dblink を作成すると、ターゲット テーブルの LOB 列に直接アクセスできなくなります。
たとえば、次のように dblink を作成します。
この後、次のようなことができます:
列が LOB の場合を除き、次のエラーが発生します。
これは文書化された制限です。
同じページでは、値をローカル テーブルにフェッチすることを提案していますが、それは...ちょっと面倒です。
他のアイデアはありますか?
database - 2 フェーズ コミットは最後の 1 秒の失敗をどのように防ぎますか?
分散トランザクション全体で 2 フェーズ コミットがどのように機能するかを調べています。フェーズの最後の部分で、トランザクション コーディネーターが各ノードにコミットする準備ができているかどうかを尋ねることは、私の理解です。全員が同意した場合は、先に進んでコミットするように指示します。
次の失敗を防ぐものは何ですか?
- すべてのノードは、コミットする準備ができていると応答します
- トランザクション コーディネーターは「先に進んでコミットする」ように指示しますが、このメッセージを受け取る前にノードの 1 つがクラッシュします。
- 他のすべてのノードは正常にコミットされますが、分散トランザクションが破損しています
- クラッシュしたノードが戻ってきたとき、そのトランザクションはロールバックされていると私は理解しています (コミットメッセージを受け取っていないため)
各ノードは、分散トランザクションについて何も知らない通常のデータベースを実行していると想定しています。私は何を取りこぼしたか?
sql-server-2005 - リンクサーバー間の認証を構成するにはどうすればよいですか?
sp_addlinkedserverを使用してリンクされた2つのリンクされたSQLServer間で分散トランザクションを実行できるという概念実証をテストしようとしています。名前はServer1とServer2で、どちらもデフォルトのインスタンスで実行されます。各サーバーは、それぞれソースと宛先の単一のデータベースを保持し、宛先データベースは、出力と呼ばれる単一のテーブルを保持します。
OUTPUTテーブルの構造は次のとおりです。
Server1から、sp_addlinkedserver'Server2'を呼び出して2つのデータベースをリンクし、次のクエリを実行して、リンクが実際に機能することをテストしようとしました。
次の例外が返されます。
ログインマッピングが存在しないため、リモートサーバーへのアクセスが拒否されます。
十分に公平なので、Server1からsp_addlinkedsrvlogin'Server2'を実行します。これは、ドキュメントによると、クエリをリモートで(つまり、Server1から)実行するユーザーのユーザー資格情報を取得し、それらの資格情報をServer2に適用する必要があると述べています。これは、Windows認証を使用してServer1に接続しているため、Windows資格情報がServer2にも適用されることを意味します。
これで、例外メッセージは次のように変わります。
ユーザー'NTAUTHORITY \ANONYMOUSLOGON'のログインに失敗しました。
この例外をグーグルで検索して、私は正しい方向に私を向ける有用なものを何も思いつきませんでした。私は何が欠けていますか?[ログインがまったく失敗した場合]例外として、匿名のログオン資格情報ではなく、 Windows資格情報を参照することを期待します。
リンク自体が機能するようになると、分散トランザクション自体はかなり単純なものになるはずです-ドキュメントは、DTCサービスがServer1で実行されていること、およびトランザクションされるクエリがServer1で実行されていることを確認する必要があることを示していますリンク全体:
- 分散トランザクションを初期化する前に、SETXACT_ABORTONを含めます
- BEGINTRANSACTIONの代わりにBEGINDISTRIBUTEDTRANSACTIONを使用します
- Server2上のSQLServerのデフォルト以外のインスタンスを参照する場合は、クエリ内のServer2という名前のインスタンスを[Server2\InstanceName]に置き換えます。
私の質問は次のとおりです。
- このログインの問題を回避するにはどうすればよいですか?sp_addlinkedsrvloginストアドプロシージャだけではうまくいかないようです。
- ドキュメントが示すように、分散トランザクションを実行するのと同じくらい簡単ですか?
TIA
sql-server - 分散トランザクションで CATCH ブロックをバイパスするチェック制約
次のような分散トランザクションを実行する MSSSQL ストアド プロシージャがあります。
これはうまくいきます。
この 3 番目の挿入ステートメントを追加すると、次のようになります。
...正しく失敗します-トランザクションはリモートサーバーでロールバックされ、制御がCATCHブロックに渡され、エラーに関する情報が取得されます(「エラー」をintに変換できません)。
しかし、この挿入ステートメントを追加すると:
..そして、id 列の値 > 0 を要求するリモート テーブルにチェック制約があると、期待どおりに動作しません。トランザクションはロールバックしますが、制御はcatchブロックに転送されません。代わりに、実行が終了し、これが出力ウィンドウに出力されます。
なんで?これらのエラーをキャッチ ブログに記録する必要があります。
c# - WCFを使用した分散トランザクション
基本アーキテクチャ:それぞれが同じWCFサービスをホストするn個の物理ボックスが、ロードバランサーを開始しました。トランザクションをサポートしない単一のデータベースインフラストラクチャにヒットする各ボックス-質問しないでください:(
したがって、私のアプリのデータアクセス層では、分散トランザクションのいくつかの方法が必要です。私のオプションは何ですか?
私のシステムのクライアントは、基本的なWebサービス(BasicHttpBinding)と光沢のある新しいWCFクライアント(NetTcpBindingまたはNetNamedPipeBinding)を使用して通信するレガシーアプリになることに注意してください。
編集1
たとえば、物理ボックス1のWCFレイヤーへの単一の呼び出しがあります(例:EditEntity(...))。この呼び出しにより、データベースへの2回の書き込みがトリガーされます。最初の書き込みの後、別のクライアントが、2番目の物理ボックス上のWCFサービスの2番目のインスタンスで同じエンティティに対してEditEntity(...)を呼び出します。2番目のボックスで、この特定のエンティティのトランザクションがすでに実行されていることをどのように知ることができますか?
ありがとう。
asp-classic - .NET Web サービスを使用するための VB-ASP アプリケーションのオプションは何ですか?
.net Web サービスを使用することが予想される従来の ASP アプリケーションがあります。このようなシナリオに対して、ASP はどのようなサポートを提供しますか?
ページの最初にトランザクション属性をサポートする VB スクリプトを覚えています。トランザクションを使用して Web サービス呼び出しも含めることはできますか?
任意のポインタをいただければ幸いです。ありがとう
パリトッシュ
transactions - MSDTC (分散トランザクション コーディネーター) の初回起動が遅い
非常に単純な分散トランザクションは、最初の実行で完了するまでにかなりの時間 (3 ~ 4 秒) かかることに気付きました。しかし、同じトランザクション スコープが再度呼び出されると、はるかに高速になります (30 ミリ秒)。MSDTC は 1 時間後にスリープ状態になるようです。1 時間が経過すると、次のトランザクションの実行に 3 ~ 4 秒かかります。
サイトのトラフィックはそれほど多くないと思うので、個々の取引の間に何時間もかかる可能性があります。
おそらくこれは、MSDTC サービスが手動で開始するように設定されているためだと思いましたが、MSDTC サービスが両方とも自動的に実行されていることを確認しました。
どこかにレジストリ設定があると思いますが、MSDN で何かを見つけることができませんでした。
ありがとうございました!
c# - MSDTC を有効にすることのセキュリティ リスク
MSDTC は既定で無効になっています (windows 2003 以降)。.Net C# からの分散トランザクションを必要とする開発中のアプリケーションで有効にしたいと考えています。
それを有効にすることでセキュリティ上の問題があるとは思いませんが、SO は DTC を有効にすることによるセキュリティの問題を知っていますか?
乾杯
オリー
sql - Oracle10.2の動作がおかしい。それとも私ですか
次のクエリを確認してください。SQLは見た目ほど悪くはありません。基本的に、ファクトテーブルといくつかのディメンションテーブルへのいくつかの単純な結合があります。次に、エイリアスACCOUNTS-DIM-DEPを指定して、派生テーブルに結合します。
ユーザーは、WebI(ビジネスインテリジェンス)レポートのフィルターに複数のCOST CENTERが含まれているため、「IN」に複数の値が含まれるSQLが生成されると、次のエラーが返されると不満を漏らしていました。
それ以外の場合、単一のCOST CENTERの場合、レポートは正常に機能しました。興味深いのは、次の結合条件(私には無関係に見える)がSQLに悪影響を及ぼしていることに気づいたことです。
ここでの問題は、左側の列accounts_dim_dep.account_idがデータベースでcharcharとして定義され、右側の列dw_mgr.fa_trans_fct.depreciation_account_idが数値として定義されていることです。
結合条件を変更して数値をvarcharに変換したとき...
... SQLは、フィルターで指定されているコストセンターの数に関係なく機能します。
一見無関係に見える1つの列の型の不一致が、INリストで複数のコストセンターを指定できるかどうかにどのように影響するかを知りたいです。
sql - ストアド プロシージャ内のループ内トランザクション
ローカル データベースのレコードを使用して、リモート サーバー上の多数のアイテムを更新する手順に取り組んでいます。これが疑似コードです。
どれだけ最適化しても、ルーチンには時間がかかるため、すべてを 1 つのトランザクションとして処理することは望ましくありません。アイテムは処理後にフラグが立てられるため、処理が中断された場合でも中断したところから再開できるはずです。
ループの内容 (「アイテムを処理する」) を begin/commit tran でラップしてもうまくいきません... ステートメント全体が
単一のトランザクションとして扱われます。各アイテムを完全な個別のトランザクションとして処理するにはどうすればよいですか?
これらを「非トランザクション更新」として実行したいのですが、そのオプションは (私の知る限り) 2008 年にしか利用できないことに注意してください。