私は、自分のWebサイトで(少数のテーブルの追加/更新/削除のような)いくつかのイベントを監査/ログ記録する予定です。私は、データベースのトリガを追加する予定です、私は監査テーブルが多くのデータを持っている可能性があり、そのテーブルに行を挿入する時間がかかるかもしれないと思う。 私の質問は、トリガは非同期で実行されるか、フロントエンドコールが返される前に完了する必要があるかどうかです。データベーストリガー、非同期ですか?
おかげ
は私は、自分のWebサイトで(少数のテーブルの追加/更新/削除のような)いくつかのイベントを監査/ログ記録する予定です。私は、データベースのトリガを追加する予定です、私は監査テーブルが多くのデータを持っている可能性があり、そのテーブルに行を挿入する時間がかかるかもしれないと思う。 私の質問は、トリガは非同期で実行されるか、フロントエンドコールが返される前に完了する必要があるかどうかです。データベーストリガー、非同期ですか?
おかげ
はは、ほぼ確実に、そうでない場合、あなたは離れて、原子の全体のポイントを吹きましたので、彼らは同期になります(変更がテーブルを参照することができるアトミックその後、トリガは、あなたの監査証跡ことを意味し、失敗する可能性があります役に立たないです)。
私は非同期トリガーは不可能だと言っているわけではありませんが、私はそれらがあなたに使用されているのを見ることはできません。
テーブルが大きくなってしまうことを心配している場合は、それを処理する他の方法があります。 1つは(たとえば日付などに基づいて)パーティション化されているか、またはそれが使用できない場合、監査行が日付ベースのアーカイブ表に定期的に転送され、その後にメイン表で削除されます。
このように、メインテーブルは最後のN
月のデータしか保持せず、他のすべてのデータは他の場所に格納されます。
Tリガーは常に同期です。それらは明示的に(BEGIN TRAN
で)または暗黙に(INSERTなどで)取引の一部として実行されます。
ほとんどのアプリケーションでは、ロギングと監査が必須です。ログまたは履歴テーブルへの書き込みがトリガーで失敗すると、親INSERTなども失敗します。
トリガはループだけでひどくコード化された、または電子メールを送信するか、また、使用することができますトリガの代わりにMS Word Spell Checkerまたはcalling web services
を呼び出す長い時間がかかるChange Data Capture
SQLで[非同期トリガの
可能重複サーバー2005/2008](http://stackoverflow.com/questions/766761/asynchronous-triggers-in-sql-server-2005-2008) –
ええ、ほとんど!!!! – Tippu
_ほとんどの人は愚かだが、それほどではない。他のQはトリガー非同期を作る方法を尋ねていました。これは、トリガーが同期か非同期かを尋ねています。 _answers_には多くのクロスオーバーがありますが、それが別のサブセットの適切なサブセットでない限り(つまり、_question_は同じでなければなりません)、疑問を決して考慮しません。ちょうど私の$ .02。 – paxdiablo