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
(上記にエラーがある場合、それは私のタイプミスです-ステートメントは間違いなくテーブルにレコードを挿入しています)
この動作の鍵は、「書き込み」列の説明にあると確信しています。「イベントに代わってサーバーによって実行された物理ディスク書き込みの数」です。サーバーが書き込みをキャッシュしている可能性があり、それはプロファイラーの範囲外で発生します。私にはわかりませんが、おそらくそれは重要ではありません。
データベースを変更するすべてのステートメントを確実に見つけてログに記録する方法はありますか?