2

お役に立てれば幸いです。

SP 自体を変更せずにストアド プロシージャが SQL Server で実行されていることを確実に検出する方法はありますか?

これが要件です。使用しているコア製品ではこれが許可されていないため、エンタープライズ データ ウェアハウスからレポートを実行しているユーザーを追跡する必要があります。コア製品レポートと、追加した多数の社内レポートの両方が、個々のストアド プロシージャからデータを返します。

レポートが呼び出される製品 Web ページの部分を変更する実際的な方法はありません。また、コア製品レポートのストアド プロシージャも変更できません。(社内のもののそれぞれの開始/終了にロギング行を追加するのは簡単です)。

したがって、私が見つけようとしているのは、SQL Server (2005/2008) で、他のストアド プロシージャが実行されるたびに、それらのストアド プロシージャ自体を変更せずにロギング ストアド プロシージャを実行する方法があるかどうかです。

ローカルであるため、SQL Server インスタンス自体を一般的に制御できます。製品のストアド プロシージャ自体を変更したくないだけです。

アイデアはありますか?「ストアド プロシージャの実行トリガー」のようなものはありますか? カスタム .Net コードをフックできる SQL Server のイベント モデルはありますか? (最初から割引するために、製品の Web ページなどから実行されているレポートを取得するのではなく、SQL Server に変更を加えることを試みたいと考えています)

ありがとう
ございます

4

3 に答える 3

5

SQL Server の初期化時に自動的に実行されるバックグラウンド トレースをセットアップできます。次に、トレースで、トレース ステートメントをテーブルに出力できます。

たとえば、SQL Server プロファイラーを開きます。必要なトレースを作成します。つまり、SP:Starting と必要な列を含めます。また、トレースをテーブルに保存することも選択します。

スクリプトを設定したら、[ファイル]、[エクスポート]、[スクリプト トレース定義] の順に選択します。これにより、トレースを生成する SQL ステートメントが作成されます。

次に、SQL を使用してこのトレースを作成するストアド プロシージャを作成します。マスター データベースに proc をインストールし、起動時に自動的に実行するように SQL Server に指示します。

exec sp_procoption N'sp_MyProc', N'startup', N'true'

SQL Server が再起動するたびに、トレースが自動的に構成され、すべての SP 呼び出しがテーブルに記録されます。

- 編集 -

また、ストアド プロシージャの監視に役立ついくつかの動的管理ビュー (DMV) があることにも注意してください。あなたが興味を持っているかもしれない2つ:

たとえば、sys.dm_exec_procedure_stats は、proc が最後に実行された日時、実行された回数、最長の実行時間などを示します。これらのビューは、現在データベース キャッシュにあるストアド プロシージャにのみ影響することに注意してください。proc がアンロードされている場合は、情報もアンロードされます。

于 2010-05-18T16:06:41.893 に答える
2

確実に使用できるのはSQLプロファイラのみです。使用する実行フックまたは「実行トリガー」はありません。

そうは言っても、プラン キャッシュを間接的に監視することはできますが、100% 確実に監視することはできません。このリンクを参照してください。ただし、OPTION RECOMPILE がある場合は、使用後にキャッシュから削除されます。また、統計はサーバーの起動後にリセットされるため、dmv を実行してキャッシュの内容も確認する必要があります。

それはあなたがどれだけ徹底的にする必要があるかによって異なります...

于 2010-05-18T16:00:02.753 に答える
0

SQL Log Rescue (無料) などのツールを使用して、SQL ログ ファイルを照会 できますhttp://www.red-gate.com/products/SQL_Log_Rescue/index.htm どのストアド プロシージャがいつ実行されたかがわかります. これは、既存のコードを変更する必要がなく、アプリケーションとサーバーのオーバーヘッドを増加させないため、最も簡単な方法です。

于 2010-05-18T16:10:43.887 に答える