数据库MS SQL Server的活动日志

时间:2016-09-19 08:24:19

标签: sql sql-server sql-server-2012

我有一个包含一百多个表的数据库。我不断向现有表添加列(如果需要),我还添加了几个新表。

现在我想查看过去3个月内我做了哪些更改。 MS SQL Server 2012中是否有针对该特定数据库的活动日志来跟踪更改。

8 个答案:

答案 0 :(得分:7)

现在,你的选择是有限的,你可以在下面尝试,并检查他们是否对你有所帮助,现在......

1.如果您启用了审核,则可以跟踪更改

要检查,如果您启用了审核,则可以使用以下查询..

select * from sys.dm_server_audit_status

如果您尚未启用审核,则可以按照以下方式启用审核:An Introduction to SQL Server Audit ..我不建议启用审核,除非您需要捕获除问题中提到的内容之外的其他内容

2.Default trace还捕获创建的表,但是当空间已满时,这会使用翻转文件机制来覆盖最后的文件,所以你可能运气不好(因为你要求三个月的范围),但试试这个:What event information can I get by default from SQL Server?来了解默认跟踪

提供的所有内容

我会使用此选项并尝试备份这些文件,具体取决于它们汇总的时间(因为您只需要检查表格更改)

3.最后,最后一个选项是查询Tlog

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

上述Tlog选项仅在您拥有超过三个月的Tlog备份并且还需要还原它们时才有效

答案 1 :(得分:7)

也许这可以让你在中途。 sys.objects已创建和修改日期,但遗憾的是sys.columns没有。但是,添加的最新列将具有更高的column_id。我不知道您可以轻松地选择已删除的列。请注意,修改日期可以反映列更改以外的更改。

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;

为了在将来更轻松地进行此审计,您可以创建一个DDL触发器,如果​​您使用类似SSDT数据项目的内容来管理更改,则会将所有架构更改记录到表或源代码管理中。

答案 2 :(得分:3)

要检查过去所有活动,您可以使用MSSQL Audit。它是随时跟踪任何变化的最佳方式。请检查 https://msdn.microsoft.com/en-us/library/cc280386.aspx

答案 3 :(得分:3)

您可以从数据库上的右键菜单运行报告:

enter image description here

有几个报告可能会让您对此下拉列表感兴趣。或者您可以创建一个仅包含所需信息的自定义报告。

我的架构报告只能追溯到2016年9月3日,但我有1000多个表,其中包含60多列,每天都有许多更新。你的可能会更进一步。

答案 4 :(得分: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  

答案 5 :(得分:1)

如果你有任何备份可以追溯到3个月,比如在磁带上,你可以将备份恢复为另一个名称或另一个服务器,然后通过第三方工具运行架构比较 - Visual Studio,Devart Schema Compare等。

否则,如Gameiswar和其他人所描述的那样,在你需要它们之前抢先设置机制是唯一的方法。

答案 6 :(得分:0)

通过"生成脚本...&#34>拍摄元数据定义的快照。 SQL Server Management Studio中的“任务”选项。

enter image description here

将生成的脚本文件存储在名称引用当前日期的文件夹中。一旦完成此操作,WinDiff可用于突出显示任意两个快照之间所做的数据库更改。选择"生成脚本"谨慎而一致的选择,以便基于时间的比较更有益。

答案 7 :(得分:0)

此查询将提供创建和修改存储过程的最后日期:

select name,create_date,modify_date
from sys.procedures
order by modify_date desc