Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 确定哪个用户删除了SQL Server数据库?_Sql Server_Database_Sql Server 2005 - Fatal编程技术网

Sql server 确定哪个用户删除了SQL Server数据库?

Sql server 确定哪个用户删除了SQL Server数据库?,sql-server,database,sql-server-2005,Sql Server,Database,Sql Server 2005,我有一个SQL Server 2005数据库已被删除,我需要找出是谁删除了它。有没有办法获得这个用户名 谢谢,马吉坎迪 如果删除后几乎没有活动,则开箱即用的跟踪可能会有所帮助。尝试运行: DECLARE @path varchar(256) SELECT @path = path FROM sys.traces where id = 1 SELECT * FROM fn_trace_gettable(@path, 1) [除了开箱即用的跟踪之外,还有不太为人所知的“黑匣子”跟踪,它对诊断间

我有一个SQL Server 2005数据库已被删除,我需要找出是谁删除了它。有没有办法获得这个用户名


谢谢,马吉坎迪

如果删除后几乎没有活动,则开箱即用的跟踪可能会有所帮助。尝试运行:

DECLARE @path varchar(256)

SELECT @path = path
FROM sys.traces
where id = 1

SELECT *
FROM fn_trace_gettable(@path, 1)

[除了开箱即用的跟踪之外,还有不太为人所知的“黑匣子”跟踪,它对诊断间歇性服务器崩溃非常有用。这篇文章向您展示了如何配置它。]

检索信息的最佳方法是还原最新的备份

现在讨论如何避免将来出现此类问题

首先,确保备份过程正确且频繁地运行。如果是高事务性数据库,则每15分钟或半小时制作一次事务日志。那么你损失最多的就是半小时的工作。练习恢复数据库,直到在压力下轻松恢复为止

在SQLServer2008中,您可以添加DDL触发器(不确定是否可以在2005年这样做),它允许您记录谁对结构进行了更改。这可能值得你花时间研究一下


当dba不在时,不允许两个人以上的管理员访问您的生产数据库-一个dba和一个备份人员。这些人应该加载对数据库结构和代码的所有更改,所有更改都应该编写脚本,首先在QA上检查和测试代码。不应该在prod上运行未经编写的“按裤子的位置运行”代码。

我会首先询问所有拥有Sql Server管理员访问权限的人是否删除了它。

这里是更精确的TSQL

SELECT DatabaseID,NTUserName,HostName,LoginName,StartTime
FROM 
sys.fn_trace_gettable(CONVERT(VARCHAR(150), 
        ( SELECT TOP 1
                    f.[value]
            FROM    sys.fn_trace_getinfo(NULL) f
            WHERE   f.property = 2
        )), DEFAULT) T
JOIN sys.trace_events TE ON T.EventClass = TE.trace_event_id
WHERE TE.trace_event_id =47 AND T.DatabaseName = 'delete'
-- 47 Represents event for deleting objects. 
这可用于知道或不知道数据库/对象名称的事件。结果如下所示:


HLGEM-回答得好,可惜我问的问题不是这样-1+1,这是您在当前问题之前需要问的问题的答案:“我如何防止和/或处理有人删除我的数据库?”…+1:这是一个很好的回答,因为从侧面思考,以确定问题的根本原因,即由于缺乏数据库平台审核和管理过程而导致的失败。@MagicAndi,我回答了您的部分问题,即如何检索信息。我添加了其他信息,因为如果你不做备份,可能无法找回丢失的信息,至少你可以向老板提出避免重复的计划。若你们找不到一个方法来确定是谁做的删除,那个么这可能会挽救你们的工作。有时你给人们提供了他们需要知道或考虑的东西,而不仅仅是他们想要的。1.您没有回答所问的问题,即如何识别首先删除数据库的用户?恢复上次备份将如何做到这一点?2.如果您想回答一个关于防止此问题再次发生的问题,您应该将其作为单独的问题提问,并在您对我的问题的回答中链接到此问题。不管你是否横向思考,你回答的是一个不同的问题;当然,这样做的目的是为具体问题提供答案?+1-谢谢,这非常有用。我刚刚运行了它,它给了我大约2天的备份时间。有办法得到更多吗?什么选项可以控制这些跟踪设置?@mitch:这是一个很棒的技巧。不过,这只是一个很小的痕迹。有什么方法可以将其设置为更大的跟踪吗?@Tapori:我在这里写了一篇关于SQL Server内置跟踪的博客::可以改变黑盒跟踪的大小…如果我要问三个人以上,我还会问DBA为什么有这么多。。。