5

誰がストアド プロシージャを呼び出したかを特定することはできますか? 以下のクエリを使って実行回数などを特定しているのですが、どのジョブ・トリガー・プロセスが呼び出しているのか特定できません。それについてのアイデアはありますか?

SELECT  
    a.execution_count, OBJECT_NAME(objectid) Name,
    (CASE WHEN a.statement_end_offset = -1 
             THEN LEN(CONVERT(nvarchar(max), b.text)) * 2
             ELSE a.statement_end_offset
     END - a.statement_start_offset) / 2),
    b.dbid, dbname = db_name(b.dbid), b.objectid,
    a.creation_time, a.last_execution_time, a.* 
FROM  
    sys.dm_exec_query_stats a 
CROSS APPLY 
    sys.dm_exec_sql_text(a.sql_handle) AS b
WHERE 
    OBJECT_NAME(objectid) = 'Rebuild_Indexes' 
ORDER BY 
    a.last_execution_time
ESCquery_text = SUBSTRING(b.text,a.statement_start_offset/2,
4

4 に答える 4

3

Adam Machanic のWho is Activeストアド プロシージャを使用します。これにより、アクティブなステートメントに関するあらゆる種類の情報が返されます。これには、ステートメントを起動したユーザーも含まれます。

于 2013-04-22T15:38:54.630 に答える
3

ストアド プロシージャを実行しているユーザーを確認する場合、サーバー側の Trace を作成してSP:Completedイベントをキャプチャする方法があります。このイベント クラスによって提供されるデータは、必要なすべての発信者情報を提供します。

参照: Event Classに関する BOL ドキュメントSP:Completed

于 2013-04-22T12:55:48.080 に答える
2

SQL プロファイラーを起動すると、NT ユーザーのネットワーク ID が表示されます。たまに使用する場合は、サーバー自体でトレース プロファイラーを実行することをお勧めします。または、シンプル リカバリ モードを使用していない場合、答えはトランザクション ログ バックアップにあります。しかし、これを分析したり読んだりするのは簡単ではありません。

于 2013-04-22T12:55:56.717 に答える