2011-10-18 9 views
0

私は、自分のWebサイトで(少数のテーブルの追加/更新/削除のような)いくつかのイベントを監査/ログ記録する予定です。私は、データベースのトリガを追加する予定です、私は監査テーブルが多くのデータを持っている可能性があり、そのテーブルに行を挿入する時間がかかるかもしれないと思う。 私の質問は、トリガは非同期で実行されるか、フロントエンドコールが返される前に完了する必要があるかどうかです。データベーストリガー、非同期ですか?

おかげ

+1

可能重複サーバー2005/2008](http://stackoverflow.com/questions/766761/asynchronous-triggers-in-sql-server-2005-2008) –

+0

ええ、ほとんど!!!! – Tippu

+1

_ほとんどの人は愚かだが、それほどではない。他のQはトリガー非同期を作る方法を尋ねていました。これは、トリガーが同期か非同期かを尋ねています。 _answers_には多くのクロスオーバーがありますが、それが別のサブセットの適切なサブセットでない限り(つまり、_question_は同じでなければなりません)、疑問を決して考慮しません。ちょうど私の$ .02。 – paxdiablo

答えて

2

は、ほぼ確実に、そうでない場合、あなたは離れて、原子の全体のポイントを吹きましたので、彼らは同期になります(変更がテーブルを参照することができるアトミックその後、トリガは、あなたの監査証跡ことを意味し、失敗する可能性があります役に立たないです)。

私は非同期トリガーは不可能だと言っているわけではありませんが、私はそれらがあなたに使用されているのを見ることはできません。

テーブルが大きくなってしまうことを心配している場合は、それを処理する他の方法があります。 1つは(たとえば日付などに基づいて)パーティション化されているか、またはそれが使用できない場合、監査行が日付ベースのアーカイブ表に定期的に転送され、その後にメイン表で削除されます。

このように、メインテーブルは最後のN月のデータしか保持せず、他のすべてのデータは他の場所に格納されます。

私は適切な監査テーブルを作成することをお勧めしたい
+0

最も簡単な方法は、SQL Serverの監査機能を有効にすることです。 – TomTom

+0

@TomTom:私が知る限り、これはCDCまたはトリガーを使用した場合と比較して、粗末なものです(フィルタリングなし、システムのログと複製など) – gbn

+0

これは統合されており、開発に手間がかかりませんし、 。 – TomTom

1
  • (S)構造
  • 例: -
  • 監査-ログが経由して管理することができ、古い&新しい値で霊長類の監査テーブルと二次テーブル
  • あなたは場所にアーカイブプロセスを持っている必要があり、適切に管理している場合
  • それはオーバーヘッドすべきではないトリガー
2

Tリガーは常に同期です。それらは明示的に(BEGIN TRANで)または暗黙に(INSERTなどで)取引の一部として実行されます。

ほとんどのアプリケーションでは、ロギングと監査が必須です。ログまたは履歴テーブルへの書き込みがトリガーで失敗すると、親INSERTなども失敗します。

トリガはループだけでひどくコード化された、または電子メールを送信するか、また、使用することができますトリガの代わりにMS Word Spell Checkerまたはcalling web services

を呼び出す長い時間がかかるChange Data Capture

SQLで[非同期トリガの