2016-09-19 21 views
12

私は100以上のテーブルを持つデータベースを持っています。私は既存のテーブルにカラムを追加し続けています(必要な場合)。新しいテーブルもいくつか追加しました。データベースのアクティビティログMS SQL Server

ここ3ヶ月間に行った変更を確認したいと思います。 MS SQL Server 2012に特定のデータベースの変更履歴を記録するアクティビティログはありますか?

+0

SQLソースコントロール? – ManOnAMission

+0

@ManOnAMissionどのように? – user6594294

+1

これはdba.stackexchange.com –

答えて

3

過去に行ったすべてのアクティビティを確認するには、MSSQL Auditを使用できます。いつでも変更を追跡するための最良の方法です。

あなたが監査を有効にしている1.If

、あなたが追跡することができます。.. https://msdn.microsoft.com/en-us/library/cc280386.aspx

+0

に投稿された方が良いでしょう。MSSQL Auditが有効かどうかはどのように分かりますか?またはこれは私にそれを有効にせずにすべてのレコードを与えるでしょう – user6594294

+0

アクティビティを記録するように監査を有効にする必要があります。監査が有効でない場合、オブジェクトエクスプローラでチェックすることができます。 –

+0

は、オブジェクトエクスプローラのセキュリティの下で新しい監査を作成し、有効にしました。私はそこにデモ・データベース、表を作成しました。新しく作成された監査を右クリックしてログを表示しましたが、1つのエントリを表示するだけのものはありませんでした。監査セッションの変更 – user6594294

7

は今、あなたのオプションは、限られているあなたは、彼らは今、あなたを助けるかどうかを確認するも、以下試すことができ、今後チェックしてください変更

は、確認するにはあなたが監査を有効にしている場合は、クエリの下に使用することができます。..

select * from sys.dm_server_audit_status 

あなたが監査を有効にしていない場合は、この次、それを有効にすることができます:An Introduction to SQL Server Audit ..私はいないだろうしエナブをお勧めしますあなたの質問に記載されているもの以外のものをキャプチャする必要がない場合は、

2.Defaultトレースは作成されたテーブルもキャプチャしますが、スペースがいっぱいになると最後のファイルを上書きするために使用します。あなたが3ヶ月の範囲を求めているので)、これを試してみてください:What event information can I get by default from SQL Server?デフォルトトレースで提供されるすべてのものを知るには

私はこのオプションを使用して、それらをバックアップしますテーブルの変更を確認するだけでよいので、ロールアップのタイミングに応じてファイルを変更できます。

3.最終的に1つのオプションは、Tlogをクエリすることです。

select * from fn_dblog(null,null) where [transaction name]='CREATE TABLE' 

上記TLOGオプションを使用すると、3カ月以上TLOGのバックアップを持っており、また、あなたはおそらくこれは、あなたが途中で取得することができ、それらを

+0

私の場合は役に立たない – user6594294

6

を復元する必要がある場合にのみ機能します。 sys.objectsには作成日と変更日がありますが、残念ながらsys.columnsはありません。ただし、追加された最新の列はcolumn_idsの方が高くなります。私はあなたが簡単に削除された列を選ぶことができるだろうとは知らない。列の変更以外の変更は、変更日に反映されることに注意してください。

select s.name [schema], o.name [table], o.modify_date [table_modify_date], c.column_id, c.name 
from sys.schemas s 
join sys.objects o on o.schema_id = s.schema_id 
left join sys.columns c on c.object_id = o.object_id 
where o.type = 'U' --user tables only 
and  o.modify_date >= dateadd(M,-3, getdate()) 
order by s.name, o.name, column_id; 

この監査を容易にするため、将来的にあなたがあなたの変更を管理するためにSSDTデータプロジェクトのようなものを使用する場合、テーブルまたはソースコントロール内のすべてのスキーマ変更をログに記録しますDDLトリガを作成することができます。

1

あなたはDDLトリガを使用することができます。

CREATE TRIGGER ColumnChanges 
ON DATABASE 
FOR ALTER_TABLE 
AS 
DECLARE @data XML 
SET @data = EVENTDATA() 
INSERT alter_table_log 
    (PostTime, DB_User, Event, TSQL) 
    VALUES 
    (GETDATE(), 
    CONVERT(nvarchar(100), CURRENT_USER), 
    @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'), 
    @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)')) ; 
GO 
0

は、SQL Server Management Studioのからの「スクリプトの生成...」タスクのオプションを使用してメタデータ定義のスナップショットを取ります。

enter image description here

店舗名、現在の日付を参照するフォルダに生成されたスクリプトファイル。これが複数回実行されると、WinDiffを使用して任意の2つのスナップショット間で行われたデータベースの変更を強調表示することができます。時間ベースの比較がより有益であるように、「スクリプトの生成」オプションを慎重かつ一貫して選択してください。

enter image description here

は、このドロップダウンであなたに興味かもしれないいくつかの報告があります。

1

あなたはDB上の右クリックメニューからレポートを実行することができます。または、必要な情報だけでカスタムレポートを作成することもできます。

私のスキーマレポートは2011年9月3日にのみ戻っていますが、毎日多くの更新を含む60以上の列を持つ1000以上の表があります。あなたはさらに後退するかもしれません。

1

バックアップを3か月前に行っている場合は、バックアップを別の名前または別のサーバーに復元し、サードパーティのツール(Visual Studio、Devart Schema Compareなど)でスキーマ比較を実行できます。

それ以外の場合は、Gameiswarなどの説明のように必要になる前に先に設定することが唯一の方法です。

関連する問題