2016-04-26 20 views
0

私はMSServerで作業しています。過去30日間、挿入または変更されたデータを取得する特定のテーブルがあります。 私のテーブルには作成日を保存するものは含まれていません。マスターデータベースに何らかのトレースがあるか、何か助けになるものがあるのでしょうか?おかげさまで 過去30日間のレコードを取得するには?

+0

データベースをバックアップしていますか? –

+0

いいえ、私はしませんが、なぜですか? – Imoum

+0

30日前にバックアップした場合は、自動インクリメント列の最大値がどのようになったかを確認できました。次に、この値を現在のテーブルで使用して、必要なレコードに制限することができます。 –

答えて

1

行が追加されたときに表示がない場合は、適切な方法はありません。

+1

私はこれを考えるaswerは可能なコメントです。あなたが望むなら、それを –

+0

@JoeTarasに変換してくださいそれはかなり厳しいものですが、ちょっとです。私はアップフォートは必要ありません。私はそれがコメントか回答かどうか疑問を持ち、後者を使うことに決めました。 –

+0

親愛なる、私はあなたがupvoteをしたいとは思わない。私は単に私の意見を述べた。 –

0

トランザクションログにアクセスし、タイムスタンプでソートされたすべての挿入トランザクションのリストを取得できます。最後の月の最後に挿入された行のタイムスタンプを見つけます。これらは最後に最後に挿入された行の末尾にあなたを(うまくいけば)導きます(より高いIDを持つすべての行があなたが探しているデータになります)。ステップ(多分あなたはあなたの状況に応じて、クエリにいくつかの調整をする必要がある)によって

ステップ:

は、トランザクションを取得します:

declare @TableName sysname 

set @TableName = 'Table_1' 

select [Current LSN], 
[Operation], 
[Transaction ID], 
[Parent Transaction ID], 
[Begin Time], [Transaction Name], 
[Transaction SID] 
from fn_dblog(null, null) 
where [Operation] = 'LOP_BEGIN_XACT' 
and [Transaction ID] 
in 
( 
    -- get transaction id's from your table (inserts) 
    SELECT [Transaction ID] 
    FROM fn_dblog(NULL, NULL) 
    WHERE 
    Operation = 'LOP_INSERT_ROWS' 
    and 
    AllocUnitName LIKE '%' + @TableName + '%' 
) 
order by [Begin Time] ASC 

は、最後のトランザクションを取得します:

SELECT * 
    FROM fn_dblog(NULL, NULL) 
    WHERE Operation = 'LOP_INSERT_ROWS' 
    and [Transaction ID] = 'XXX' -- your transaction id 

In行ログコンテンツ最後の月の最後に挿入された行のデータ値を検索します。今、あなただけの次のWebサイトによると「読める」データに挿入されたデータを変換する必要があります。

http://www.sqlshack.com/reading-sql-server-transaction-log/

今すぐ戻って「読める」のデータに挿入されたデータを変換した後、あなたは関連を見つけることができるはずです先月の最終行があなたのテーブルに挿入されました。そのIDより上位のすべての行が後で挿入されるため、探しているデータが挿入されます。

関連する問題