【发布时间】:2014-08-21 16:29:52
【问题描述】:
我之前已经修改了一个表,添加了一个列并修改了一个存储过程。
我不记得具体是哪个表和哪个存储过程, sql management studio 中是否有一些关于在特定数据库中进行了哪些更改的日志?
我已经尝试过这里描述的How to see query history in SQL Server Management Studio,但我没有找到对数据库所做的更改
【问题讨论】:
标签: sql-server ssms
我之前已经修改了一个表,添加了一个列并修改了一个存储过程。
我不记得具体是哪个表和哪个存储过程, sql management studio 中是否有一些关于在特定数据库中进行了哪些更改的日志?
我已经尝试过这里描述的How to see query history in SQL Server Management Studio,但我没有找到对数据库所做的更改
【问题讨论】:
标签: sql-server ssms
您可以通过多种方式获取此信息。首先,您可以尝试标准报告 --> 架构更改历史记录。
相关信息来自:
SELECT cat.name AS Category
, b.name AS EventCaptured
, c.name AS ColumnCaptured
FROM fn_trace_geteventinfo(1) AS a
INNER JOIN sys.trace_events AS b
ON a.eventid = b.trace_event_id
INNER JOIN sys.trace_columns AS c
ON a.columnid = c.trace_column_id
INNER JOIN sys.trace_categories AS cat
ON b.category_id = cat.category_id
ORDER BY Category, EventCaptured, ColumnCaptured
或者,查询 sys.traces 以查找默认跟踪的位置并将其输入 fn_trace_gettable,如下所示。
SELECT *
FROM fn_trace_gettable
('C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\log.trc', default)
【讨论】:
您可以使用 Security\Server Audit Specification 并在您的数据库上启用 DATABASE_OBJECT_CHANGE_GROUP 审核。
使用以下参考资料以使用 SQL Server 服务器审核。
【讨论】:
您可以使用 sys.objects 表中的 modify_date 列
SELECT *
FROM SYS.OBJECTS
WHERE Modify_Date BETWEEN <date_of_modification> AND <date_of_modification> + 1
然后你可以尝试缩小范围。
您可以更加具体,只针对表和存储过程运行查询。
SELECT *
FROM SYS.objects
WHERE TYPE IN ('IT', 'S', 'U', 'P', 'PC', 'X')
AND modify_date BETWEEN '10-Jun-2014' AND '11-Jun-2014'
【讨论】:
我为 SSMS 开发了 SSMSBoost 插件,我们在那里有“执行查询历史记录”。所有操作都记录有时间戳、连接信息和执行结果。如果您在安装了 SSMSBoost 的情况下从 SSMS 进行所有更改,这肯定会起作用。如果有人从其他机器执行更改,您将看不到他们,直到他也使用 SSMSBoost 并且您共享执行历史记录。
【讨论】: