-4

SQL Server 2008 R2 と SSAS および SSIS を使用しています。

OLTP データベースから毎日いっぱいになるステージ データベースを作成します。

そして、データクレンジングと統合データ(ETL)の後、ほとんどの場合、データをに転送しDataWarehouseます。

今私がする必要があるのは、OLTP データベースで追跡を変更する方法です。

解決策について知っていますTrigger(OLTPデータベースのすべてのテーブルでトリガーを起動し、トリガー内の挿入および削除されたテーブルから挿入/削除/更新されたデータをログに記録できます)

しかし、私の OLTP データベースは非常に大きく (約 80,000,000 レコード)、トリガーを作成するとビジネスが遅くなります。

このサイトから次のようなクエリを見つけました:

SELECT 
*
FROM 
sys.fn_dblog(NULL,NULL)

ファイルからのすべてのレコードを表示しLDFます。

そして、LDFファイルを読み取ってから、ApexSQLのようなコマンド(挿入/更新/削除)コマンドを抽出できるサードパーティのソフトウェアをいくつか見つけました

このサイトで 1 つの質問を見つけました SQL Server 2008 でトランザクション ログを表示する方法

最後に、あるサードパーティが LDF ファイルからこのコマンドを抽出できる場合、なぜそれを抽出できないのでしょうか?!?

一方、ステージデータベースを変更するには、OLTP データベースで Alter Table や Alter Field などの DDL コマンドを見つける必要があります。

そして、LDFファイルから削除された行を元に戻すことができるこのリンクを見つけました。

4

3 に答える 3

3

Kalen Delaney の SQL Server xxx Internals book で説明されている sys.fn_dblog() 関数を使用して、ログ全体をダンプできます。

-- Use adventure works
USE AdventureWorks2012;
go

-- Dump (ins, del, upd) rows
SELECT *
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation IN ('LOP_DELETE_ROWS', 'LOP_INSERT_ROWS','LOP_MODIFY_ROW');
go

ただし、挿入および削除されたデータを含むバイナリ フィールドです。また、更新には部分的なデータのみが含まれる場合があります。

私はこれについて多くの研究をしませんでした...

ただし、固定データが最初に行に格納され、その後に可変長データが格納されることは誰もが知っています。内部の本を参照してください。バイナリ BLOB の各部分を解析する必要があります。これは単純なデータ用であり、特別なページ タイプではありません。

修正された例として、それを行うだけで盗品を取り上げているこのブログ記事を確認してください。

任意のテーブルに対して動的に実行したい場合は、研究に時間を費やした会社から商用オフザシェルフ (COTS) 製品を購入してください。

于 2013-09-05T18:50:18.623 に答える
3

上記の回答はトランザクション ログの見方を教えてくれますが、トランザクション ログの解析はテーブル変更の適切な監査証跡ではないという JNK の意見に同意します。

それはすべて、保持したい監査データの量と、監査によって失われる速度に依存します。データの保持期間を忘れないでください。

1 -テーブル レベルとデータベース レベルの両方でのトリガー ベースの監査は正常に機能します。これに関するプレゼンテーションについては、私のブログを参照してください。

ただし、多数の変更があるテーブルの監査は実用的ではない可能性があり、データをまったく使用しない可能性があります。保持期間が重要です。

2 - SQL Server に組み込まれているものを使用する場合は、Change Data Capture機能をご覧ください。これは、ログ ファイルを定期的な SQL エージェント ジョブとして読み取ることに基づいています。したがって、各イベントのトリガー ファイアはありません。何かが起こってから起こるまでにはタイムラグがあります。

3 - レコードがいつ誰によって挿入または更新されたかを確認するだけの場合は、データ ウェアハウスを変更しているカスタム ETL コードで確認できます。それらのフィールドをテーブルに追加し、コードでそれらを更新するだけです。

これらの提案により、実際に非常に面倒なトランザクション ログを読む必要がなくなることを願っています。

ジョン

于 2013-09-05T19:00:25.407 に答える