如何使用SIMPLE恢复模型查找谁从DB中删除了视图

时间:2013-07-29 22:13:37

标签: sql sql-server

我们今天早上发现客户的生产数据库中遗漏了一个视图。从测试副本中恢复它并不是问题,但是我的老板想知道它是如何发生的,以避免将来出现这种情况。

我找到了fn_dblog的一些场景,但无法找到我需要的操作类型。

1 个答案:

答案 0 :(得分:2)

您可以从默认跟踪中捕获丢弃视图事件,假设它们最近发生了:

DECLARE @path NVARCHAR(260);

SELECT 
   @path = REVERSE(SUBSTRING(REVERSE([path]), 
   CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM    sys.traces
WHERE   is_default = 1;

SELECT 
   LoginName,
   HostName,
   StartTime,
   ObjectName
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 47
AND ObjectName = N'MyView';

(顺便说一句,此方法对恢复模型没有任何依赖性;但是您应该知道默认跟踪中的内容最终将推出,因此您不太可能找到谁丢弃了一个对象6个月前它停留多长时间取决于每个实例的很多变量。)