Sql 如何使用简单恢复模型查找从数据库中删除视图的用户

Sql 如何使用简单恢复模型查找从数据库中删除视图的用户,sql,sql-server,Sql,Sql Server,我们今天早上发现,客户的生产数据库中缺少一个视图。从测试副本中恢复它并不是问题,但我的老板想知道它是如何发生的,以避免将来出现这种情况 我找到了fn\u dblog的一些场景,但无法找到我需要的操作类型。您可以从默认跟踪捕获下拉视图事件,假设它们最近发生: DECLARE @path NVARCHAR(260); SELECT @path = REVERSE(SUBSTRING(REVERSE([path]), CHARINDEX(CHAR(92), REVERSE([path

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


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

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

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

您能解释一下为什么路径没有使用默认格式吗?请从sys.traces中选择@path=[path],其中是\u default=1。@AlexanderFedorenko,因为您想从序列中的第一个文件log.trc开始,而不是从当前文件开始。这确保您捕获生成的所有活动。。。