3

SQL Server 2008 の特定のテーブルに適用されたすべてのトランザクションを取得したいと考えています。

このスクリプトを使用して、テーブルが最後に更新された時刻を見つけました。

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'DBName')
AND OBJECT_ID=OBJECT_ID('tableName')

そのテーブルのすべてのトランザクション (挿入、更新、削除)、日時、および適用されたクエリを知りたいです。

これを行う最善の方法は何ですか?

4

4 に答える 4

2

合理的な時間内にこれを行う唯一の方法は、トランザクションログを読み取って必要な情報を取得できるApexSQL Logなどのサードパーティツールを使用することです (Martin が最初のコメントで述べたように) 。

これが機能するには、データベースが完全復旧モードである必要があることに注意してください。これは、SQL Server が後で再構築できる完全なトランザクションの詳細をログに記録するためです。

もう 1 つのオプションは、文書化されていない fn_dblog 関数の使用方法を調査することですが、これにはさらに時間がかかり、切り離されたログやトランザクション ログのバックアップを読み取ることができなくなります。

于 2013-09-17T13:05:09.743 に答える
0

トランザクションログからこの情報を遡及的に抽出しようとするよりも、このニーズに合わせて監査を設定する方がはるかに優れています。

Enterprise Editionを使用している場合は、組み込みのSQL Server監査機能を使用できます。それ以外の場合は、トリガーを介して目的の情報をログに記録するのは比較的簡単です。

于 2011-10-16T13:59:49.710 に答える