如何查找存储过程何时被删除以及谁删除了它?

sri*_*ari 6 sql-server sql-server-2005

实际上,其中一项关键作业在执行时失败了。

在错误消息中发现失败是因为它缺少存储过程。

现在我如何找出存储过程何时受到用户的影响。我如何找出哪个用户执行了此操作以及他何时执行了此操作?

Rem*_*anu 11

你得到管理跟踪:

select * from fn_trace_getinfo(NULL)
where property=2
and traceid = 1
Run Code Online (Sandbox Code Playgroud)

您可以查看对象类型8727 存储过程上的类 47 Object:Deleted Event Class事件的管理跟踪:

select * from fn_trace_gettable('....trc', -1)
where EventClass = 47
and ObjectType=8727
Run Code Online (Sandbox Code Playgroud)

管理跟踪会定期回收并保留大约 4-5 条跟踪,您应该使用仍然存在的最旧 trc 文件的名称。

如果程序很关键,那么 DBA 应该确保只有授权人员才能修改或删除它。它应该对架构更改进行适当的审计。这不是删除程序的人的错,而完全是 DBA 的错。


小智 7

默认情况下无法找到此信息,因为 SQL Server 不支持此信息。如果您的数据库处于完全恢复模式,您可以尝试读取事务日志并查看何时执行 DROP PROCEDURE 语句。不幸的是,没有简单的方法可以做到这一点。

您可以尝试使用一些第三方工具,例如ApexSQL LogQuest Toad,但即使使用这些工具,我也不确定您是否能够找出执行此操作的用户名。

您可以尝试的另一个选择是查看 fn_dblog 函数,看看您是否可以使用它。这里的问题是这个功能没有很好的记录。


Chr*_*ris 0

您应该能够返回事务日志,并至少能够找出该过程何时从数据库中删除。至于用户是谁,您也许可以看到当时登录系统的人是谁,并能够稍微缩小范围。

希望这对一些人有帮助。