SQL Server代理作业失败

时间:2014-09-25 10:45:43

标签: sql

我最近开始支持在SQL Server 2008 R2中维护数据库的项目。

有一个SQL服务器代理DBMR作业在几天之前运行正常。现在它已经失败了,错误"无法找到存储过程' XXX' &#34 ;.当我查看master数据库时,该程序不存在。

有没有办法(日志或事件查看器,如应用程序)从sql server管理工作室我可以找出最近有人删除了SP?

在一个强有力的假设下,没有人会删除任何SP ..我真的很困惑这个工作如何运行到2天并且现在失败了。任何建议/想法的欢迎。谢谢。

3 个答案:

答案 0 :(得分:1)

SELECT * FROM sys.fn_dblog(NULL, NULL); 

使用上述查询,您将能够识别已删除的存储过程详细信息

SELECT CONVERT(varchar(max), SUBSTRING([RowLog Contents 0], 33, LEN([RowLog Contents 0]))) AS Script FROM fn_dblog(NULL, NULL) WHERE Operation = 'LOP_DELETE_ROWS' AND Context = 'LCX_MARK_AS_GHOST' AND AllocUnitName = 'sys.sysobjvalues.clst' AND [TRANSACTION ID] IN (SELECT DISTINCT [TRANSACTION ID] FROM sys.fn_dblog(NULL, NULL) WHERE Context IN ('LCX_NULL') AND Operation IN ('LOP_BEGIN_XACT') AND [Transaction Name] = 'DROPOBJ' AND CONVERT(nvarchar(11), [Begin Time]) BETWEEN '2013/07/31' AND '2015/08/1') AND SUBSTRING([RowLog Contents 0], 33, LEN([RowLog Contents 0])) <> 0;

使用上面粘贴的查询,您可以重新生成已删除的过程

为了安全起见,我已经采用了2013年和2015年之间的开始时间,因此结果集应包括所有已删除的程序(对象)

希望这会对你有所帮助

更多阅读

https://serverfault.com/questions/69056/how-to-find-when-the-stored-procedure-was-deleted-and-who-deleted-it

http://solutioncenter.apexsql.com/recover-a-specific-dropped-object/

http://solutioncenter.apexsql.com/how-to-recover-stored-procedures-functions-and-triggers/

答案 1 :(得分:1)

您可以使用fn_dblog

功能
SELECT 
    Operation,
    [Transaction Id],
    SUSER_SNAME([Transaction SID]),
    [Transaction Name],
    [Begin Time],
    [SPID],
    Description
FROM fn_dblog (NULL, NULL)
WHERE [Transaction Name] = 'DROPOBJ'
GO

在删除对象的数据库中执行此操作。

答案 2 :(得分:1)

谢谢大家的建议/答案。

我们的一位工程师试图安装一个不同的DBMR版本,这删除了一些工作,SP等。抱歉,如果浪费你的时间。