1

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

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

4

1 回答 1

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 个月前谁丢弃了对象。多久它的存在取决于每个实例的许​​多变量。)

于 2013-07-29T22:23:06.157 回答