1

これはばかげた質問のように思えるかもしれませんが、私は今、頭→壁の状況にいます。

私は、SQL Server 2005 データベースが複数の異なるアプリケーションによって更新される大規模な ERP アプリケーションに取り組んでいます。特定のテーブルの削除がどこから発生しているのかを突き止めようとしています。

プロファイラーを使用してみましたが、さまざまな四半期から毎秒データベースに非常に多くのヒットがあるため、誤った SP を特定するのに十分なイベント タイプをフィルター処理できません。また、Profiler は、DDL の変更や Object DROP タイプのアクションを見つけることをより重視しているようです。

私は単に質問に答えようとしています: What Stored Proc. または SQL クエリが原因でテーブル X からレコードが削除されましたか?

どのツールを使用すればよいですか? Trigger based Auditingのようなものを避けたいと思っていました。それとも、Profiler はこの種の調査に最適なツールですか? それとも、サードパーティのツールが唯一の手段ですか?

私はこのトピックに比較的慣れていないため、役立つリンクを提供してください。

4

2 に答える 2

1

プロファイラーで犯人を見つけることは、特にビジー状態のシステムでは、干し草の山から針を見つけるようなものです。edosoft が提案するようなフィルタで見つからない場合は、writes=0 のステートメントを削除し、アプリケーション名でフィルタし、'%select%' のようにテキストデータでフィルタしないで、ノイズを最小限に抑えてみてください。絞り込めるはずです。

本当にやむを得ない場合は、テーブル上のすべてのユーザーに対して削除権限を拒否し、電話が鳴るのを待つことができます。

テーブルで時折 SELECT COUNT(*) をタイムスタンプ付きの作業テーブルに実行し、レコード数の低下を他のアクティビティに関連付けることもできます。

于 2009-02-19T13:30:56.620 に答える
1

これには SQL プロファイラーを使用できますが、結果をフィルター処理する必要があります。DELETE ステートメントを監視するには、"RPC:Starting" および "SP:Starting" イベントを選択し、TextData 列にフィルターを適用します: "TextData LIKE '%DELETE%FROM%'"。

-エドード

于 2009-02-19T11:28:19.050 に答える