5

SQL Server 2008 R2 を使用して、不透明なアプリケーションをリバース エンジニアリングし、その操作の一部を複製して、大量のデータ ロードを自動化しようとしています。

SQL Server Profiler に移動し、トレースを開始し、GUI 操作を実行し、トレースの結果を確認するだけです。私の問題は、フィルターが期待どおりに機能しないことです。INSERT特に、クエリなど、明らかにデータベースに変更を加えているステートメントであっても、「Writes」列には「0」が表示されることがよくあります。これによりWrites >= 1、私がやりたいようにフィルターを設定することができなくなります。

包括的なトレースを設定し、アプリを実行することで、これがまさに起こっていることを確認しました。事前にテーブルを確認し、操作を実行し、後でテーブルを確認しましたが、間違いなくテーブルに変更が加えられています。INSERTトレースを調べたところ、クエリを示す行を含め、「書き込み」列にゼロ以外の数値を示す行は 1 行もありません。クエリは特別なものではありません...次のようなものです

exec sp_executesql 
    N'INSERT INTO my_table([a], [b], [c]) 
      values(@newA, @newB, @newC)',
    N'@newA int,@newB int,@newC int', @newA=1, @newB=2, @newC=3

(上記にエラーがある場合、それは私のタイプミスです-ステートメントは間違いなくテーブルにレコードを挿入しています)

この動作の鍵は、「書き込み」列の説明にあると確信しています。「イベントに代わってサーバーによって実行された物理ディスク書き込みの数」です。サーバーが書き込みをキャッシュしている可能性があり、それはプロファイラーの範囲外で発生します。私にはわかりませんが、おそらくそれは重要ではありません。

データベースを変更するすべてのステートメントを確実に見つけてログに記録する方法はありますか?

4

1 に答える 1

1

Server Side Traceを試しましたか? また、読み取りと書き込みの文書化にも機能します。これは、正しく読んでいれば、書き込みを文書化したいということです。

于 2013-04-10T21:02:53.337 に答える