1

私は SQL Server 2014、標準版を持っています。データを削除し、別の主キーの下に再挿入するテーブルがいくつかあります (実際には同じであるシステム内の 2 人のレコードをマージするため)。これらすべての変更は、T-SQL トランザクションで実行されます。

トランザクションとロールバックがどのように機能するかは理解していますが、必要なのは監査/ロールバックです。これは、ユーザーが後でこのトランザクションのみをロールバックする必要がある場合があるためです (データベースまたはテーブル全体を復元する必要はありません)。私は標準版しか持っていないので、「Change Data Capture」はオプションではありません。

私の本当の問題は、この監査情報をどのように保存するかということです。これが1つの作業単位であることを追跡するために一意のキーが必要になると思います。そのため、これらのテーブルの変更はすべて、ユーザーに関する限り同じグループに関連付けられます。しかし、たとえば DELETE WHERE ID = @ID クエリがある場合、必要に応じて後で再挿入できるように、削除する前にこれらの削除済みレコードをすべて保存するにはどうすればよいでしょうか? ある種の大規模なロールバック T-SQL スクリプトを保存しても問題ありませんが、削除しようとしているデータに対して保存して後で実行できる INSERT スクリプトを生成する方法がわかりません。

私はどんなアイデアにもオープンです。必要なのは、複数のテーブルを処理するのに十分な汎用性のあるアーキテクチャと、削除と挿入をロールバックする機能だけです。きれいな監査テーブルを維持するよりも、ロールバック機能に関心があります。

4

1 に答える 1

0

完全なロギングを使用しても、データベース全体を特定の時点にロールバックできますが、特定のトランザクションはロールバックできないため、すぐに使用することはできません。

トランザクションを元に戻すには、何らかのコードを作成する必要がありますが、単純な監査トリガーを使用すると、それを実現するために必要なデータが得られると思います。ここにあなたが始めるための良い記事があります.

https://www.mssqltips.com/sqlservertip/4055/create-a-simple-sql-server-trigger-to-build-an-audit-trail/

于 2016-05-17T17:12:10.337 に答える