2014-09-25 2 views
1

Недавно я начал поддерживать проект, базы данных которого поддерживаются в SQL Server 2008 R2.Ошибка выполнения агента SQL Server

Существует работа DBMR агента SQL-сервера, которая работает нормально до нескольких дней назад. Теперь он ошибся с ошибкой «Не удалось найти хранимую процедуру« XXX ». Когда я смотрел в базу данных мастера, этой процедуры нет.

Есть ли способ (журнал или просмотр событий, например, приложение) из студии управления сервером sql. Я могу узнать, был ли недавно удален SP кем-то?

Под сильным допущением никто не удалил бы SP. Я действительно озадачен тем, как эта работа работает нормально до 2 дней и не работает сейчас. Любые предложения/идеи приветствуются. Благодарю.

+0

Может возникнуть возможность изменить разрешение для пользователя, на котором выполнялось это задание, может вызвать эту проблему. Попросите DBA проверить, существует ли этот SP или нет. Если они говорят, что не существует, то кто-то был удален, иначе попросите предоставить более ранние разрешения. –

+0

Разрешение не является проблемой, так как есть несколько других заданий, которые работают под одним и тем же пользователем. – Xavi

+0

Для вашей информации каждый объект может иметь разные разрешения, конечно, мы должны получить подтверждение от администратора базы данных. –

ответ

1

Благодарим всех за ваши предложения/ответы.

Один из наших инженеров попытался установить другую версию DBMR, и это удалило некоторые задания, SP и т. Д. Извините, если потратил ваше время.

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

Вы можете использовать функцию 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 

Выполнить это в databa se, где объект был удален.

Смежные вопросы