我最近开始支持在SQL Server 2008 R2中维护数据库的项目。
有一个SQL服务器代理DBMR作业在几天之前运行正常。现在它已经失败了,错误"无法找到存储过程' XXX' &#34 ;.当我查看master数据库时,该程序不存在。
有没有办法(日志或事件查看器,如应用程序)从sql server管理工作室我可以找出最近有人删除了SP?
在一个强有力的假设下,没有人会删除任何SP ..我真的很困惑这个工作如何运行到2天并且现在失败了。任何建议/想法的欢迎。谢谢。
答案 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年之间的开始时间,因此结果集应包括所有已删除的程序(对象)
希望这会对你有所帮助
更多阅读
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等。抱歉,如果浪费你的时间。