数据库MS SQL Server的活动日志

tri*_*ati 13 sql sql-server sql-server-2012

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

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

SMM*_*SMM 8

也许这可以让你在中途.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;
Run Code Online (Sandbox Code Playgroud)

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


The*_*war 7

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

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

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

select * from sys.dm_server_audit_status
Run Code Online (Sandbox Code Playgroud)

如果您尚未启用审核,则可以启用它,如下所示:SQL Server审核简介 ..我不建议启用审核,除非您需要捕获除问题中提到的内容之外的其他内容

2.Default跟踪还捕获创建的表,但是当空间已满时,这会使用翻转文件机制来覆盖最后的文件,所以你可能运气不好(因为你要求三个月的范围),但试试这个:什么我可以从SQL Server默认获取事件信息吗?找出了解默认跟踪提供的所有内容

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

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

select * from fn_dblog(null,null) where [transaction name]='CREATE TABLE'
Run Code Online (Sandbox Code Playgroud)

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


小智 4

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