Когда база данных была отключена


9

Я пытаюсь найти способ выяснить, когда пара моих баз данных sql были отключены.

Я проверил журналы, но не смог найти такую ​​информацию, и, кроме того, трассировка по умолчанию не включена.

У меня просто есть информация о том, что раньше был администратор БД, который отключил его, но не было ни писем, ни письменных сообщений как таковых.

Можем ли мы найти информацию об этом?

пожалуйста, предложите, спасибо!

Ответы:


11

Вы можете обнаружить все эти события в текущем цикле регистрации событий, используя 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).


Привет, Аарон, я не вошел в автономный режим в журналах SQL Server. Есть ли какие-либо настройки, чтобы мы могли поймать этого изменения? Спасибо,
DBALUKE HUANG

@DBALUKEHUANG Нет, если это произошло до самой ранней записи в журнале ошибок, и в средстве просмотра событий ничего нет , вам не повезло.
Аарон Бертран

Да, Аарон, в журналах SQL Server нет ничего, связанного с оффлайн. Для онлайн он имеет журналы ... Мне просто интересно, есть ли какие-то специальные настройки, позволяющие SQL Server ловить это?
DBALUKE HUANG

@DBALUKEHUANG Просто помните, что база данных может быть отключена по причинам, отличным от того, кто явно ее установил OFFLINE. На offlineсамом деле статус в sys.databases?
Аарон Бертран

4

Если база данных была отключена:

т.е.

alter database AdventureWorks2012
set offline;
go

Вы действительно увидите зарегистрированное сообщение в журнале ошибок SQL Server:

Для параметра базы данных OFFLINE установлено значение ON для базы данных AdventureWorks2012.

select *
from sys.messages
where language_id = 1033
and text like '%setting database option%for database%';

Идентификатор сообщения 5084, если вы отслеживаете изменения базы данных.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.