Вы можете обнаружить все эти события в текущем цикле регистрации событий, используя sp_readerrorlog
:
EXEC sys.sp_readerrorlog @p1 = 0, @p2 = 1, @p3 = N'OFFLINE';
Вы можете переключаться между значениями, @p1
если вы не нашли его в текущем журнале событий. По умолчанию вы должны иметь возможность читать текущие и предыдущие 6 файлов журнала ошибок, поэтому используйте 0-6 в качестве аргументов, чтобы вернуться туда как можно дальше (в моей системе я не мог получить 0
/ NULL
агрегировать по всем файлам журнала; YMMV ).
Вернет что-то вроде этого:
LogDate ProcessInfo Text
------------- ----------- ---------------------------------------------------------
yyyy-mm-dd... spid72 Setting database option OFFLINE to ON for database 'foo'.
Конечно, есть вероятность, что журнал ошибок заполняется достаточно, чтобы события происходили до текущего набора журналов ошибок. В этом случае вам не повезло. Чтобы сохранить более длительную историю в будущем, вы можете изменить количество сохраняемых журналов ошибок. В обозревателе объектов разверните Управление, щелкните правой кнопкой мыши Журналы SQL Server и выберите Настроить. Там вы можете изменить настройки утилизации файла журнала ошибок, включая сохранение до предыдущих 99 файлов. Также посмотрите этот ответ .
Обратите внимание, что sp_readerrorlog
это недокументировано и не поддерживается, хотя многие люди писали об этом . В конце концов, файлы журнала ошибок - это просто текстовые файлы, так что вы можете написать свой собственный PowerShell, CLR и т. Д., Который просто анализирует файлы и возвращает ту же информацию. Вы можете определить, где находятся файлы журнала ошибок для этого экземпляра, используя:
SELECT SERVERPROPERTY('ErrorLogFileName');
Файлы будут названы ERRORLOG
, ERRORLOG.1
, ERRORLOG.2
и т.д. Вы можете пойти и открыть файлы в базовом текстовом редакторе , чтобы увидеть структуру, хотя я бы быть осторожным об открытии текущего файла в использовании ( ERRORLOG
).